当前位置: 移动技术网 > IT编程>开发语言>JavaScript > C#微信小程序服务端获取用户解密信息实例代码

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

2019年03月22日  | 移动技术网IT编程  | 我要评论

贵阳国际会展中心,全国生猪价格,释欲达摩

 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],[timestamp],[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 
  } 
} 

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网