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

小程序通过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环境下请改为truecurl_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.hqwc.cn/news/139342.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年中国熔盐储能装机量、新增装机量及行业投资规模分析[图]

熔盐储能是一种可以传递能量、长时间&#xff08;6-8h&#xff09;、大容量储能的技术路径&#xff0c;作为传热介质可以实现太阳能到热能的转换&#xff0c;作为储能介质可以实现将热能和电能的双向转换&#xff0c;可以很好的适应和解决以上两大矛盾。因此&#xff0c;熔盐储…

Linux上Docker的安装以及作为非运维人员应当掌握哪些Docker命令

目录 前言 1、安装步骤 2、理解镜像和容器究竟是什么意思 2.1、为什么我们要知道什么是镜像&#xff0c;什么是容器&#xff1f; 2.2、什么是镜像&#xff1f; 2.3、什么是容器&#xff1f; 2.4、Docker在做什么&#xff1f; 2.5、什么是镜像仓库&#xff1f; 2、Dock…

Mobpush智能化精准推送,助力求职者快人一步

近日&#xff0c;“BOSS”直聘崩了的消息又又又上了热搜&#xff0c;2023年9月15日上午&#xff0c;BOSS直聘在线统计超过4700万人。由此可见&#xff0c;随着金九银十招聘旺季的到来&#xff0c;求职软件成为人们的青睐。但是对于大多数使用招聘软件的用户而言&#xff0c;往往…

2023_Spark_实验十六:编写LoggerLevel方法及getLocalSparkSession方法

一、搭建Spark项目结构 在SparkProject模块的pom.xml文件中增加一下依赖&#xff0c;并等待依赖包下载完毕&#xff0c;如上图。 ​<!-- Spark及Scala的版本号 --><properties><scala.version>2.11</scala.version><spark.version>2.1.1</sp…

GPT绘制流程图咒语

【咒语】下面是我的一篇论文选取部分&#xff0c;为了让读者更好理解&#xff0c;我准备画一张图&#xff0c;请你阅读后为我设计一下这个图应该怎么画&#xff0c;更有说服力&#xff0c;更容易理解 论文片段&#xff1a; 多模态数据融合研究的基础在于有效的数据采集。首先&a…

进阶JAVA篇-如何理解作为参数使用的匿名内部类与 Arrays 类的常用API(九)

目录 目录 API 1.0 Arrays 类的说明 1.1 Arrays 类中的 toString() 静态方法 1.2 Arrays 类中的 copyOfRange(int[] original, int from, int to) 静态方法 1.3 Arrays 类中的 copyOf(int[] original, int newLength) 静态方法 1.4 Arrays 类中的 setAll(do…

旧手机热点机改造成服务器方案

如果你也跟我一样有这种想法, 那真的太酷了!!! ok,前提是得有root,不然体验大打折扣 目录 目录 1.做一个能爬墙能走百度直连的热点机(做热点机用) 2.做emby视频服务器 3.做文件服务, 存取文件 4.装青龙面板,跑一些定时任务 5.做远程摄像头监控 6.做web服务器 7.内网穿…

【Linux】文件IO基础知识——下篇

目录 一&#xff0c;stderr 2. errno全局变量 二&#xff0c;文件系统 1. 软链接 2. 硬链接 三&#xff0c;静态库 1. 制作静态库 2. 自动化生成静态库 & 自动发布库与头文件 3. 如何使用第三方库 法&#xff08;一&#xff09;&#xff1a;修改系统文件库 …

【milkv】更新rndis驱动

问题 由于windows升级到了11&#xff0c;导致rndis驱动无法识别到。 解决 打开设备管理器&#xff0c;查看网络适配器&#xff0c;没有更新会显示黄色的图标。 右击选择更新驱动

10种新型网络安全威胁和攻击手法

2023年&#xff0c;网络威胁领域呈现出一些新的发展趋势&#xff0c;攻击类型趋于多样化&#xff0c;例如&#xff1a;从MOVEit攻击可以看出勒索攻击者开始抛弃基于加密的勒索软件&#xff0c;转向窃取数据进行勒索&#xff1b;同时&#xff0c;攻击者们还减少了对传统恶意软件…

【小白专用】安装Apache2.4+ 安装PHP8.2+ php与sql server 2008 r2连接测试教程

PHP安装 1、PHP下载 PHP For Windows: Binaries and sources Releases 注意&#xff1a; 1.要下载Thread Safe&#xff0c;否则没有php7apache2_4.dll这个文件 2.如果是64位系统要下载x64的&#xff0c;x86的不行 3.下载Zip 2、PHP解压安装 将Zip进行解压&#xff0c;里…

关于罗克韦尔跟西门子PLC之间通讯的解决方案

不同品牌的PLC设备之间通讯一般是通过总线模块&#xff0c;或者直接在PLC内编程实现&#xff0c;这样不仅硬件成本高&#xff0c;而且开发调试的时间都很长&#xff0c;后期维护也相当麻烦。本文采用IGT-DSER智能网关模块&#xff0c;PLC内不用编程&#xff0c;通过PLC现有的以…