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 + "&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],1617630051,[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
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
白云城资源网 Copyright www.dyhadc.com
暂无“C#微信小程序服务端获取用户解密信息实例代码”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
2025年10月26日
2025年10月26日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]