全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C#微信小程序服务端获取用户解密信息实例代码

 C#微信小程序服务端获取用户解密信息实例代码

实现代码:

using AIOWeb.Models; 
using Newtonsoft.Json; 
using Newtonsoft.Json.Linq; 
using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.SqlClient; 
using System.Linq; 
using System.Web; 
 
namespace AIOWeb 
{ 
  /// <summary> 
  /// wxapi 的摘要说明 
  /// </summary> 
  public class wxapi : IHttpHandler 
  { 
    public void ProcessRequest(HttpContext context) 
    { 
      context.Response.ContentType = "text/plain"; 
 
      string code = ""; 
      string iv = ""; 
      string encryptedData = ""; 
      try 
      { 
        code = HttpContext.Current.Request.QueryString["code"].ToString(); 
        iv = HttpContext.Current.Request.QueryString["iv"].ToString(); 
        encryptedData = HttpContext.Current.Request.QueryString["encryptedData"].ToString(); 
      } 
      catch (Exception ex) 
      { 
        context.Response.Write(ex.ToString()); 
      } 
 
      string Appid = "wxdb2641f85b04f1b3"; 
      string Secret = "8591d8cd7197b9197e17b3275329a1e7"; 
      string grant_type = "authorization_code"; 
 
      //向微信服务端 使用登录凭证 code 获取 session_key 和 openid  
      string url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + Appid + "&secret=" + Secret + "&js_code=" + code + "&grant_type=" + grant_type; 
      string type = "utf-8"; 
 
      AIOWeb.Models.GetUsersHelper GetUsersHelper = new AIOWeb.Models.GetUsersHelper(); 
      string j = GetUsersHelper.GetUrltoHtml(url, type);//获取微信服务器返回字符串 
 
      //将字符串转换为json格式 
      JObject jo = (JObject)JsonConvert.DeserializeObject(j); 
 
      result res = new result(); 
      try 
      { 
        //微信服务器验证成功 
        res.openid = jo["openid"].ToString(); 
        res.session_key = jo["session_key"].ToString(); 
      } 
      catch (Exception) 
      { 
        //微信服务器验证失败 
        res.errcode = jo["errcode"].ToString(); 
        res.errmsg = jo["errmsg"].ToString(); 
      } 
      if (!string.IsNullOrEmpty(res.openid)) 
      { 
        //用户数据解密 
        GetUsersHelper.AesIV = iv; 
        GetUsersHelper.AesKey = res.session_key; 
 
        string result = GetUsersHelper.AESDecrypt(encryptedData); 
 
 
        //存储用户数据 
        JObject _usrInfo = (JObject)JsonConvert.DeserializeObject(result); 
 
        userInfo userInfo = new userInfo(); 
        userInfo.openId = _usrInfo["openId"].ToString(); 
 
        try //部分验证返回值中没有unionId 
        { 
          userInfo.unionId = _usrInfo["unionId"].ToString(); 
        } 
        catch (Exception) 
        { 
          userInfo.unionId = "unionId"; 
        } 
         
        userInfo.nickName = _usrInfo["nickName"].ToString(); 
        userInfo.gender = _usrInfo["gender"].ToString(); 
        userInfo.city = _usrInfo["city"].ToString(); 
        userInfo.province = _usrInfo["province"].ToString(); 
        userInfo.country = _usrInfo["country"].ToString(); 
        userInfo.avatarUrl = _usrInfo["avatarUrl"].ToString(); 
 
        object watermark = _usrInfo["watermark"].ToString(); 
        object appid = _usrInfo["watermark"]["appid"].ToString(); 
        object timestamp = _usrInfo["watermark"]["timestamp"].ToString(); 
 
 
        #region 
 
 
        //创建连接池对象(与数据库服务器进行连接) 
        SqlConnection conn = new SqlConnection("server=127.0.0.1;database=Test;uid=sa;pwd=1"); 
        //打开连接池 
        conn.Open(); 
        //创建命令对象 
        string Qrystr = "SELECT * FROM WeChatUsers WHERE openId='" + userInfo.openId + "'"; 
        SqlCommand cmdQry = new SqlCommand(Qrystr, conn); 
        object obj = cmdQry.ExecuteScalar(); 
        if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) 
        { 
          string str = "INSERT INTO WeChatUsers ([UnionId] ,[OpenId],[NickName],[Gender],[City],[Province],[Country],[AvatarUrl],[Appid],1771273798,[Memo],[counts])VALUES('" + userInfo.unionId + "','" + userInfo.openId + "','" + userInfo.nickName + "','" + userInfo.gender + "','" + userInfo.city + "','" + userInfo.province + "','" + userInfo.country + "','" + userInfo.avatarUrl + "','" + appid.ToString() + "','" + timestamp.ToString() + "','来自微信小程序','1')"; 
 
          SqlCommand cmdUp = new SqlCommand(str, conn); 
          // 执行操作 
          try 
          { 
            int row = cmdUp.ExecuteNonQuery(); 
          } 
          catch (Exception ex) 
          { 
            context.Response.Write(ex.ToString()); 
          } 
        } 
        else 
        { 
          //多次访问,记录访问次数counts  更新unionId是预防最初没有,后期关联后却仍未记录 
          string str = "UPDATE dbo.WeChatUsers SET counts = counts+1,UnionId = '" + userInfo.unionId + "' WHERE OpenId='" + userInfo.openId + "'"; 
          SqlCommand cmdUp = new SqlCommand(str, conn); 
          int row = cmdUp.ExecuteNonQuery(); 
        } 
         
        //关闭连接池 
        conn.Close(); 
        #endregion 
 
        //返回解密后的用户数据 
        context.Response.Write(result); 
      } 
      else 
      { 
        context.Response.Write(j); 
      } 
    } 
 
    public bool IsReusable 
    { 
      get 
      { 
        return false; 
      } 
    } 
  } 
} 

GetUsersHelper 帮助类

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Security.Cryptography; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace AIOWeb.Models 
{ 
  public class GetUsersHelper 
  { 
 
    /// <summary> 
    /// 获取链接返回数据 
    /// </summary> 
    /// <param name="Url">链接</param> 
    /// <param name="type">请求类型</param> 
    /// <returns></returns> 
    public string GetUrltoHtml(string Url, string type) 
    { 
      try 
      { 
        System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url); 
        // Get the response instance. 
        System.Net.WebResponse wResp = wReq.GetResponse(); 
        System.IO.Stream respStream = wResp.GetResponseStream(); 
        // Dim reader As StreamReader = New StreamReader(respStream) 
        using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type))) 
        { 
          return reader.ReadToEnd(); 
        } 
      } 
      catch (System.Exception ex) 
      { 
        return ex.Message; 
      } 
    } 
    #region 微信小程序用户数据解密 
 
    public static string AesKey; 
    public static string AesIV; 
 
    /// <summary> 
    /// AES解密 
    /// </summary> 
    /// <param name="inputdata">输入的数据encryptedData</param> 
    /// <param name="AesKey">key</param> 
    /// <param name="AesIV">向量128</param> 
    /// <returns name="result">解密后的字符串</returns> 
    public string AESDecrypt(string inputdata) 
    { 
      try 
      { 
        AesIV = AesIV.Replace(" ", "+"); 
        AesKey = AesKey.Replace(" ", "+"); 
        inputdata = inputdata.Replace(" ", "+"); 
        byte[] encryptedData = Convert.FromBase64String(inputdata); 
 
        RijndaelManaged rijndaelCipher = new RijndaelManaged(); 
        rijndaelCipher.Key = Convert.FromBase64String(AesKey); // Encoding.UTF8.GetBytes(AesKey); 
        rijndaelCipher.IV = Convert.FromBase64String(AesIV);// Encoding.UTF8.GetBytes(AesIV); 
        rijndaelCipher.Mode = CipherMode.CBC; 
        rijndaelCipher.Padding = PaddingMode.PKCS7; 
        ICryptoTransform transform = rijndaelCipher.CreateDecryptor(); 
        byte[] plainText = transform.TransformFinalBlock(encryptedData, 0, encryptedData.Length); 
        string result = Encoding.UTF8.GetString(plainText); 
 
        return result; 
      } 
      catch (Exception) 
      { 
        return null; 
 
      } 
    } 
    #endregion 
  } 
} 

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C#微信小程序服务端获取用户解密信息实例代码  # C#微信小程序解密信息  # c#使用微信接口开发微信门户应用  # C#实现微信公众号群发消息(解决一天只能发一次的限制)实例分享  # C#微信公众号开发之接收事件推送与消息排重的方法  # C#微信公众平台开发之access_token的获取存储与更新  # C#微信开发之发送模板消息  # C#开发之微信小程序发送模板消息功能  # .NET C#使用微信公众号登录网站  # c#版在pc端发起微信扫码支付的实例  # C#开发微信公众号接口开发  # C#实现微信分账功能的完整步骤  # 连接池  # 服务端  # 希望能  # 谢谢大家  # 转换为  # 仍未  # 后期  # 后却  # 返回值  # 最初  # jo  # JObject  # GetUrltoHtml  # JsonConvert  # utf  # GetUsersHelper  # json  # type  # weixin  # qq 


相关文章: 香港服务器如何优化才能显著提升网站加载速度?  开源网站制作软件,开源网站什么意思?  高端网站建设与定制开发一站式解决方案 中企动力  如何通过虚拟主机快速搭建个人网站?  ,交易猫的商品怎么发布到网站上去?  做企业网站制作流程,企业网站制作基本流程有哪些?  企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?  已有域名和空间如何快速搭建网站?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  股票网站制作软件,网上股票怎么开户?  如何通过多用户协作模板快速搭建高效企业网站?  Swift中循环语句中的转移语句 break 和 continue  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  C#怎么创建控制台应用 C# Console App项目创建方法  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  教程网站设计制作软件,怎么创建自己的一个网站?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  建设网站制作价格,怎样建立自己的公司网站?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  如何高效生成建站之星成品网站源码?  建站之星安装需要哪些步骤及注意事项?  建站之星如何助力企业快速打造五合一网站?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  如何选择可靠的免备案建站服务器?  ui设计制作网站有哪些,手机UI设计网址吗?  如何在自有机房高效搭建专业网站?  Python路径拼接规范_跨平台处理说明【指导】  建站之星伪静态规则如何设置?  建站之星如何通过成品分离优化网站效率?  如何通过云梦建站系统实现SEO快速优化?  个人网站制作流程图片大全,个人网站如何注销?  建站之星安装步骤有哪些常见问题?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  非常酷的网站设计制作软件,酷培ai教育官方网站?  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何在阿里云部署织梦网站?  高防服务器租用首荐平台,企业级优惠套餐快速部署  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  大型企业网站制作流程,做网站需要注册公司吗?  如何快速启动建站代理加盟业务?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  Android使用GridView实现日历的简单功能  如何解决VPS建站LNMP环境配置常见问题?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  高防服务器租用如何选择配置与防御等级?  网站网页制作专业公司,怎样制作自己的网页?  网站代码制作软件有哪些,如何生成自己网站的代码?  建站之星后台管理:高效配置与模板优化提升用户体验  c# 在高并发场景下,委托和接口调用的性能对比 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。