PHP配合微信小程序实现获取手机号码详解_php技巧

来源:脚本之家  责任编辑:小易  

今天刚好做项目的时候用到这块功能,黄啊码就直接上手了,奈何网上的教程各式各样,就是没有个直接可以抄的,啊码最烦说话说一半,今天就直接弄个给大家抄的。

当前通过获取session_key与encryptedData与iv进行解密获取手机号的方法已经不行了,只能通过点击按钮来实现获取微信用户的手机号

1:需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到动态令牌code,然后把code传到开发者后台,并在开发者后台调用微信后台提供的 phonenumber.getPhoneNumber 接口,消费code来换取用户手机号。每个code有效期为5分钟,且只能消费一次。

注:getPhoneNumber 返回的 code 与 wx.login 返回的 code 作用是不一样的,不能混用。

代码如下:

wxss代码:

 <button type="primary" style="width:100%" bindgetphonenumber="onGetPhoneNumber" open-type="getPhoneNumber">获取</button>

js代码:

onGetPhoneNumber (e){
    if(e.detail.code==null||e.detail.code==""){
      wx.showToast({
        title: '请允许获取您的手机号',

        'icon':'none',

      })

      return;

    }else{
      wx.request({
        data: {
          code: e.detail.code,

          time:config.dt,

          openid: storage.get('openid')

        },

        header: {'content-type': 'application/json'},

        url: config.api+'/getWxPhone', 

        success: function(res) {
          console.log(res.data.data.phone);

        }

      })

    }

          

  },

2:后端PHP代码【此处我用的是tp5】根据传过来的动态令牌code去获取手机号

/**
 * @param Request $request
 * 获取手机号码
 */
public function getWxPhone(Request $request){

    $params = $request::only(['code']);
    
    $url_get = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.config("appid").'&secret='.config("appsecret");

    $tmptoken = json_decode(curlGet($url_get),true);

    $token = $tmptoken['access_token'];
    
    $url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=".$token;

    $data['code']=$params['code'];

    $info = Post(json_encode($data),$url);

    $tmpinfo = json_decode($info,true);
    
    $code = $tmpinfo['errcode'];
    
    $phoneNumber = ""; 
    $phoneNumber = $tmpinfo['phone_info']['phoneNumber'];
    
    if($code == '0'){
        
        self::returnMsg(Error::SUCCESS, '获取手机号码成功',['phone'=>$phoneNumber]);
    }else{
        
        self::returnMsg(Error::FAILED, '获取手机号码失败',['']);
    }
    
}

附带函数:

function Post($curlPost, $url, $ssl = false)
{
? ? $curl = curl_init();

? ? curl_setopt($curl, CURLOPT_URL, $url);
? ? curl_setopt($curl, CURLOPT_HEADER, false);
? ? curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
? ? curl_setopt($curl, CURLOPT_NOBODY, true);
? ? curl_setopt($curl, CURLOPT_POST, true);
? ? curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
? ? if (!$ssl) {
? ? ? ? curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
? ? ? ? curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
? ? }
? ? $return_str = curl_exec($curl);
? ? curl_close($curl);
? ? return $return_str;
}

可能出现的错误:errcode“:47001

问题所在:

这里肯定是忘记用json_encode

除了这个问题,某些大聪明娃喜欢把

https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=".$token 

这里的access_token变成data里边的参数,这时候就出现了access_token过期的问题。

一切问题来源于没有好好看官方文档

因为你如果将access_token当做参数,接口就变成了用两次access_token,第一次木有问题,第二次就只能跟你说拜拜了(access_token过期或无效)。

到此这篇关于PHP配合微信小程序实现获取手机号码详解的文章就介绍到这了,更多相关PHP获取手机号码内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

您可能感兴趣的文章:微信小程序开发之获取用户手机号码(php接口解密)php获取手机端的号码以及ip地址实例代码PHP通过API获取手机号码归属地

  • 本文相关:
  • php常用函数之格式化时间操作示例
  • php chr() ord()中文截取乱码问题解决方法
  • php下载远程文件到本地存储的方法
  • php检测图片主要颜色的方法
  • php命名空间用法实例分析
  • php中的buffer缓冲区用法分析
  • 老生常谈php 文件写入和读取(必看篇)
  • php实现rsa加密类实例
  • mysql gbk→utf-8编码转换
  • php实现的sso单点登录系统接入功能示例分析
  • PHP怎么获取微信小程序的CODE
  • 微信小程序退出账号怎么实现
  • 微信小程序怎么实现自动刷新
  • 微信小程序实现页面跳转传值以及获取值的方法分析
  • tp5实现微信小程序多图片上传到服务器功能
  • 微信小程序开发能实现哪些功能
  • 微信小程序实现带参数的分享功能(两种方法)
  • 微信小程序实现上传图片功能
  • 请教大神php怎么微信小程序发送过来的json数据
  • 微信小程序的触手可及怎么理解?
  • 微信小程序怎么获取接口实现轮播图
  • 微信小程序怎么实现获取用户信息
  • 微信小程序是用什么语言开发的 微信小程序开发语言可以用ph...
  • 微信小程序实现日期格式化和倒计时
  • 微信小程序实现的一键连接wifi功能示例
  • 微信小程序开发可以实现哪些功能
  • 微信小程序如何再次获取用户授权的方法
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全php基础php技巧php实例php文摘php模板首页php编程微信小程序开发之获取用户手机号码(php接口解密)php获取手机端的号码以及ip地址实例代码php通过api获取手机号码归属地php常用函数之格式化时间操作示例php chr() ord()中文截取乱码问题解决方法php下载远程文件到本地存储的方法php检测图片主要颜色的方法php命名空间用法实例分析php中的buffer缓冲区用法分析老生常谈php 文件写入和读取(必看篇)php实现rsa加密类实例mysql gbk→utf-8编码转换php实现的sso单点登录系统接入功能示例分析php中json_decode()和json_encode(php 数组和字符串互相转换实现方法php 字符串中是否包含指定字符串的多种方法php中使用curl实现get和post请求的方法php中iconv函数使用方法php日期转时间戳,指定日期转换成时间戳php 页面跳转到另一个页面的多种方法方法总结php中文处理 中文字符串截取(mb_substr)和获取中php下intval()和(int)转换使用与区别利用phpexcel实现excel数据的导入导出(全步骤详细phpmyadmin中无法导入sql文件的解决办法扩展你的 php 之入门篇php4与php5的区别小结(配置异同)php汉字转换拼音的函数代码php常用图片处理类wordpress中限制非管理员用户在文章后只能评论一次六酷社区论坛home页清新格调免费版 下载php通过ajax实现双击table修改内容php array_key_exists() 与 isset() 的区别php 处理txt文件(打开/关闭/检查/读取)
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved