博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信小程序 php解密,微信小程序服务端获取用户解密信息的方法
阅读量:5733 次
发布时间:2019-06-18

本文共 5831 字,大约阅读时间需要 19 分钟。

这篇文章主要介绍了 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

{

///

/// wxapi 的摘要说明

///

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

{

///

/// 获取链接返回数据

///

/// 链接

/// 请求类型

///

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;

///

/// AES解密

///

/// 输入的数据encryptedData

/// key

/// 向量128

/// 解密后的字符串

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

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

转载地址:http://waowx.baihongyu.com/

你可能感兴趣的文章
Centos 配置IP的方式
查看>>
Go 的吉祥物,萌不萌
查看>>
Java 的swing.GroupLayout布局管理器的使用方法和实例
查看>>
Android中Activity和Fragment的生命周期的对比
查看>>
C++Primer_笔记_异常处理
查看>>
分区交换 alter table exchange partition 在线表 历史表交换
查看>>
思科三层交换 HSRP 热备 配置方法
查看>>
zabbix详解:(二)添加被监控机器
查看>>
设计模式单列
查看>>
人像模式的灯光效果?iPhone 8开挂袭来
查看>>
Linux下MongoDB安装与配置
查看>>
DSL配置(PPPOA)
查看>>
WEBRTC执行流程
查看>>
Spring Boot 入门系列
查看>>
Spring Cloud版——电影售票系统<六>使用 Spring Cloud Config 统一管理微服务配置
查看>>
Java not support java EE1.3
查看>>
iptables规则备份及恢复、firewalld九个zone,service的操作
查看>>
www.conf配置文件的参数详解
查看>>
如何实现邀请好友帮抢票功能?
查看>>
深圳联通特邀湖北籍企业参观公司总部大楼举行
查看>>