小程序中  能获取用户手机号信息,但是需要解密才能得到真实的手机号码。

public ActionResult pay(string jscode,string encryptedData, string iv)
        {
            bool bosucceed = true;
            try
            {
                string _posdata = "appid=" + appid + "&secret=" + secret + "&js_code=" + jscode + "&grant_type=authorization_code";
                string _url = "https://api.weixin.qq.com/sns/jscode2session";//获取openid
                string _data = request_url(_url, _posdata);
                if (_data.Contains("\"openid\""))
                {

string _ip = Request.ServerVariables.Get("Remote_Addr").ToString().Trim();
                    dynamic _modal = Newtonsoft.Json.Linq.JToken.Parse(_data) as dynamic;
                    string _openid = _modal.openid;
                    string _session_key = _modal.session_key;
                    if(!String.IsNullOrEmpty(encryptedData) && !string.IsNullOrEmpty(IV))
                    {
                        //解析手机号码
                        string _telPhone = getPhoneNumber(encryptedData, IV, _session_key);
                    }

}

}

catch (Exception ex)
            {
                return this.Json(new { succeed = false, data = ex.Message }, JsonRequestBehavior.AllowGet);
            }

}

#region 请求api
        /// <summary>
        /// 请求api
        /// </summary>
        /// <param name="_url"></param>
        /// <param name="post_data"></param>
        /// <returns></returns>
        private string request_url(string _url, string post_data)
        {
            string result = "";      string url = _url;// "https://api.weixin.qq.com/sns/jscode2session";

Encoding encoding = Encoding.UTF8;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            request.ContentType = "application/json";
            //request.Headers=""
            request.Method = "POST";

byte[] buffer = encoding.GetBytes(post_data.Trim());
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
            {
                result = reader.ReadToEnd();
            }
            return result;
        }
        #endregion

//https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.htm

/// <summary>
        /// AES解密:从小程序中 getPhoneNumber 返回值中,解析手机号码
        /// </summary>
        /// <param name="encryptedData">包括敏感数据在内的完整用户信息的加密数据,详细见加密数据解密算法</param>
        /// <param name="IV">加密算法的初始向量</param>
        /// <param name="Session_key"></param>
        /// <returns>手机号码</returns>
        private string getPhoneNumber(string encryptedData, string IV, string Session_key)
        {
            try
            {

byte[] encryData = Convert.FromBase64String(encryptedData);  // strToToHexByte(text);
                RijndaelManaged rijndaelCipher = new RijndaelManaged();
                rijndaelCipher.Key = Convert.FromBase64String(Session_key); // Encoding.UTF8.GetBytes(AesKey);
                rijndaelCipher.IV = Convert.FromBase64String(IV);// Encoding.UTF8.GetBytes(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);
                //动态解析result 成对象
                dynamic model = Newtonsoft.Json.Linq.JToken.Parse(result) as dynamic;
                return model.phoneNumber;

}
            catch (Exception ex)
            {
                //MessageBox.Show(ex.Message);
                return "";

}
        }

C# 小程序 getPhoneNumber(e),后台解析手机号码相关推荐

  1. 微信小程序——利用java后台解析Excel文件的数据

    后台为java,ssm框架 1.在SpringMvc.xml文件中增加Spring文件上传的解析器 <bean id="multipartResolver"class=&qu ...

  2. 微信小程序调用php,微信小程序调用PHP后台接口 解析纯html文本

    微信小程序调用php后台接口,解析纯html文本,效果图片预览 1.微信js动态传参: wx.request({ url: 'https://m.****.com/index.php/home/xia ...

  3. 微信小程序 getPhoneNumber获取用户手机号

    微信小程序 getPhoneNumber获取用户手机号 在使用getPhoneNumber前,可以先看下官方文档:文档地址 在注意这里,官方提到如果不使用之前wx.login调用获取的sessionK ...

  4. 微信小程序request请求后台接收不到参数问题

    微信小程序request请求后台接收不到参数问题 一. 小程序部分代码 二. 后端 三. 问题代码 四. 请求头 一. 小程序部分代码 发一个普通的request请求 wx.request({url: ...

  5. php网页抓取浏览者手机号码_微信小程序开发之获取用户手机号码(php接口解密)...

    后边要做一个微信小程序,并要能获取用户微信绑定的手机号码.而小程序开发文档上边提供的获取手机号码的接口(getPhoneNumber())返回的是密文,需要服务器端进行解密,但是官方提供的开发文档一如 ...

  6. 微信小程序及Java后台测试登录

    微信小程序及Java后台测试登录 文章目录 微信小程序及Java后台测试登录 一.使用的工具以及开发环境 二.微信端登录代码. 第一种方式,使用wx.getUserInfo直接获取微信头像,昵称. 第 ...

  7. 微信小程序调用PHP接口,微信小程序调用PHP后台接口教程

    微信小程序调用PHP后台接口,解析纯html文本,效果图片预览 1.微信js动态传参: wx.request({ url: 'https://m.****.com/index.php/Home/Xia ...

  8. 二当家的官网微信小程序源码实例解析

    版权声明:转载请注明原创地址 https://blog.csdn.net/u013032788/article/details/54376774 二当家的官网微信小程序源码实例解析,微信小程序开发教程 ...

  9. Android微信小程序原理,微信小程序事件流原理解析

    这篇文章主要介绍了微信小程序事件流原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.什么是事件? 事件是视图层到逻辑层的通讯方式: 事件可 ...

  10. 后台接收数组_微信小程序如何与后台api接口进行数据交互(微信报修小程序源码讲解七)...

    完成用户授权登录逻辑后,接下来的开发工作大部分都是与后台 api 接口的交互,本节我们详细讲解一下小程序如何与 api 进行交互 . 小程序如何发送 http/https 请求到后台? 小程序请求 h ...

最新文章

  1. fastqc检验时不能执行java_利用fastqc检测原始序列的质量
  2. python基础网易_十年Python大牛花了三天总结出来的python基础知识实例,超详细!...
  3. javaMail发邮件
  4. java本地读取文件的io类_Java File类与文件IO流总结
  5. JWT-基于token的认证方式
  6. Win7下Android模拟器中没有3G网络信号的解决办法
  7. 关于 create-react-app 自定义 eslint文件配置解决方案
  8. 带你一文搞懂网络层的IP协议\数据链路层的以太网\ARP协议以及DNS和NAT协议
  9. linq 学习日记-select
  10. 正则表达式基础知识(转)
  11. Python BeautifuSoup4 爬表格
  12. legend2---开发日志4(常用的链接传值方式有哪些)
  13. MiniUtilityFramework(九):CText和TEXT
  14. 闲聊一下android 3D 网络游戏
  15. Tic Tac Toe
  16. 转行做程序员到底可不可行?转行前先考虑好以下几点
  17. List在遍历时修改元素会怎样?——学习笔记
  18. 基于TBtools做基因家族分析教程 (全)
  19. 中国最具影响力的10位画家:八大山人
  20. 抢占式实例在小博无线的应用

热门文章

  1. 完全认识计算机网络之TCP/IP
  2. Python实现统一社会信用代码合法性校验
  3. saiku 升级备份恢复
  4. GBase 8c数据高可用技术
  5. P3855 [TJOI2008]Binary Land
  6. 51nod1423 最大二“货”
  7. NCCL+Ubuntu20.04安装
  8. C++ Primer Plus课后编程练习第6章参考代码
  9. springboot 使用 Spring Boot WebSocket 创建聊天室 2-11
  10. 动态3D特效壁纸软件Wallpaper Engine的免费获取及安装问题解决