【PHP 小程序授权获取手机号】

PHP 小程序授权获取手机号

前端

提示: 官方提示需使用 botton 按钮的类型为 open-type="getPhoneNumber"

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
Page({
	getPhoneNumber (e) {
		// code 是换取手机号码的令牌
		console.log(e.detail.code) 
		if (e.detail.errMsg == 'getPhoneNumber:ok') {
			wx.request({
				method: 'post',
				url: 'https://demo.com/getPhoneNumber.php',  // 后端地址
				header: { "Content-Type": "application/x-www-form-urlencoded" }
				data: { type: 'getPhoneNumber', code: e.detail.code },
				success: (res) => {
					console.log(res.data.phoneNumber);
				}
			})
		}
	}
})

PHP

提示:要获取手机号码需要用两个参数分别 code 令牌和 access_token, 所以要先获取 access_token

换取手机号的地址: https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=ACCESS_TOKEN

// getPhoneNumber.php
class GetPhoneNumber {
	/*
		获取 access_token
	*/
	public function getAccessToken() {
        $appid = '';    // 填写自己的 AppId
        $secret = '';   // 填写自己的秘钥
        
		$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=". $secret;
		
		// 把 access_token 返回出去
    	return json_decode(file_get_contents($url), true);
	}


	/*
		PHP 请求
	*/
	public function httpRequest($url, $data) {
	    $curl = curl_init();
	    curl_setopt($curl, CURLOPT_URL, $url);
	    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
	    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
	
	    if (!empty($phoneCode)) {
	        curl_setopt($curl, CURLOPT_POST, TRUE);
	        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
	        curl_setopt($curl, CURLOPT_HTTPHEADER, array(
	            "Content-type:application/json;", 
	            "Accept:application/json"
	        ));
	    }
	    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
	    $output = curl_exec($curl);
	    curl_close($curl);
	    $output = json_decode($output,true);
	    return $output;
   }


	/*
		获取手机号码
	*/
	public function getPhoneNumber() {
		// 获取前端传过来的 code 令牌
		$code = isset($_POST['code']) ? $_POST['code'] : '';
		
		// 先获取 access_token
		$accessToken = $this -> getAccessToken();
		$token = $accessToken['access_token'];
		
		// 组装获取手机号的请求地址
		$url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" . $token;
		
		// 这里的 code 令牌必须是用数组格式, 并且要转成 JSON, 否则会报 47001 错误
		$phoneInfo = $this -> httpRequest($url, json_encode([ 'code' => $code ]));
		echo $phoneInfo['phone_info']['phoneNumber'];
	}
	
}

$getPhoneNumber = new GetPhoneNumber();
$type = isset($_POST['type']) ? $_POST['type'] : '';

// 判断一下类型, 要执行哪个
if($type == 'getPhoneNumber') {
	$getPhoneNumber -> getPhoneNumber();
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在PHP中实现微信小程序授权获取用户信息并绑定手机号登录,可以按照以下步骤进行操作: 1. 在微信小程序端,通过`wx.login`获取到用户的临时登录凭证`code`。 2. 将获取到的`code`发送到服务器端,使用`https`接口调用`code2Session`接口,获取到`openid`和`session_key`。 3. 将`openid`和`session_key`保存至服务器端数据库或缓存中。 4. 在小程序端,使用`wx.getUserInfo`获取用户信息,包括`nickName`、`avatarUrl`等,并将用户信息传输到服务器端。 5. 在服务器端,接收到用户信息后,将用户信息保存到服务器数据库中,可以使用`openid`作为用户的唯一标识。 6. 在小程序端,点击绑定手机号的按钮,调用`wx.request`向服务器发送请求,请求获取手机号的能力。 7. 在服务器端,接收到手机号请求后,可以返回一个包含手机号获取能力的`code`给小程序端。 8. 小程序端收到`code`后,调用`wx.request`向服务器发送请求,请求获取手机号。 9. 服务器端接收到获取手机号的请求后,可以通过调用微信开放平台提供的解密能力,解密包含手机号的数据,并将解密得到的手机号与用户信息进行绑定。 10. 绑定成功后,返回相应的状态给小程序端。 总结:通过以上步骤,我们可以在PHP中实现微信小程序授权获取用户信息并绑定手机号登录的功能。在小程序端,用户使用微信授权登录后,将用户信息传输到服务器端保存,并通过绑定手机号使用户能够更便捷地登录和使用小程序。同时,在服务器端需要进行数据加密和解密的操作,确保用户的信息安全。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值