js 微信小游戏 登入 创建授权按钮 用户授权 获取用户 openid 和其他的敏感字段

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值