var crypto = require("crypto-js");
var base64 = require("crypto-js/enc-base64");
cc.Class({
extends:BaseWind,
onEnable()
{
this.onWechartLogin();
},
//微信登入
onWechartLogin()
{
var self = this;
//微信登入
wx.login({
success:function(res)
{
self.m_code = res.code;
self.createUserInfoBtn();
},
fail:function(res)
{
console.log("login fail", res);
}
});
},
//创建授权按钮
createUserInfoBtn()
{
var viewSize = cc.view.getFrameSize();
var vW = viewSize.width/2; //屏幕宽
var vH = viewSize.height/2;
var w = 300 * 2 * vW/1920
var h = 200.m_gameStartBtn.height * 2 * vH/1080
this.wxBtn = wx.createUserInfoButton({
type: 'image',
text: '获取用户信息',
image: "https://www.xianqiju.cn/all-res/caihongjuntuan/start_btn.png",
withCredentials:true, //是否带上登录态信息。当 withCredentials 为 true 时,要求此前有调用过 wx.login 且登录态尚未过期,此时返回的数据会包含 encryptedData, iv 等敏感信息;当 withCredentials 为 false 时,不要求有登录态,返回的数据不包含 encryptedData, iv 等敏感信息。
style: {
left: vW,
top: vH,
width: w,
height: h,
}
});
//添加授权按钮监听
this.onWxLoginClick();
},
onWxLoginClick()
{
var self = this;
wx.getSetting({
success: function(res)
{
if(res.authSetting['scope.userInfo'])
{
// 已经授权,可以直接调用 getUserInfo 获取头像昵称
wx.getUserInfo({
success: function(res)
{
self.setInfo(res);
if(self.wxBtn != null)
self.wxBtn.hide();
}
});
}
},
fail: function(res) {
console.log("login fail", res);
}
});
self.wxBtn.onTap((res) => {
var self = this;
var iv = res.iv;
var encryptedData = res.encryptedData;
self.setWxUserInfo(self, iv, encryptedData);
});
},
// appid secret 通过 pos 请求 获取敏感信息openId
setWxUserInfo(self,iv,encryptedData)
{
var mSecret = "4486a5fab24b50a321cce385700780ec"; //你自己的AppSecret(小程序密钥)
var mAppid = "wx0d749165140b8059";//你自己的AppID(小程序ID) 获取方式在底部
var mUrl = "https://api.weixin.qq.com/sns/jscode2session?appid="+mAppid+"&secret="+mSecret+"&js_code="+self.m_code+"&grant_type=authorization_code";
//var mUrl = "https://xianqiju.cn/open/openid?code=" + this.m_code;
wx.request({
url: mUrl,
data: {code: self.m_code}, //参数为键值对字符串
success: function (res) {
console.log("-----------request-----------");
var sessionKey = res.data.session_key;
var openid = res.data.openid;
self.selfInfo.m_nOpenId = openid
self.friendInfo.m_nOpenId = self.selfInfo.m_nOpenId;
//解密 得到 用户信息
const desessionkey = base64.parse(sessionKey);
const deencryptedData = base64.parse(encryptedData);
const deiv = base64.parse(iv);
let decrypt = crypto.AES.decrypt(deencryptedData, desessionkey, {
iv: deiv,
mode: crypto.mode.CBC,
padding: crypto.pad.Pkcs7
});
let decryptedStr = decrypt.toString(crypto.enc.Utf8);
console.log(JSON.stringify(decrypt));
self.onLoginClick();
}
});
},
onLoginClick(){
//执行登录后的功能
},
});
首先我们需要获取两个东西 一个是 AppID(小程序ID) 一个是 Appsecret (小程序秘钥) 在你的微信公众平台小程序开发设置中获取。
var crypto = require("crypto-js");
var base64 = require("crypto-js/enc-base64");
加密解密算法:https://download.youkuaiyun.com/download/weixin_41316824/10831569