微信小程序之授权登录流程(获取手机号)

如果发起请求不知道,怎么发起的话,参考微信小程序封装wx.request ,发起网络请求。封装为模块

1、调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
2、调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 和 会话密钥 session_key。
3、使用会话密钥 session_key解密button返回的手机号加密后的数据
一、调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器
官方文档
调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等
在这里插入图片描述

onLoad: function () {
	wx.login({
	   success: function (res) {
	      if (res.code) {//获取code之后,换取session_key
	        var url = app.globalData.swtBase + "A_login.php?act=main&code=" + res.code;
	        util.http(that, url, that.loginCallback);//请求反馈
	     }
	     console.log(res);
	   },
	   fail: function (res) {
	     console.log(res);
	     //return;
	     wx.hideLoading();
	     wx.showModal({
	       title: '提示',
	       content: '稍微等一小会再试.',
	       showCancel: false,
	       complete: function () {
	         wx.navigateBack({
	           delta: 1
	         })
	       }
	     })
	     return;
	   }
	})
}

loginCallback: function(that, data) {
   wx.hideLoading();
   var openid = data.openid;//获取openid
   var userSessionKey = data.userSessionKey;//获取session_key
   that.setData({
     openid: openid,
     userSessionKey: userSessionKey
   })
 },

A_login.php换取session_key

官方文档

	function curl_get($url){
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL,$url);
		curl_setopt($ch, CURLOPT_HEADER,0);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);//禁止调用时就输出获取到的数据
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);//HTTPS这个是重点。
		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);//HTTPS这个是重点。
		$result = curl_exec($ch);
		curl_close($ch);
		return $result;
	}
    $token_url = "https://api.weixin.qq.com/sns/jscode2session";
    $token_url.= "?appid=" . AppID . "";
    $token_url.= "&secret=" . AppSecret . "";
    $token_url.= "&js_code=" . $_GET["code"] . "";
    $token_url.= "&grant_type=authorization_code";
    //$json_token = file_get_contents($token_url);
    $json_token = curl_get($token_url);//curl_get请见
	//echo $json_token;
    $token = json_decode($json_token, true);
	//echo '<pre>';
	//print_r($token);
	//exit;

到这里前面的一系列只是为了获取appid和session_key为解码做准备!

button请求

官方文档

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">授权登录</button>

在这里插入图片描述

  //获取用户手机号码
  onGetPhoneNumber: function(e) {
    console.log(e);
    var that = this;
    if (e.detail.errMsg == 'getPhoneNumber:ok') {
      var url = app.globalData.swtBase + "A_login.php?act=PhoneNumber";//向服务器,发起转换请求
      var htmlDatas = {
        tjrhao: tjrhao,
        openid: that.data.openid,
        userSessionKey: that.data.userSessionKey,
        iv: e.detail.iv,
        encryptedData: e.detail.encryptedData
      };
      util.http(that, url, that.loginPhoneNumberCallback, null, htmlDatas);
    }
    return;
  },

具体怎么解码的,官方给了文档,直接套用就行了

官方链接
在这里插入图片描述

在这里插入图片描述

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值