微信小程序获取手机号和OPENID

本文记录了微信小程序中获取用户手机号的流程。首先,通过前端传递的code获取openid和session_key。然后,使用session_key和前端加密数据,通过解密方法获取手机号。解密过程涉及AES-128-CBC加密方式,成功后返回的手机号存储在$data对象中。

小程序开发已经是家常便饭了,当然获取手机号也是需要经常用到,今天做个记录

获取流程是,先通过前端传递过来的code,获取openid和session_key,然后拿着session_key和前端传递过来的加密信息来获取手机号信息

$appid = '';
$secret = '';
$code = ''; //前端传递过来的
$data = file_get_contents('https://api.weixin.qq.com/sns/jscode2session?appid=' . $appid . '&secret=' . $secret . '&js_code=' . $code . '&grant_type=authorization_code');
if (!empty($data)) {
    $data = json_decode($data, true);
    $openid = $data['errcode'] == 0 ? $data['openid'] : '';
    //$session_key = $data['session_key'];
    return $openid;
}

有了这些信息后,可以通过解密方法来获取手机号

private function decryptData($appid, $sessionKey, $encryptedData, $iv, &$data)
{
    if (strlen($sessionKey) != 24) {
        return -41001;
    }
    $aesKey = base64_decode($sessionKey);
    if (strlen($iv) != 24) {
        return -41002;
    }
    $aesIV = base64_decode($iv);
    $aesCipher = base64_decode($encryptedData);
    $result = openssl_decrypt($aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
    $dataObj = json_decode($result);
    if ($dataObj == NULL) {
        return -41003;
    }
    if ($dataObj->watermark->appid != $appid) {
        return -41004;
    }
    $data = $dataObj;
    return 0;
}

上面方法需要传递四个参数,分别是,appid,session_key,前端的加密数据,前端的IV值,还有一个引入式变量data,方法返回一个状态码,如果状态码等于0的时候,那就是成功了,$data的数据就是手机号json,下面是一个例子:

$appid = '';
$session_key = ''; //拿上门获取的session_key
$encryptedData = ''; //前端传递
$iv = ''; //前端传递
$data = ''; //默认声明
$errCode = $this->decryptData($appid,$session_key,$encryptedData,$iv,$data);
$this->logs('phoneinfo:' . json_encode($data));
if ($errCode == 0) {
    $phone = $data->phoneNumber;
    return $phone;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值