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

news2024/11/19 5:31:49

小程序通过wx.login组件会返回一个code,这个code用来获得用户的openid

小程序写法为:

wx.login({
  success (res) {
    if (res.code) {
      //发起网络请求
      wx.request({
        url: 'https://example.com/onLogin',// 后台给的请求地址
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

 后端通过以下代码可以获得openid(参考文档:获取插件用户openpid | 微信开放文档)

<?php
public function getopenid(){
    $js_code = input('post.js_code');//小程序传来的code值
        $appid = '';//自己小程序的appid
        $appSecret = '';// 自己小程序的$appSecret
        $wxUrl = 'https://api.weixin.qq.com/sns/jscode2sessionappid=%s&secret=%s&js_code=%s&grant_type=authorization_code';
        $getUrl = sprintf($wxUrl, $appid, $appSecret, $js_code);
        //把appid,appsecret,code拼 接到url里
        $result = $this->curl_get($getUrl);//请求拼接好的url
        $wxResult = json_decode($result, true);
        return wxResult;
}
public function curl_get($url, &$httpCode = 0) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        //不做证书校验,部署在linux环境下请改为true
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
        $file_contents = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);
        return $file_contents;
    }

使用手机号快速验证组件,获得的code用来请求地址获得手机号。

这个是手机号快速验证组件

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>

Page({
  getPhoneNumber (e) {
    console.log(e.detail.code)  // 动态令牌
    console.log(e.detail.errMsg) // 回调信息(成功失败都会返回)
    console.log(e.detail.errno)  // 错误码(失败时返回)
  }
})

具体返回信息为:

 后端拿到code后获取手机号的代码为(参考文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-info/phone-number/getPhoneNumber.html):

public function getphone(){
        $js_code = input('post.phone_code');//小程序传来的code值
        $appid = '';//小程序的appid
        $appSecret = '';// 小程序的$appSecret
        $access_token = $this->getAccessToken($appid, $appSecret);
        if($access_token !== false){
            $data = array(
                'code' => $js_code
            );
            $result=$this->getUserPhoneNumber("https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token=".$access_token,$data);
            var_dump($result);
        }

    }
public function getAccessToken($appid,$secret){
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        $data = curl_exec($ch);
        if(curl_errno($ch)){
            echo '<br>Curl error: ' . curl_error($ch)."<br>";
            return curl_error($ch);
        }
        curl_close($ch);
        $result = json_decode($data,true);
        if(isset($result["access_token"])){
            return $result["access_token"];
        }else{
            echo "<br>getAccessToken Failed: ".$result["errcode"].";".$result["errmsg"]."<br>";
            return false;
        }
    }
public function getUserPhoneNumber($remote_server, $data) {
        $json_data = json_encode($data);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $remote_server);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        $data = curl_exec($ch);
        if(curl_errno($ch)){
            echo '<br>Curl error: ' . curl_error($ch)."<br>";
            return curl_error($ch);
        }
        curl_close($ch);
        //$result = json_decode($data,true);
        //var_dump($result);
        return $data;
    }

如还有问题,可以留言联系,处理了一晚上的bug就记录到这里啦

参考官方文档:

小程序端需要写的:

手机号快速验证组件 | 微信开放文档

php后台需要写的:

手机号验证 | 微信开放文档

获取接口调用凭据:

获取接口调用凭据 | 微信开放文档

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1105805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

流程图如何制作?好用的11款流程图软件盘点!

流程图是一种强大的可视化工具&#xff0c;用于清晰地展示各种过程和步骤&#xff0c;应用非常广泛&#xff0c;在各个行业中随处可见&#xff0c;凡是涉及流程步骤的场景&#xff0c;都可以用到流程图&#xff0c;那么问题来了&#xff1a;流程图如何制作&#xff1f; 这篇文…

性能优化-卡顿优化-tarce抓取及分析

性能优化&#xff08;卡顿分析&#xff09; 文章目录 一、抓取trace的方法1.使用systrace抓取trace2.使用atrace抓取3.使用Perfetto抓取trace 二、trace文件的分析1.快捷操作1.1 导航操作1.2 快捷操作 2.chrome trace工具分析trace文件3.Prefetto分析trace文件 一、抓取trace的…

C++初阶-类和对象(上)

类和对象&#xff08;上&#xff09; 一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装访问限定符封装 五、类的作用域六、类的实例化七、类的对象大小的计算如何计算类对象的大小类对象的存储方式猜测 八、类成员函数的this指针this指针的引出…

精神科常用评估量表汇总,建议收藏!

根据精神科医生的量表使用情况&#xff0c;笔者整理了10个精神科常用量表&#xff0c;可在线评测直接出结果&#xff0c;可转发使用&#xff0c;可生成二维码使用&#xff0c;可创建项目进行数据管理&#xff0c;有需要的小伙伴赶紧收藏&#xff01; 抑郁自评量表 抑郁自评量表…

22.项目开发之量化交易抓取数据QuantTradeData(一)

项目创建及后端业务&#xff1a;定时更新“股票列表基础信息”数据 项目创建 该量化交易数据平台用于数据库的数据抓取、分析等操作。 和QuantTrade使用同一个数据库&#xff0c;无需重新创建 pom.xml <properties><java.version>1.8</java.version><pro…

GPU 驱动下载记录

1. 我的GPU 是这个&#xff1a;GeForce RTX 2060 下载链接是&#xff1a;Official Drivers | NVIDIA

人脸识别技术是什么?如何进行人脸识别数据标注?

人脸识别解锁、人脸识别防盗系统、人脸识别登陆账户&#xff0c;相比于传统的指纹识别或者是虹膜识别等生物识别技术&#xff0c;人脸识别的应用更加广泛和多样。人脸识别技术是什么&#xff1f;人脸识别和数据标注有什么关系&#xff1f;阅读本文你会了解&#xff1a; 人脸识…

异形led显示屏调试步骤

调试异形LED显示屏需要一定的专业知识和技能。以下是一般的异形LED显示屏调试步骤&#xff1a; 安装和连接&#xff1a; 安装LED模块和框架&#xff0c;确保它们正确固定和对齐。连接电源和信号线。确保电源供电正常&#xff0c;信号线连接正确。什么是LED显示模块&#xff1f;…

android源码查阅连接

原文链接如下&#xff1a; AOSPXRef 在此做个笔记

Paypal提现到万里汇再提现到支付宝的全过程

因为外汇管制的缘故&#xff0c;paypal的钱无法直接提现到国内银行卡。即使提现也会接到电话通知表示非常抱歉无法入账。之前还被银行主管问到是否能提供合同&#xff0c;交易信息&#xff0c;是否完税等等。因为他们对网商都不是太懂&#xff0c;知道paypal已经算不错了。但是…

【数据结构】队列-Queue

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 队列 1.什么是队列2. 队列的使用3. …

报名倒计时 | 超硬核!第四届中国云计算基础架构开发者大会邀你参会

编者按&#xff1a;第四届 CID 大会将于 10 月 21 日在深圳南山科技园希尔顿花园酒店举办&#xff01;龙蜥社区作为本次 CID 大会支持的单位&#xff0c;诚邀您参与此次大会。 本大会将聚焦业界最前沿的云计算基础架构技术成果&#xff0c;围绕基础架构技术领域的技术交流&…

访问文件夹

访问文件夹并读取文件内容 将展示如何使用 JavaScript 中的 showDirectoryPicker() 方法来访问文件夹&#xff0c;并读取文件的内容。 HTML 结构 首先&#xff0c;需要一个按钮来触发打开文件夹的操作&#xff1a; <button>打开文件夹</button>还需要一个段落元…

限频差分探头N2060Apro

N2060Apro 差分探头提供一个安全的仪器给所有的示波器使用&#xff0c;它可以转换由高输入的差动电压进入一个低电压(≤7V)&#xff0c;并且显示波形在示波器上&#xff0c;使用频宽高达 200MHz&#xff0c;非常适合大电力测试、研发、维修使用。差分探头输出标示是设计在操作示…

系统大前端学习路线

第一阶段&#xff1a;HTML/CSS3以及工具部分 HTML和CSS用来制作网页&#xff0c;利用盒子模型&#xff0c;浮动&#xff0c;定位&#xff0c;flex布局进行网页布局&#xff0c;网页颜色&#xff0c;字体&#xff0c;背景&#xff0c;变换&#xff0c;过渡&#xff0c;动画等增…

flutter 创建插件

资料&#xff1a; flutter与原生通信的方式简介 - 简书 完整流程 Flutter 集成 Golang 多语言跨端开发基础案例 - 知乎 https://www.cnblogs.com/webabcd/p/flutter_lib_plugin_plugin_ios.html 步骤1、创建插件 我创建的插件名字是konnect_im_sdk 选择的语言是 java和swi…

怎么多号发圈和批量加好友?

你知道怎么多号发圈和批量加好友吗&#xff1f; 我们都知道&#xff0c;微信号多&#xff0c;管理起来是一件相当麻烦的事。 那发圈和加好友&#xff0c;多号的话&#xff0c;那是相当大的工作量&#xff0c;那有没有什么办法可以多号同时进行发圈和加人吗&#xff1f; 当然有的…

【Java实战】Mybatis plus根据数据库表自动生成代码

首先生成一个maven项目&#xff0c;不会生成的参考 【Java实战】创建第一个Springboot项目Hello worldhttps://blog.csdn.net/forgetmiss/article/details/133889733 &#xff08;写的过程中遇到过的问题&#xff1a;mybatis-plus 生成controller中的代码&#xff0c; Reques…

Bootstrap-- 内容

Bootstrap4 - 中文文档 - 内容 处理不同尺寸下的图片的处理&#xff0c;避免资源浪费&#xff01;&#xff01;&#xff01;

liunx下软链接和硬链接的用法

什么是软链接&#xff08;类似快捷方式&#xff09;&#xff1a; 符号连接&#xff08;Symbolic Link&#xff09;&#xff0c;也叫软连接。 软链接文件有类似于 Windows 的快捷方式。它实际上是一个特殊的文件。在符号连接中&#xff0c;文件实际上是一个文本文件&#xff0c…