微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码
之前做的版本用户这块是以获取用户openid为凭证,最近改版重新整理了一下,新增注册登录以手机号码为主,
两种(正常注册手机号码-密码+一键获取当前用户手机号码)
getPhoneNumber这个组件要通过button来实现。将button中的open-type=“getPhoneNumber”,并且绑定bindgetphonenumber事件获取回调。
在使用这个组件之前必须先调用 login 接口
然后传递code,iv,encryptedData参数到后台,后台解密
示例
- <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"
- hover-class="none">一键自动注册</button>
- getPhoneNumber: function (e) {
- console.log(e.detail.errMsg)
- if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
- wx.showModal({
- title: '提示',
- showCancel: false,
- content: '未授权',
- success: function (res) { }
- })
- } else {
- wx.login({
- success: function (res) {
- var code = res.code;
- if (res.code) {
- //发起网络请求
- console.log(res.code)
- } else {
- console.log('获取用户登录态失败!' + res.errMsg)
- }
- wx.showModal({
- title: '提示',
- showCancel: false,
- content: '同意授权',
- success: function (res) {
- var that = this;
- console.log(123)
- wx.request({
- url: '/wxapplet/wx/wechat/phone',
- data: {
- code: code,
- iv: e.detail.iv,
- encryptedData: e.detail.encryptedData
- },
- method: 'GET',
- header: {
- 'content-type': 'application/json'
- },
- success: function (res) {
- wx.setStorageSync('user', res.data.data);
- if(res.data.code == "200"){
- console.log(res.data.data)
- wx.showToast({
- title: '一键绑定成功',
- icon: 'success',
- duration: 2000,
- success: function(){
- wx.switchTab({ url: '../user-center/index' });
- }
- })
- }else{
- wx.showModal({
- title: '提示',
- content: '一键绑定失败,请重新尝试',
- success: function (res) {
- if (res.confirm) {
- console.log('用户点击确定')
- } else if (res.cancel) {
- console.log('用户点击取消')
- }
- }
- })
- }
- },
- });
- }
- })
- }
- });
- }
- }
- 后台是php 框架是laravel
- <?php
- namespace App\Http\Controllers\WxApplet;
- use Illuminate\Http\Request;
- use App\Http\Controllers\Controller;
- use App\Repository\WxUserRepository;
- include_once app_path('/Http/Controllers/WxApplet/Php/wxBizDataCrypt.php');
- class WechatController extends Controller
- {
- /**
- * constructer.
- *
- * @param WxUserRepository $wxUser
- */
- public function __construct
- (
- WxUserRepository $WxUserRepository
- )
- {
- $this->WxUserRepository = $WxUserRepository;
- }
- /**
- * 获取用户手机号码
- *
- * @return response
- */
- public function getWechatUserPhone(Request $request)
- {
- $code = $request->get('code');
- $encryptedData = $request->get('encryptedData');
- $iv = $request->get('iv');
- //小程序开发账户
- $appid = "*******" ;
- $secret = "*******";
- $URL = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code";
- $apiData=file_get_contents($URL);
- if(!isset(json_decode($apiData)->errcode))
- {
- $sessionKey = json_decode($apiData)->session_key;
- $info = new \WXBizDataCrypt($appid, $sessionKey);
- $errCode = $info->decryptData($encryptedData, $iv, $data );
- if ($errCode == 0)
- {
- $phone = json_decode($data)->phoneNumber;
- $single_phone=$this->WxUserRepository->Single($phone);
- if ($single_phone == null)
- {
- $wx_user = $this->WxUserRepository->Create($phone,$password);
- }
- return $this->Success(200003);
- }
- else {
- return $this->fail(420004);
- }
- }
- }
- }
原文链接:https://blog.csdn.net/qq_34827048/article/details/78878121
微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码的更多相关文章
- 微信小程序前端调用后台方法并获取返回值
wxml代码 <wxs src="../../wxs/string.wxs" module="tools" /> <!-- 调用tools.i ...
- 微信小程序需要https后台的创业机会思考
最近比较关注微信小程序,而且微信小程序的后台必须强制要求https, https相对http成本要高很多了. 这里我感觉有2个商机 (1)提供https 中转服务器 ,按流量来收费 (2) 微信小程序 ...
- 微信小程序与Java后台通信
一.写在前面 最近接触了小程序的开发,后端选择Java,因为小程序的代码运行在腾讯的服务器上,而我们自己编写的Java代码运行在我们自己部署的服务器上,所以一开始不是很明白小程序如何与后台进行通信的, ...
- 微信小程序与Java后台的通信
一.写在前面 最近接触了小程序的开发,后端选择Java,因为小程序的代码运行在腾讯的服务器上,而我们自己编写的Java代码运行在我们自己部署的服务器上,所以一开始不是很明白小程序如何与后台进行通信的, ...
- 微信小程序登录JAVA后台
代码地址如下:http://www.demodashi.com/demo/12736.html 登录流程时序登录流程时序 具体的登录说明查看 小程序官方API 项目的结构图: springboot项目 ...
- 微信小程序:java后台获取openId
一.功能描述 openId是某个微信账户对应某个小程序或者公众号的唯一标识,但openId必须经过后台解密才能获取(之前实现过前台解密,可是由于微信小程序的种种限制,前台解密无法在小程序发布后使用) ...
- 微信小程序与java后台交互
java后台使用的ssm框架,小程序连接的本地接口.跟正常的web访问没什么区别,也是后台获取url,返回json数据:只是小程序前台请求的url要带上http://localhost:80801. ...
- 原创:微信小程序调用PHP后台接口,解析纯html文本
---效果图片预览--- 1.微信js动态传参:wx.request({ url: 'https://m.****.com/index.php/Home/Xiaoxxf/activ ...
- 微信小程序支付c#后台实现
今天为大家带来比较简单的支付后台处理 首先下载官方的c#模板(WxPayAPI),将模板(WxPayAPI)添加到服务器上,然后在WxPayAPI项目目录中添加两个“一般处理程序” (改名为GetOp ...
随机推荐
- ruby中的多线程和函数的关键字传参
1.实现ruby中的多线程 # def test1 # n = 1 # if n > 10 # puts "test1结束" # else # while true # sl ...
- PHP 是如何做垃圾回收的
PHP 是如何做垃圾回收的 包含 php 5 与 php7 的变量实现和垃圾回收的对比 变量的实现 PHP 的变量是弱类型的,可以表示整数.浮点数.字符串等类型.PHP 的变量是使用结构体 zval ...
- C# ling to sql 取多条记录最大时间
var _setList = (from f in _postgreDbContext.settlements group f by ( new { f.settlement_code })into ...
- SVN异常,Previous operation has not finished; run 'cleanup' if it was interrupted
SVN在提交.更新.cleanup时报错:Problem running logsvn: Failed to run the WC DB work queue associated with 'D:\ ...
- HTML入门(列表、表单、常用表单控件、浮动框架、iframe、 摘要与细节、度量标签)
一.列表 1.作用:默认显示方式为从上到下的显示数据 2.列表的组成 列表类型和列表项 3.列表的分类:有序列表 无序列表 自定义列表 无序列表语法为ul>li, 语法:ul代表列表,l ...
- vue引入ElementUI库
element国内网站:https://element.eleme.cn/#/zh-CN 引入ElementUI命令:npm install element-ui --save (网速不好用cnp ...
- APScheduler学习
说明 APScheduler是一个 Python 定时任务框架,使用起来十分方便.提供了基于日期.固定时间间隔以及 crontab 类型的任务,并且可以持久化任务.并以 daemon 方式运行应用. ...
- Luogu P2210 Haywire 题解
其实这题吧...有一种玄学解法 这题的要求的就是一个最小化的顺序 那么,我们就不进想到了一种显然的写法 就是random_shuffle 什么?这不是乱搞的非正解吗 然而,正如一句话说的好 一个算法, ...
- 集合系列 List(五):Stack
Stack 是先进后出的栈结构,其并不直接实现具体的逻辑,而是通过继承 Vector 类,调用 Vector 类的方法实现. public class Stack<E> extends V ...
- Codeforces Round #590 D. Distinct Characters Queries
CF上给的标签是数据结构.但给的题解里的方法是很巧的暴力,用vector<set>维护每个字母出现的下标,每次修改加下标,擦下标.每次询问对每个字母分别lower_bound查找区间内是否 ...