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

 更新时间:2022年08月19日 11:55:51   作者:黄啊码  
这篇文章主要为大家详细介绍了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中使用mktime获取时间戳的一个黑色幽默分析

    PHP中使用mktime获取时间戳的一个黑色幽默分析

    mktime(hour,minute,second,month,day,year,is_dst)这是mktime的语法说明,一目了然应该不难写出一个时间戳的代码来
    2012-05-05
  • PHP后门隐藏的一些技巧总结

    PHP后门隐藏的一些技巧总结

    这篇文章主要介绍了关于PHP后门隐藏的一些技巧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • PHP观察者模式定义与用法实例分析

    PHP观察者模式定义与用法实例分析

    这篇文章主要介绍了PHP观察者模式定义与用法,结合具体实例形式分析了观察者模式的原理,及php定义、使用观察者模式相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • PHP对表单提交特殊字符的过滤和处理方法汇总

    PHP对表单提交特殊字符的过滤和处理方法汇总

    本篇文章主要是对PHP对表单提交特殊字符的过滤和处理方法进行了总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02
  • 浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)

    浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)

    下面小编就为大家带来一篇浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 11个PHP 分页脚本推荐

    11个PHP 分页脚本推荐

    Web开发中,分页设计必不可少。本文列举了10个PHP分页脚本,希望对你的web开发会有帮助。 列表中大部分,提供演示和代码下载。
    2011-08-08
  • php连接mysql之mysql_connect()与mysqli_connect()的区别

    php连接mysql之mysql_connect()与mysqli_connect()的区别

    本扩展自 PHP 5.5.0 起已废弃,并在将来会被移除。应使用 MySQLi 或 PDO_MySQL 扩展来替换之,这里就为大家分享一下mysql_connect()与mysqli_connect()的区别,需要的朋友可以参考下
    2020-07-07
  • 发款php蜘蛛统计插件只要有mysql就可用

    发款php蜘蛛统计插件只要有mysql就可用

    有时候我们为了看一下蜘蛛爬行的情况,不得不对日志进行大量的分析,由此想做一款插件可以记录蜘蛛的情况。在第一次做的时候,只是记录下蜘蛛的爬行次数,不大好分析。
    2010-10-10
  • javascript+php实现根据用户时区显示当地时间的方法

    javascript+php实现根据用户时区显示当地时间的方法

    这篇文章主要介绍了javascript+php实现根据用户时区显示当地时间的方法,实例分析javascript获取客户端时区及与服务器端php交互的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • php实现简单加入购物车功能

    php实现简单加入购物车功能

    本文主要介绍了php实现简单加入购物车功能的方法,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03

最新评论