一、配置信息
-
微信公众平台: mp.weixin.qq.com/
-
步骤: 开发 -> 开发管理 -> 开发设置-> 拿到小程序专属的 AppId, Secret
二、实现思路
1、微信小程序通过 wx.login方法获取到用户登录code
2、后端使用 code,appId,secret 去访问微信获取用户openId和sessionKey
3、微信小程序 open-type="getPhoneNumber" 类型的按钮去获取encryptedData和iv
<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumberLocal">一键登录</button>
4、后端通过 sessionKey,iv,encryptedData 去解析用户信息,得到用户手机号
三、后端代码
获取openId的实体类
public class WeChatResult
{
public string session_key { get; set; }
public string openid { get; set; }
}
解析用户数据的实体类
public class WeChatUserResult
{
public string phoneNumber { get; set; }
public string purePhoneNumber { get; set; }
public string countryCode { get; set; }
public object watermark { get; set; }
}
1、GetOpenIdAndSessionKey方法 => 获取用户的openid 和 session_key
//获取微信用户openid sessionkey 的url
static string OpenIdAndSessionKeyUrl = "https://api.weixin.qq.com/sns/jscode2session?" +
"appid={0}&secret={1}&js_code={2}&grant_type=authorization_code";
public static WeChatResult GetOpenIdAndSessionKey(string code)
{
string appId = "小程序的appId";
string secret = "小程序的secret";
//获取openId的微信url配置
string url = string.Format(OpenIdAndSessionKeyUrl, appId, secret, code);
WebClient wbClient = new WebClient() { Encoding = Encoding.UTF8 };
string resultStr = wbClient.DownloadString(url);
//反序列化微信返回的数据
WeChatResult weChatResult = JsonConvert.DeserializeObject<WeChatResult>(resultStr);
if (weChatResult == null ||
string.IsNullOrEmpty(weChatResult.session_key) ||
string.IsNullOrEmpty(weChatResult.openid))
{
result.Code = 201;
result.Message = "code已失效!";
}
else
{
result.Data = weChatResult;
}
return weChatResult;
}
2、WeChatLoginGetPhone方法 => 获取用户的手机号
public static WeChatUserResult WeChatLoginGetPhone(string iv, string encryptedData, string sessionKey)
{
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
//设置解密器参数
aes.Mode = CipherMode.CBC;
aes.BlockSize = 128;
aes.Padding = PaddingMode.PKCS7;
//格式化待处理字符串
byte[] byte_encryptedData = Convert.FromBase64String(encryptedData);
byte[] byte_iv = Convert.FromBase64String(iv);
byte[] byte_sessionKey = Convert.FromBase64String(sessionKey);
aes.IV = byte_iv;
aes.Key = byte_sessionKey;
//根据设置好的数据生成解密器实例
ICryptoTransform transform = aes.CreateDecryptor();
//解密
byte[] final = transform.TransformFinalBlock(byte_encryptedData, 0, byte_encryptedData.Length);
//生成结果
string weChatUsrtStr = Encoding.UTF8.GetString(final);
//反序列化结果,生成用户信息实例
WeChatUserResult userInfo = JsonConvert.DeserializeObject<WeChatUserResult>(weChatUsrtStr);
return userInfo;
}
以上就是c#后端配置 实现微信小程序获取openid、sessionkey、手机号实现登录的功能流程。