1窟哺、appid非個(gè)人類型
2、解碼需要的session_key技肩、IV且轨、encryptedData,session_key可以先用上篇文章的方法獲取虚婿,以參數(shù)傳遞旋奢;或者傳遞code,在服務(wù)器上當(dāng)場(chǎng)獲取。
當(dāng)場(chǎng)獲取的完整代碼是:保存成ashx文件然痊,上傳到服務(wù)器至朗。
<% @ webhandler language="C#" class="AverageHandler" %>
using System;
using System.Net;
using System.Web;
using System.Collections.Generic;?
using System.Text;?
using System.Security.Cryptography;?
using System.IO;
using LitJson;
public class AverageHandler : IHttpHandler
{
public bool IsReusable
{ get { return true; } }
public void ProcessRequest(HttpContext ctx)
{
? ? ctx.Response.ContentType = "application/json";
? ? HttpRequest Request = ctx.Request;
? ? string text = Request["encryptedData"];
? ? string IV = Request["iv"];
? ? //小程序appid和appsecret配置
? ? string appid = "XXXXXXXXXXXXXXX";
? ? string secret = "XXXXXXXXXXXXXXXXXXXXXXXXX";
? ? string code = Request["code"];//微信獲取登錄的口令
? ? Stream s_re = WebRequest.Create("https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+code+"&grant_type=authorization_code").GetResponse().GetResponseStream();
? ? StreamReader sr = new StreamReader(s_re, Encoding.UTF8);
? ? string strLine = sr.ReadToEnd();
? ? sr.Close();
? ? try
? ? {
? ? ? ? JsonData jo = JsonMapper.ToObject(strLine);
? ? ? ? string Key = jo["session_key"].ToString();
? ? ? ? string weixinID = jo["openid"].ToString();
? ? ? ? string str= AES_decrypt(text,Key,IV);
? ? ? ? ctx.Response.Write(str);
? ? }
? ? ? ? catch (Exception ex)
? ? {
? ? ? ? //return "";
? ? }
}
public string AES_decrypt(string encryptedDataStr, string key, string iv)?
? ? ? ? {?
? ? ? ? ? ? RijndaelManaged rijalg = new RijndaelManaged();?
? ? ? ? ? ? //-----------------? ?
? ? ? ? ? ? //設(shè)置 cipher 格式 AES-128-CBC? ?
? ? ? ? ? ? rijalg.KeySize = 128;?
? ? ? ? ? ? rijalg.Padding = PaddingMode.PKCS7;?
? ? ? ? ? ? rijalg.Mode = CipherMode.CBC;?
? ? ? ? ? ? rijalg.Key = Convert.FromBase64String(key);?
? ? ? ? ? ? rijalg.IV = Convert.FromBase64String(iv);?
? ? ? ? ? ? byte[] encryptedData= Convert.FromBase64String(encryptedDataStr);?
? ? ? ? ? ? //解密? ?
? ? ? ? ? ? ICryptoTransform decryptor = rijalg.CreateDecryptor(rijalg.Key, rijalg.IV);?
? ? ? ? ? ? string result;?
? ? ? ? ? ? using (MemoryStream msDecrypt = new MemoryStream(encryptedData))?
? ? ? ? ? ? {?
? ? ? ? ? ? ? ? using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))?
? ? ? ? ? ? ? ? {?
? ? ? ? ? ? ? ? ? ? using (StreamReader srDecrypt = new StreamReader(csDecrypt))?
? ? ? ? ? ? ? ? ? ? {?
? ? ? ? ? ? ? ? ? ? ? ? result = srDecrypt.ReadToEnd();?
? ? ? ? ? ? ? ? ? ? }?
? ? ? ? ? ? ? ? }?
? ? ? ? ? ? }?
? ? ? ? ? ? return result;?
? ? ? ? }
}
小程序端:wxml
<button class='loginBtn' open-type='getPhoneNumber' bindgetphonenumber="getPhoneNumber">獲取用戶手機(jī)號(hào)</button>
小程序端:js
getPhoneNumber: function (e) {
? ? var that = this;
? ? ? wx.login({
? ? ? ? success: res => {
? ? ? ? ? console.log(res.code, e.detail.iv, e.detail.encryptedData)
? ? ? ? ? wx.request({
? ? ? ? ? ? //后臺(tái)接口地址
? ? ? ? ? ? url: 'https://www.XXXXXXX.com/weixin/getphone.ashx',
? ? ? ? ? ? data: {
? ? ? ? ? ? ? code: res.code,
? ? ? ? ? ? ? iv: e.detail.iv,
? ? ? ? ? ? ? encryptedData: e.detail.encryptedData,
? ? ? ? ? ? },
? ? ? ? ? ? method: 'GET',
? ? ? ? ? ? header: {
? ? ? ? ? ? ? 'content-type': 'application/json'
? ? ? ? ? ? },
? ? ? ? ? ? success: function (res) {
? ? ? ? ? ? ? console.log(res.data)
? ? ? ? ? ? }
? ? ? ? ? })
? ? ? ? }
? ? ? })
? }
結(jié)果: