微信小程序手机号验证开发遇到问题

这篇具有很好参考价值的文章主要介绍了微信小程序手机号验证开发遇到问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

公司小程序项目中快速登录需要实现微信用户授权手机登录、注册功能。结果遇到了

invalid code hint: [zHkDmt0sf-MBjga] rid: 64e3259f-1091b953-7e10f1da

目录

服务端文档

文档描述

返回信息

服务端代码

遇到问题

排查问题

1.服务端用错了appid serect

2.小程序端用错了appid serect

3.服务端用错了access_token

4.是否存在code使用了多次

5.非指定code

总结


服务端文档

文档描述

该接口需配合手机号快速验证或手机号实时验证能力一起使用,当用户同意后,可以通过 bindgetphonenumber 或 bindrealtimegetphonenumber 事件回调获取到动态令牌code,再调用该接口将code换取用户手机号。

注意:每个code只能使用一次,code的有效期为5min。

返回信息

微信小程序手机号验证开发遇到问题,微信,微信小程序,小程序

功能流程

微信小程序手机号验证开发遇到问题,微信,微信小程序,小程序

服务端代码

这里需要处理小程序发送过来code后,请求小程序手机号验证接口;

参数需要先获取小程序的access_token,和小程序获得的code。

class WeChat
{
    /**
     * 小程序appid
     * @var string
     */
    protected static $min_AppId = '你的小程序 appid';

    /**
     * 小程序app secret
     * @var string
     */
    protected static $min_AppSecret = '你的小程序secret';


    private static $_self;

    private function __construct()
    {
        // TODO: Implement __construct() method.
    }

    /**
     * 外部直接调用静态方法中的实例化
     * @return WeChat
     */
    public static function getInstance()
    {
        if (!self::$_self instanceof self) {
            self::$_self = new self();
        }
        return self::$_self;
    }

    private function __clone()
    {
        // TODO: Implement __clone() method.
    }

    /**
     * 获取小程序接口调用凭证
     * @Author: Yjl
     * @Since: 2023/8/21 16:42
     * @return mixed
     */
    protected function getMiniAccessToken()
    {
        $APPID = self::$min_AppId;
        $SECRET = self::$min_AppSecret;
        $url = "https://api.weixin.qq.com/cgi-bin/token?appid={$APPID}&secret={$SECRET}&grant_type=client_credential";
        $res = $this->linkCurl($url, 'GET');
        $res = djson($res);
        if (isset($res['errcode']) && $res['errcode']) {
            return [‘status’ => 0,’msg’ => $res['errmsg'],’data’=> ‘’];
        }

        return [‘status’ => 1,’msg’ => ‘success’,’data’=> $res['access_token']];
    }

    /**
     * 微信小程序-手机号快速验证
     * @Author: Yjl
     * @Since: 2023/8/21 16:01
     * @param $code
     * @return mixed
     */
    public function getPhoneNumber($code)
    {
        $res = $this->getMiniAccessToken();
        if ($res['status'] != 1) return $res;

        $url = "https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=" . $res['data'];
        $param = ['code' => $code];
        $data = json_encode($param);
        $header = array();
        $header[] = 'content-type:application/json';
        $res = $this->linkCurl($url, 'POST', $data, $header);
        $res = djson($res);
        if (isset($res['errcode']) && $res['errcode']) {
            return [‘status’ => 0,’msg’ => $res['errmsg'],’data’=> ‘’];
        }

        return [‘status’ => 1,’msg’ => ‘success’,’data’=> $res];
    }


    /**
     * 请求接口返回内容
     * @param $url :请求的URL地址
     * @param $method :请求方式POST|GET
     * @param $params :请求的参数
     * @param $header : 请求头
     * @return bool|string
     */
    protected function linkCurl($url, $method, $params = array(), $header = array())
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_FAILONERROR, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        if (strpos("$" . $url, "https://") == 1) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        }
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
        curl_setopt($ch, CURLOPT_TIMEOUT, 60);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        if ($method == "POST") {
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
        } else if ($params) {
            curl_setopt($ch, CURLOPT_URL, $url . '?' . http_build_query($params));
        }
        $response = curl_exec($ch);
        if ($response === false) {
            return false;
        }
        curl_close($ch);
        return $response;
    }
}

遇到问题

无效的code

invalid code hint: [zHkDmt0sf-MBjga] rid: 64e3259f-1091b953-7e10f1da

返回截图如下:

微信小程序手机号验证开发遇到问题,微信,微信小程序,小程序

排查问题

1.服务端用错了appid serect

经过仔细排查代码内容,此项无问题。

2.小程序端用错了appid serect

经过前端同事对比,和原有小程序其他接口使用正常,此项可以排除。

3.服务端用错了access_token

因为服务端也有公众号操作,所以发现access_token用混了,改之后还是提示上方错误!

4.是否存在code使用了多次

通过前端打印请求日志和直接使用code请求微信接口,此项可排除。

5.非指定code

最后继续研究文档才发现此code非彼code;

怎么回事呢,项目中还有一个登录获取用户信息的也需要小程序端生成code,然后服务端去获取用户信息实现登录;跟手机号验证的code不是同一个code,前端给用混了。

文档如下:

步骤1:需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,通过 bindgetphonenumber 事件获取回调信息;

步骤2:将 bindgetphonenumber 事件回调中的动态令牌code传到开发者后台,并在开发者后台调用微信后台提供的 phonenumber.getPhoneNumber 接口,消费code来换取用户手机号。每个code有效期为5分钟,且只能消费一次。

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

总结

发现问题并解决了觉得很简单,但当时真的耽误了一天;为什么开始没发现这个问题,只能说是前后端联调的锅;在这里记录一下吧,之前从网上找解决方法的时候看到很多原因,我这里也提供一种解决思路吧;最后还是要多看文档,多做测试,多沟通。文章来源地址https://www.toymoban.com/news/detail-667096.html

到了这里,关于微信小程序手机号验证开发遇到问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序 - 2023 年最新授权获取用户手机号详细教程,完美解决 getPhoneNumber 获取不到 code 的问题(老项目使用手机号快速验证组件,打印授权后没有code字段,拿不到cod)

    由于官方修改了 “获取用户手机号” 规则,导致网上几乎所有教程全部失效,本文来做最新详细教程。 2023年8月往后(官方废弃了原来 “免费” 获取用户手机号的相关方法 API,导致了大量小程序原获取手机号的方式失效报错),本文是最新微信小程序 “收费” 获取用户手

    2024年02月17日
    浏览(58)
  • 微信小程序:登录授权,根据手机号获取凭证,获取用户手机号

    1.微信小程序授权 controller 层代码 wxUtils 工具类 2.微信小程序,用户手机号获取 微信小程序,根据code(code为手机号获取凭证)获取用户加密手机号 获取用户手机号方法

    2024年02月14日
    浏览(46)
  • 微信小程序获取手机号

    1、先新建vue页面  打开看到页面是下图 在method定义方法    源码: node.js文件下载解压后启动node app.js打开服务器即可 点击下载

    2024年02月02日
    浏览(38)
  • 微信小程序 - 实现手机号登录--授权并获取手机号保存至本地

    微信官方文档 | 获取手机号 这是服务端的  这是我们前端获取手机号需要给接口传递的两个参数    注意: 参数一: 获取access_token需要用到小程序密钥,这个需要从 服务端获取 ,也就是需要请求后端接口获取access_token,千万不要将小程序密钥写在前端代码中, 必须 要从服

    2024年02月03日
    浏览(44)
  • 微信小程序获取openid,微信小程序获取手机号

    工具类

    2024年02月16日
    浏览(40)
  • 微信小程序手机号授权登录

    微信小程序,手机号授权登录需求。 大体流程是这样的: 小程序端使用 getPhoneNumber 向微信平台获取授权 通过微信授权后,小程序端接收微信授权后的回调 小程序携带微信的回调请求自己的服务端 服务端请求微信获取手机号并将手机号回调给小程序端 具体步骤和代码如下:

    2024年02月13日
    浏览(39)
  • 微信小程序手机号授权开始收费

    该能力旨在帮助开发者向用户发起手机号申请,并且必须经过用户同意后,开发者才可获得由平台验证后的手机号,进而为用户提供相应服务。 该能力与手机号实时验证组件的区别为: 手机号快速验证组件,平台会对号码进行验证,但不保证是实时验证; 手机号实时验证组

    2024年02月14日
    浏览(38)
  • 企业微信小程序获取手机号?

    一、确定小程序是开发企业内部应用,还是开发第三方应用。  如果是开发企业内部应用,也就是应用自建的可以使用   wx.qy.getMobile 这个api 去获取手机号 wx.qy.getMobile 调用前提: 1、必须先调用过wx.qy.login,且session_key未过期,开发者可调用checkSession 检查当前登录态( 需要

    2024年02月07日
    浏览(31)
  • 微信小程序:获取用户手机号(前端)

    获取手机号的开发过程可以分为三部分:微信前端设置,微信js文件编写,服务器端程序开发. 其中微信前端最为简单,在获取手机号的过程中我们必须经过用户授权,在wxml文件中加入如下代码: 然后我们需要编写js文件,当用户允许获取手机号后调用相关逻辑,将手机号加密信息发

    2024年02月06日
    浏览(42)
  • Java - 微信小程序授权手机号登录

            最近做了一个关于商城的项目,B端选用若依的开源框架,C端还是vue前后端分离。其中C端主要是小程序的形式,所以想着来总结一下对接微信小程序登录中Java部分遇到的坑即代码分享! 废话不多说,直接上代码! 1、controller 层代码          入参我这边是直接使用

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包