微信小程序实现获取手机号(修复第一次授权错误问题)

5 篇文章 0 订阅

按钮HTML

<button type='warn' 
 open-type="getPhoneNumber" 
 @getphonenumber="getPhoneNumber" 
 class="mini-btn">授权登录</button>

 

WXBizDataCrypt.js

var crypto = require('crypto');
var jiemi = function (appId, sessionKey,encryptedData, iv) {
  // base64 decode
  var sessionKey = new Buffer(sessionKey, 'base64')
  encryptedData = new Buffer(encryptedData, 'base64')
  iv = new Buffer(iv, 'base64')
  try {
     // 解密
    var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv)
    // 设置自动 padding 为 true,删除填充补位
    decipher.setAutoPadding(true)
    var decoded = decipher.update(encryptedData, 'binary', 'utf8')
    decoded += decipher.final('utf8')
    decoded = JSON.parse(decoded)
  } catch (err) {
    console.log(err);
  }
  return decoded
};
module.exports = {
 jiemi:jiemi
}

Js方法

var WXBizDataCrypt = require('../../common/WXBizDataCrypt.js');  
export default {
    data() {
     return {
      wxCode:""
     }
    },
    onLoad() {
      var _self = this;
      wx.login({
       success (res) {
        if (res.code) {
         _self.wxCode = res.code;
        }
       }
     });
    },
    methods: {
        getPhoneNumber:function(e){
           if (e.detail.errMsg != 'getPhoneNumber:fail user deny') { //允许授权
           var encryptedData = e.detail.encryptedData;
           var iv = e.detail.iv;
           console.log("encryptedData-> "+encryptedData);
           console.log("iv-> "+iv);
  
           $.Post({t:"wx_xcx_login",code:this.wxCode},function(res){
						
		     console.log(res);
		     var res2 = res.res;
		     var resObj = JSON.parse(res2);
		     var appId = res.appid;
		     var sessionKey = resObj.session_key;
		     var openId = resObj.openid;
		     var unionid = resObj.unionid;
		     console.log("appId-> "+appId);
		     console.log("sessionKey-> "+sessionKey);
		     console.log("openId-> "+openId);
		     console.log("unionid-> "+unionid);
		     var data = WXBizDataCrypt.jiemi(appId, sessionKey,encryptedData, iv);  
		     console.log('------------------->');  
		     console.log('解密后 data: ', data); 
          });
	
        }else{
         console.log("fail user deny");
        }
      }
    }
}

后端:wx_xcx_login

 if("wx_xcx_login".equals(t)){
        String code = $.get("code");
        String appid = "wx13马赛克ff9";
        String appsecret = "55ca98f马赛克马赛克b91370ce4";
        if(!$.empty(code)){
            String result = $.httpGet("https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+appsecret+"&js_code="+code+"&grant_type=authorization_code");
         
            if(!$.empty(result)){
                Map info = $.gson.fromJson(result,Map.class);
                String openid = (String)info.get("openid");
                if(!$.empty(openid)){
                          $.json("status",1).json("appid",appid).json("openId",openid).json("res",result).out();
                }
            }
        }
    }

感谢您的支持,写的文章如对您有所帮助,开源不易,请您打赏,谢谢啦~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值