提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、不多说上代码(html)
  • 二、js
    • 2.用code拿到sessionkey和optionid的接口
    • 3、我们拿到sessionkey就要去解密手机号了
  • 总结

前言

先准备微信认证哦~
我们的步骤:
1、用户点击手机号触发wx.login去获取code
2、通过code去换取openid和sessionkey
3、通过sessionkey去解密用户手机号
注意:第一步骤也可用其他方法

一、不多说上代码(html)

 <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" bindtap="hideModal" bindtap="getUserProfile" >授权微信手机号</button>

二、js

getPhoneNumber(e) {var that = this;if (e.detail.errMsg == 'getPhoneNumber:ok') {wx.showLoading({ title: "登录中" })wx.login({  //请求得到codesuccess:function(res){console.log("code====="+res.code)if(res.code){wx.request({url: 'xxxxxx',  //通过code获取到sessionkey 接口我会放到后面data:{code:res.code},success:function(res){console.log("sessionkey======="+res.data)var sess=res.data;  //拿到sessionkeywx.checkSession({success: (res) => {wx.request({url: "https://www.meirilinggong.com/Wxdrop/getPhoneNumber", //通过iv data key拿到手机号并解密data: {aesIv: e.detail.iv,encryptedData: e.detail.encryptedData,session_key:sess,},method: "POST",success: function(res) {console.log(res.data)}});},fail:function(res){console.log(res)}})}})}else{console.log("用户登录状态失败")}}})}},

2.用code拿到sessionkey和optionid的接口

 /// <summary>/// 获取OpenID、session_key/// </summary>/// <param name="code"></param>/// <returns></returns>public string wxlogin(string code){ActionJson<string> actionJson = new ActionJson<string>(){status = 200,message = ""};try{//获取AccessTokenstring AccessTokenUrl = "https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code";string AccessTokenResult = RequestUrl(string.Format(AccessTokenUrl, AppID, AppSecret, code), "GET");string AccessToken = GetJsonValue(AccessTokenResult, "access_token");string ExpiresIn = GetJsonValue(AccessTokenResult, "expires_in");string RefreshToken = GetJsonValue(AccessTokenResult, "refresh_token");string OpenID = GetJsonValue(AccessTokenResult, "openid");string session_key = GetJsonValue(AccessTokenResult, "session_key");string ErrCode = GetJsonValue(AccessTokenResult, "errcode");string ErrMsg = GetJsonValue(AccessTokenResult, "errmsg");return session_key;}catch (Exception ex){actionJson.status = 400;actionJson.message = ex.Message;}return "";}private static string RequestUrl(string url, string method){// 设置参数HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;CookieContainer cookieContainer = new CookieContainer();request.CookieContainer = cookieContainer;request.AllowAutoRedirect = true;request.Method = method;request.ContentType = "text/html";request.Headers.Add("charset", "utf-8");//发送请求并获取相应回应数据HttpWebResponse response = request.GetResponse() as HttpWebResponse;//直到request.GetResponse()程序才开始向目标网页发送Post请求Stream responseStream = response.GetResponseStream();StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);//返回结果网页(html)代码string content = sr.ReadToEnd();return content;}private static string GetJsonValue(string jsonStr, string key){string result = string.Empty;if (!string.IsNullOrEmpty(jsonStr)){key = "\"" + key.Trim('"') + "\"";int index = jsonStr.IndexOf(key) + key.Length + 1;if (index > key.Length + 1){//先截逗号,若是最后一个,截“}”号,取最小值int end = jsonStr.IndexOf(',', index);if (end == -1){end = jsonStr.IndexOf('}', index);}result = jsonStr.Substring(index, end - index);result = result.Trim(new char[] { '"', ' ', '\'' }); //过滤引号或空格}}return result;}

3、我们拿到sessionkey就要去解密手机号了

注意注意注意:session有时候可能会因为转义出现\(反斜杠)的符号,我们需要把他替换掉。否则拿到手机号失败的

 /// <summary>/// 微信授权 解码获得用户手机号/// </summary>/// <param name="encryptedData"></param>/// <param name="aesIv"></param>/// <param name="session_key"></param>/// <param name="wechatId"></param>/// <returns></returns>public string getPhoneNumber(string encryptedData, string aesIv, string session_key, string wechatId){try{session_key = session_key.Replace("\\", "");byte[] encryData = Convert.FromBase64String(encryptedData);RijndaelManaged rijndaelCipher = new RijndaelManaged();rijndaelCipher.Key = Convert.FromBase64String(session_key);rijndaelCipher.IV = Convert.FromBase64String(aesIv);rijndaelCipher.Mode = CipherMode.CBC;rijndaelCipher.Padding = PaddingMode.PKCS7;ICryptoTransform transform = rijndaelCipher.CreateDecryptor();byte[] plainText = transform.TransformFinalBlock(encryData, 0, encryData.Length);string result = Encoding.Default.GetString(plainText);dynamic model = Newtonsoft.Json.Linq.JToken.Parse(result) as dynamic;string phoneNumber = model.phoneNumber;//return model.phoneNumber;if (string.IsNullOrEmpty(phoneNumber)){return "";}return phoneNumber;}catch (Exception ex){}return "";}

总结

1、在微信认证之后 我们可以直接wx.login拿到code
2、通过code我们可以拿到很多必要参数(参数最好后台获取、务必不要在前端直接拿)安全性第一
3、通过拿到的sessionkey去换取我们需要解码的手机号
4、解码成功之后就是对比数据库啦

个人见解 有问题勿喷~

实现微信小程序授权获取手机号登录(c#后端代码附上 少爷接收)相关推荐

  1. 微信小程序授权获取手机号

    这几天写了一个微信小程序的项目,有个需求通过授权获取手机号和appid,废话少说.让我来实现一下具体的功能,地址在下方 https://developers.weixin.qq.com/minipro ...

  2. uniapp 微信小程序 getPhoneNumber 获取手机号 提示 appid没有权限

    appid没有权限 问题出现原因,当前小程序账号没有进行"微信认证" 登录微信小程序后台,可以查看到当前小程序的基本信息. 微信小程序授权获取手机号接口 因为需要用户主动触发才能发 ...

  3. Java-(二)微信小程序授权获取用户信息和手机号码

    第一篇我们已经知道了微信小程序怎么授权登录获取用户信息. openId 和 unionId .下面将高速告诉大家,微信小程序如何授权获取用户信息和手机号码. 微信官方文档:https://develo ...

  4. 微信小程序授权获取用户信息和手机号码

    微信小程序授权获取用户信息和手机号码 1.微信官方文档 登录:https://developers.weixin.qq.com/miniprogram/dev/framework/open-abili ...

  5. 微信小程序授权 获取用户信息

    微信小程序授权 获取用户信息 小程序昵称突然变成了"微信用户",头像也不显示, <!-- 近期很多小伙伴通过该方法获取头像和昵称,代码也没有做改变,突然就变成了下面这样子 - ...

  6. 微信小程序授权获取头像昵称的最新形式——头像昵称填写

    微信小程序授权用户信息,不知道有没有人像我一样,从wx.getUserInfo到wx.getUserProfile再到头像昵称填写获取用户头像昵称全部尝试了一遍,怪就怪自己一开始没仔细看官方文档,没注 ...

  7. 微信小程序授权获取用户当前经纬度位置并转换为具体城市

    每日一句激励人心的鸡汤:     认真阅读接口文档,     认真阅读接口文档,     认真阅读接口文档. 微信小程序获取用户当前经纬度位置 getLocation() API文档传送门,查看文档后 ...

  8. 微信小程序自定义获取手机号按钮样式

    微信小程序提供了获取手机号的方式,需要通过 open-type 为 getPhoneNumber 的按钮,然而基础的 button 组件有时候并不能满足我们的需求 想要实现图中的自定义的按钮样式,有两 ...

  9. 微信小程序一键获取手机号

    微信小程序获取手机号 需下载微信官方解密文件.放到vendor目录下 -- [ 用户数据的签名验证和加解密 ] public function getphone(){$APPID = '';//自己配 ...

  10. 文案微信小程序源码独立版 前后端代码有齐全

    文案微信小程序源码文案+头像+背景图  文案微信小程序源码独立版+前端 | 星空资源网 (xk686.com) api接口是别人的,毕竟自己采集资源比较难 后台程序没有首页,只需要安装即用 后台账户: ...

最新文章

  1. 你之所以没成为成就,就是因为太刻苦了!
  2. 条件概率计算代替RNN
  3. python软件是免费的吗-python软件都是免费的吗
  4. 码代码,到白头|专访SRS创始作者阿里云RTC服务器团队负责人杨成立
  5. 页面调用系统window打印
  6. .net core在网关中统一配置Swagger
  7. 微信被曝大“Bug”?有用户账户资金被盗刷,这个功能要慎用
  8. ORA-04043: 对象 dba_data_files 不存在 BUG
  9. 第三章 ASP.NET MVC (模型绑定)
  10. ava 8中的新功能特性
  11. mybatis利用mapper代理的方法实现多条件查询
  12. 115-RTKLIB及GAMP中PPP的随机模型
  13. Win10鼠标单击经常变双击
  14. Fiddler代理设置
  15. 山西台达plc可编程控制器_PLC可编程控制器常见的应用领域
  16. java后台导出pdf,基础用法和样例
  17. MOOS-ivp简介
  18. Win10自定义安装Office2019
  19. 互联神州---AK爆头战报
  20. 图像分类篇:pytorch实现ResNet

热门文章

  1. 软件调试书籍资料汇总
  2. [完全免费] 在线UML State Diagram 状态机图工具 - 教程第7部分
  3. 【Format】ASF/WMV 文件格式解析
  4. 论文阅读汇总(4)-【篇数:50】
  5. mysql mpm_mysql mpm
  6. 论文记录-2018-A survey on image tampering and its detection in real-world photos
  7. swarm主网BZZ挖矿:钱包如何添加BZZ合约?如何查钱包余额?
  8. 面试相关-转载-well,yzl——持续更新
  9. Java个人资产管理系统问题总结
  10. Unity3D -- 天空盒(图文)