【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();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值