记录小程序获取手机号的填坑经过

315 阅读1分钟

微信小程序接口在不断的更新,有些更新会让人摸不着头脑,这不,最近小编在更新小程序获取手机号的方法时,就遇到了个坑。 首先强调一下,获取用户手机号分为旧版本和新版本

旧版本: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,踩过的坑,记录一下,进行总结,也希望能够帮助到后面遇到这个问题的朋友。