app.wx.cs 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. using BizCom;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using SiteCore.wechat;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Drawing;
  8. using System.Drawing.Imaging;
  9. using System.IO;
  10. using System.Linq;
  11. using System.Security.Cryptography;
  12. using System.Text;
  13. using System.Threading;
  14. using System.Threading.Tasks;
  15. using TenPay;
  16. using Utils;
  17. namespace SiteCore.Handler
  18. {
  19. public partial class app
  20. {
  21. string mini_Appid = "wx20432512482565e9";
  22. string mini_Secret = "07492bc9cbbc5b303e5e135b4dccd6f0";
  23. string mini_Appid_run = "wxe62d4788908d682c";
  24. string mini_Secret_run = "f6d0852161703ed7acdfe880895c7fbe";
  25. string grant_type = "authorization_code";
  26. /// <summary>
  27. /// 获取链接返回数据
  28. /// </summary>
  29. /// <param name="Url">链接</param>
  30. /// <param name="type">请求类型</param>
  31. /// <returns></returns>
  32. public string GetUrltoHtml(string Url, string type)
  33. {
  34. try
  35. {
  36. System.Net.WebRequest wReq = System.Net.WebRequest.Create(Url);
  37. // Get the response instance.
  38. System.Net.WebResponse wResp = wReq.GetResponse();
  39. System.IO.Stream respStream = wResp.GetResponseStream();
  40. // Dim reader As StreamReader = New StreamReader(respStream)
  41. using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream, Encoding.GetEncoding(type)))
  42. {
  43. return reader.ReadToEnd();
  44. }
  45. }
  46. catch (System.Exception ex)
  47. {
  48. return ex.Message;
  49. }
  50. }
  51. public void getUnifiedOrder()
  52. {
  53. }
  54. public void getReSign()
  55. {
  56. if(UrlPostParmsCheck("prepay_id"))
  57. {
  58. string appid = WxPayConfig.MiniAPPID;// GetPostString("appid");
  59. string prepay_id = GetPostString("prepay_id");
  60. WxPayData jsApiParam = new WxPayData();
  61. jsApiParam.SetValue("appId", appid);
  62. jsApiParam.SetValue("timeStamp", WxPayApi.GenerateTimeStamp());
  63. jsApiParam.SetValue("nonceStr", WxPayApi.GenerateNonceStr());
  64. jsApiParam.SetValue("package", "prepay_id=" + prepay_id);
  65. jsApiParam.SetValue("signType", "MD5");
  66. jsApiParam.SetValue("paySign", jsApiParam.MakeSign());
  67. conSuccess("",jsApiParam.ToJson());
  68. return;
  69. //string parameters = ;
  70. }
  71. conError("错误的参数");
  72. //Log.Debug(this.GetType().ToString(), "Get jsApiParam : " + parameters);
  73. //return parameters;
  74. }
  75. public void getReSign2(string prepay_id)
  76. {
  77. string appid = WxPayConfig.MiniAPPID;// GetPostString("appid");
  78. //string prepay_id = GetPostString("prepay_id");
  79. WxPayData jsApiParam = new WxPayData();
  80. jsApiParam.SetValue("appId", appid);
  81. jsApiParam.SetValue("timeStamp", WxPayApi.GenerateTimeStamp());
  82. jsApiParam.SetValue("nonceStr", WxPayApi.GenerateNonceStr());
  83. jsApiParam.SetValue("package", "prepay_id=" + prepay_id);
  84. jsApiParam.SetValue("signType", "MD5");
  85. jsApiParam.SetValue("paySign", jsApiParam.MakeSign());
  86. conSuccess("", jsApiParam.ToJson());
  87. }
  88. /// <summary>
  89. /// 根据微信小程序平台提供的解密算法解密数据
  90. /// </summary>
  91. /// <param name="encryptedData">加密数据</param>
  92. /// <param name="iv">初始向量</param>
  93. /// <param name="sessionKey">从服务端获取的SessionKey</param>
  94. /// <returns></returns>
  95. public WechatUserInfo Decrypt(string encryptedData, string iv, string sessionKey)
  96. {
  97. WechatUserInfo userInfo;
  98. //创建解密器生成工具实例
  99. AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
  100. //设置解密器参数
  101. aes.Mode = CipherMode.CBC;
  102. aes.BlockSize = 128;
  103. aes.Padding = PaddingMode.PKCS7;
  104. //格式化待处理字符串
  105. byte[] byte_encryptedData = Convert.FromBase64String(encryptedData);
  106. byte[] byte_iv = Convert.FromBase64String(iv);
  107. byte[] byte_sessionKey = Convert.FromBase64String(sessionKey);
  108. aes.IV = byte_iv;
  109. aes.Key = byte_sessionKey;
  110. //根据设置好的数据生成解密器实例
  111. ICryptoTransform transform = aes.CreateDecryptor();
  112. //解密
  113. byte[] final = transform.TransformFinalBlock(byte_encryptedData, 0, byte_encryptedData.Length);
  114. //生成结果
  115. string result = Encoding.UTF8.GetString(final);
  116. //反序列化结果,生成用户信息实例
  117. userInfo = JsonConvert.DeserializeObject<WechatUserInfo>(result);
  118. return userInfo;
  119. }
  120. public void wx_login()
  121. {
  122. if (UrlPostParmsCheck("code,uname,pwd"))
  123. {
  124. string code = GetPostString("code");
  125. string uname = GetPostString("uname");
  126. string pwd = GetPostString("pwd");
  127. string nickname = GetPostString("nickname");
  128. string avatarUrl = GetPostString("avatarUrl");
  129. int gender = GetPostInt("gender");
  130. //向微信服务端 使用登录凭证 code 获取 session_key 和 openid
  131. string url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + mini_Appid + "&secret=" + mini_Secret + "&js_code=" + code + "&grant_type=" + grant_type;
  132. string type = "utf-8";
  133. string json = GetUrltoHtml(url, type);//获取微信服务器返回字符串
  134. //微信服务器验证成功
  135. JObject jo = (JObject)JsonConvert.DeserializeObject(json);
  136. try
  137. {
  138. string openid = jo["openid"].ToString();
  139. string session_key = jo["session_key"].ToString();
  140. if (openid == "" || session_key == "")
  141. {
  142. conError("无法登录!");
  143. return;
  144. }
  145. pwd = SecurityHelper.EncryptMD5(pwd);//加密
  146. SUser entity = SUser.Get(uname, pwd);
  147. if (entity == null)
  148. {
  149. conError("用户名或密码错误!");
  150. return;
  151. }
  152. entity.Sex = gender;
  153. entity.NickName = nickname;
  154. entity.UserPic = avatarUrl;
  155. entity.Update();
  156. //封装成对象
  157. string session_id = con.Session.SessionID;
  158. UserObj uObj = new UserObj()
  159. {
  160. session_key = session_key,
  161. openid = openid,
  162. userid = entity.ID
  163. };
  164. //存入内存中
  165. RedisHelper.StringSet(session_id, JsonConvert.SerializeObject(uObj));
  166. //返回数据给小程序
  167. StringBuilder userStr = new StringBuilder();
  168. userStr.Append("{");
  169. userStr.AppendFormat("\"session3\":\"{0}\"", session_id);
  170. userStr.AppendFormat(",\"userpic\":\"{0}\"", entity.UserPic);
  171. userStr.AppendFormat(",\"mobile\":\"{0}\"", entity.Mobile);
  172. userStr.AppendFormat(",\"username\":\"{0}\"", entity.RealName);
  173. userStr.Append("}");
  174. conSuccess("登录成功", userStr.ToString());
  175. return;
  176. }
  177. catch (Exception)
  178. {
  179. //微信服务器验证失败
  180. string msg = jo["errcode"].ToString() + "," + jo["errmsg"].ToString();
  181. conError(msg);
  182. }
  183. return;
  184. }
  185. conError("错误的参数");
  186. }
  187. }
  188. }