之前做的版本用户这块是以获取用户openid为凭证,最近改版重新整理了一下,新增注册登录以手机号码为主,

两种(正常注册手机号码-密码+一键获取当前用户手机号码)

getPhoneNumber这个组件要通过button来实现。将button中的open-type=“getPhoneNumber”,并且绑定bindgetphonenumber事件获取回调。

在使用这个组件之前必须先调用 login 接口

然后传递code,iv,encryptedData参数到后台,后台解密

示例

  1. <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"
  2. hover-class="none">一键自动注册</button>

  

  1. getPhoneNumber: function (e) {
  2. console.log(e.detail.errMsg)
  3. if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
  4. wx.showModal({
  5. title: '提示',
  6. showCancel: false,
  7. content: '未授权',
  8. success: function (res) { }
  9. })
  10. } else {
  11. wx.login({
  12. success: function (res) {
  13. var code = res.code;
  14. if (res.code) {
  15. //发起网络请求
  16. console.log(res.code)
  17. } else {
  18. console.log('获取用户登录态失败!' + res.errMsg)
  19. }
  20. wx.showModal({
  21. title: '提示',
  22. showCancel: false,
  23. content: '同意授权',
  24. success: function (res) {
  25. var that = this;
  26. console.log(123)
  27. wx.request({
  28. url: '/wxapplet/wx/wechat/phone',
  29. data: {
  30. code: code,
  31. iv: e.detail.iv,
  32. encryptedData: e.detail.encryptedData
  33. },
  34. method: 'GET',
  35. header: {
  36. 'content-type': 'application/json'
  37. },
  38. success: function (res) {
  39. wx.setStorageSync('user', res.data.data);
  40. if(res.data.code == "200"){
  41. console.log(res.data.data)
  42. wx.showToast({
  43. title: '一键绑定成功',
  44. icon: 'success',
  45. duration: 2000,
  46. success: function(){
  47. wx.switchTab({ url: '../user-center/index' });
  48. }
  49. })
  50. }else{
  51. wx.showModal({
  52. title: '提示',
  53. content: '一键绑定失败,请重新尝试',
  54. success: function (res) {
  55. if (res.confirm) {
  56. console.log('用户点击确定')
  57. } else if (res.cancel) {
  58. console.log('用户点击取消')
  59. }
  60. }
  61. })
  62. }
  63. },
  64. });
  65. }
  66. })
  67. }
  68. });
  69. }
  70. }

  

  • 后台是php 框架是laravel
  1. <?php
  2. namespace App\Http\Controllers\WxApplet;
  3.  
  4. use Illuminate\Http\Request;
  5. use App\Http\Controllers\Controller;
  6. use App\Repository\WxUserRepository;
  7.  
  8. include_once app_path('/Http/Controllers/WxApplet/Php/wxBizDataCrypt.php');
  9. class WechatController extends Controller
  10. {
  11. /**
  12. * constructer.
  13. *
  14. * @param WxUserRepository $wxUser
  15. */
  16. public function __construct
  17. (
  18. WxUserRepository $WxUserRepository
  19. )
  20. {
  21. $this->WxUserRepository = $WxUserRepository;
  22. }
  23. /**
  24. * 获取用户手机号码
  25. *
  26. * @return response
  27. */
  28. public function getWechatUserPhone(Request $request)
  29. {
  30. $code = $request->get('code');
  31. $encryptedData = $request->get('encryptedData');
  32. $iv = $request->get('iv');
  33. //小程序开发账户
  34. $appid = "*******" ;
  35. $secret = "*******";
  36. $URL = "https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&js_code=$code&grant_type=authorization_code";
  37. $apiData=file_get_contents($URL);
  38. if(!isset(json_decode($apiData)->errcode))
  39. {
  40. $sessionKey = json_decode($apiData)->session_key;
  41. $info = new \WXBizDataCrypt($appid, $sessionKey);
  42. $errCode = $info->decryptData($encryptedData, $iv, $data );
  43. if ($errCode == 0)
  44. {
  45. $phone = json_decode($data)->phoneNumber;
  46. $single_phone=$this->WxUserRepository->Single($phone);
  47. if ($single_phone == null)
  48. {
  49. $wx_user = $this->WxUserRepository->Create($phone,$password);
  50. }
  51. return $this->Success(200003);
  52. }
  53. else {
  54. return $this->fail(420004);
  55. }
  56. }
  57. }
  58. }

  

原文链接:https://blog.csdn.net/qq_34827048/article/details/78878121

微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码的更多相关文章

  1. 微信小程序前端调用后台方法并获取返回值

    wxml代码 <wxs src="../../wxs/string.wxs" module="tools" /> <!-- 调用tools.i ...

  2. 微信小程序需要https后台的创业机会思考

    最近比较关注微信小程序,而且微信小程序的后台必须强制要求https, https相对http成本要高很多了. 这里我感觉有2个商机 (1)提供https 中转服务器 ,按流量来收费 (2) 微信小程序 ...

  3. 微信小程序与Java后台通信

    一.写在前面 最近接触了小程序的开发,后端选择Java,因为小程序的代码运行在腾讯的服务器上,而我们自己编写的Java代码运行在我们自己部署的服务器上,所以一开始不是很明白小程序如何与后台进行通信的, ...

  4. 微信小程序与Java后台的通信

    一.写在前面 最近接触了小程序的开发,后端选择Java,因为小程序的代码运行在腾讯的服务器上,而我们自己编写的Java代码运行在我们自己部署的服务器上,所以一开始不是很明白小程序如何与后台进行通信的, ...

  5. 微信小程序登录JAVA后台

    代码地址如下:http://www.demodashi.com/demo/12736.html 登录流程时序登录流程时序 具体的登录说明查看 小程序官方API 项目的结构图: springboot项目 ...

  6. 微信小程序:java后台获取openId

    一.功能描述 openId是某个微信账户对应某个小程序或者公众号的唯一标识,但openId必须经过后台解密才能获取(之前实现过前台解密,可是由于微信小程序的种种限制,前台解密无法在小程序发布后使用) ...

  7. 微信小程序与java后台交互

    java后台使用的ssm框架,小程序连接的本地接口.跟正常的web访问没什么区别,也是后台获取url,返回json数据:只是小程序前台请求的url要带上http://localhost:80801. ...

  8. 原创:微信小程序调用PHP后台接口,解析纯html文本

    ---效果图片预览---    1.微信js动态传参:wx.request({        url: 'https://m.****.com/index.php/Home/Xiaoxxf/activ ...

  9. 微信小程序支付c#后台实现

    今天为大家带来比较简单的支付后台处理 首先下载官方的c#模板(WxPayAPI),将模板(WxPayAPI)添加到服务器上,然后在WxPayAPI项目目录中添加两个“一般处理程序” (改名为GetOp ...

随机推荐

  1. ruby中的多线程和函数的关键字传参

    1.实现ruby中的多线程 # def test1 # n = 1 # if n > 10 # puts "test1结束" # else # while true # sl ...

  2. PHP 是如何做垃圾回收的

    PHP 是如何做垃圾回收的 包含 php 5 与 php7 的变量实现和垃圾回收的对比 变量的实现 PHP 的变量是弱类型的,可以表示整数.浮点数.字符串等类型.PHP 的变量是使用结构体 zval ...

  3. C# ling to sql 取多条记录最大时间

    var _setList = (from f in _postgreDbContext.settlements group f by ( new { f.settlement_code })into ...

  4. 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:\ ...

  5. HTML入门(列表、表单、常用表单控件、浮动框架、iframe、 摘要与细节、度量标签)

    一.列表 1.作用:默认显示方式为从上到下的显示数据 2.列表的组成 列表类型和列表项 3.列表的分类:有序列表   无序列表   自定义列表 无序列表语法为ul>li, 语法:ul代表列表,l ...

  6. vue引入ElementUI库

    element国内网站:https://element.eleme.cn/#/zh-CN 引入ElementUI命令:npm install element-ui --save   (网速不好用cnp ...

  7. APScheduler学习

    说明 APScheduler是一个 Python 定时任务框架,使用起来十分方便.提供了基于日期.固定时间间隔以及 crontab 类型的任务,并且可以持久化任务.并以 daemon 方式运行应用. ...

  8. Luogu P2210 Haywire 题解

    其实这题吧...有一种玄学解法 这题的要求的就是一个最小化的顺序 那么,我们就不进想到了一种显然的写法 就是random_shuffle 什么?这不是乱搞的非正解吗 然而,正如一句话说的好 一个算法, ...

  9. 集合系列 List(五):Stack

    Stack 是先进后出的栈结构,其并不直接实现具体的逻辑,而是通过继承 Vector 类,调用 Vector 类的方法实现. public class Stack<E> extends V ...

  10. Codeforces Round #590 D. Distinct Characters Queries

    CF上给的标签是数据结构.但给的题解里的方法是很巧的暴力,用vector<set>维护每个字母出现的下标,每次修改加下标,擦下标.每次询问对每个字母分别lower_bound查找区间内是否 ...