微信小程序接口在不断的更新,有些更新会让人摸不着头脑,这不,最近小编在更新小程序获取手机号的方法时,就遇到了个坑。 首先强调一下,获取用户手机号分为旧版本和新版本
旧版本:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/deprecatedGetPhoneNumber.html
新版本:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html
第一点要注意的是新旧版本,在获取方法上是有区别的,最主要的是:code,在官方文档有注释说明getPhoneNumber 返回的 code 与 wx.login 返回的 code 作用是不一样的,不能混用。
因为我是在旧的版本上直接修改的,所以,在code的使用上发生了混乱,导致我一直有错误提示:
["errcode"]=> int(41001) ["errmsg"]=> string(52) "access_token missing rid: 62d0ea65-2fdd2b07-1b906d1d"
第二点要注意的是:请求地址 access_token
一定要放在URL中,否则会一直提示你一个错误,
["errcode"]=> int(41001) ["errmsg"]=> string(52) "access_token missing rid: 62d0ff34-7ba62217-0247d6dc"
以下是错误示例,请注意错误示例!!!
$url = 'https://api.weixin.qq.com/wxa/business/getuserphonenumber?'; //这样提交会一直提示错误
$postData=[
'access_token' =>$Access_token,
'code' => $post['code']
];
$result = posturl($url, json_encode($postData));
正确的写法是把access_token 拼接在url上,让后在提交code参数。正确的代码应该是这样的。
public function bindPhone($post){
$Access_token = $this->wxgetPhone($post['code']);
$url = 'https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token='.$Access_token;
$postData=[
'code' => $post['code']
];
$result = posturl($url, json_encode($postData));
if (isset($result['errmsg']) && $result['errmsg'] !== 'ok' ) {
$this->error = json_encode('网络错误,请重新授权手机号');
return false;
}
return ['phoneNumber'=> $result['phone_info']['phoneNumber'] ];
}
第三点要注意的是,你提交的数据格式,需要是json格式的,如果你不使用json_decode进行装格式的话,小程序仍然会报错。
以上就是我在重新开发小程序获取用户手机号的时候遇到的bug,踩过的坑,记录一下,进行总结,也希望能够帮助到后面遇到这个问题的朋友。