小程序填坑:2018最新getPhoneNumber功能详解(PHP)

小程序获取用户手机号存在各种坑,加上小程序各种文档的不齐,使得开发人员踩下各种坑,本次我将实现成功的方法无私的奉献给大家,先来上一张成功之后的图片

这是微信小程序getPhoneNumber发起的一次请求

调用之后后端返回的数据如下

##以下是具体步骤

1.首先我这边是示例代码,具体文件可以根据项目进行选择文件

在index.wxml代码如下

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> 获取手机号码</button>

index.js代码如下:

//index.js
//获取应用实例
const app = getApp()
Page({
  getPhoneNumber: function (e) {
    console.log(e.detail.errMsg)
    console.log(e.detail.iv)
    console.log(e.detail.encryptedData)
  } ,



  getPhoneNumber: function (e) {
    console.log(e.detail.iv);
    console.log(e.detail.encryptedData);
    wx.login({
      success: res => {
        console.log(res.code);

        wx.request({
          url: '接口地址',
          data: {
            'encryptedData': encodeURI(e.detail.encryptedData),
            'iv': encodeURI(e.detail.iv),
            'code': encodeURI(res.code)
          },
          method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
          header: {
            'content-type': 'application/json'
          }, // 设置请求的 header
          success: function (res) {
            console.log(res);
          },
          fail: function (err) {
            console.log(err);
          }
        })
      }
    })
  }


})

【注意】:data里面必须加上endeURL,否则后端会解析错误(-41003: aes 解密失败

其他两个文件可以为空就行

后端代码如下(本人使用TP5框架,其他框架需自行修改对应的语法问题)

【注意】:需要把先下载信息解密文件,链接

然后提取出PHP文件夹,复制到vendor目录下面

 /**
     * @Author     : kiven
     * @Description:小程序getphonenumber获取手机号码接口
     * @LastModify : kiven
     */
    public function getPhone()
    {
        //开发者使用登陆凭证 code 获取 session_key 和 openid
        $APPID = $this->app_id;//自己配置
        $AppSecret = $this->secret;//自己配置

        $code = input('code');
        $url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $APPID . "&secret=" . $AppSecret . "&js_code=" . $code . "&grant_type=authorization_code";
        $arr = $this->vget($url);  // 一个使用curl实现的get方法请求
        $arr = json_decode($arr, true);

        $session_key = $arr['session_key'];
        $openid = $arr['openid'];
        Vendor("PHP.wxBizDataCrypt");  //加载解密文件,在官方有下载
        $pc = new \WXBizDataCrypt($APPID, $session_key);
        $iv = input('iv');
        $encryptedData = input('encryptedData');

        $errCode = $pc->decryptData($encryptedData, $iv, $data );

        if ($errCode == 0) {
            //print($data . "\n");
            //dump(json_decode($data));
            $phone =  json_decode($data,true);
            echo $phone['purePhoneNumber'];
            die;

        } else {
            echo $errCode;
            die;
        }


    }

  /**
     * @Author     : kiven
     * @Description:curl模拟请求方法
     * @LastModify : kiven
     * @param $url
     * @return bool|string
     */
    public function vget($url){
        $info=curl_init();
        curl_setopt($info,CURLOPT_RETURNTRANSFER,true);
        curl_setopt($info,CURLOPT_HEADER,0);
        curl_setopt($info,CURLOPT_NOBODY,0);
        curl_setopt($info,CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($info,CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($info,CURLOPT_URL,$url);
        $output= curl_exec($info);
        curl_close($info);
        return $output;
    }



以上就是全部内容,如果遇到问题可以在下面留言

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值