微信小程序通过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

原文地址:https://www.cnblogs.com/zmdComeOn/p/11780173.html

时间: 2024-08-29 21:48:20

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

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

wxml代码 <wxs src="../../wxs/string.wxs" module="tools" /> <!-- 调用tools.img(item.content)返回bool,也可以返回其他值 --> <view class='clearfix' wx:if="{{tools.img(item.content)}}"> <view class='content-view'> <im

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

一.功能描述 openId是某个微信账户对应某个小程序或者公众号的唯一标识,但openId必须经过后台解密才能获取(之前实现过前台解密,可是由于微信小程序的种种限制,前台解密无法在小程序发布后使用) 二.实现流程 1. 获取微信用户的登录信息: 2. 将encryptedData中的数据作为参数传给java后台 3. java后台进行解密 三.代码实现 1. 后台的解密代码 1 /** 2 * decoding encrypted data to get openid 3 * 4 * @para

【微信小程序】springboot后台获取用户的openid

openid可以标识一个用户,session_key会变,所以来获取一下openid. openid不能在微信小程序中直接获取,需要后台发送请求到微信的接口,然后微信返回一个json格式的字符串到后台,后台处理之后,再返回到微信小程序. 发布的小程序需要https的域名,而测试的时候可以使用http. 小程序在app.js中,修改login()中的内容: // 登录 wx.login({ success: res => { // 发送 res.code 到后台换取 openId, session

绑定bindchange事件的微信小程序swiper闪烁,抖动问题解决,(将微信小程序切换到后台一段时间,再打开微信小程序,会出现疯狂循环轮播,造成抖动现象)

微信小程序开发文档-组件-swiper后面追加的新闻如上图所示: 如果在bindchange事件给swiper的current属性对应的值{{current}}赋值,就会造成抖动现象. 1 bindchangeSwiper(event) { 2 console.log(event.detail); 3 this.setData({ 4 current: event.detail.current 5 }) 6 }, 可是有的时候我们确实需要动态获取当前的swiper-item索引,用来额外做一些其

微信小程序之登录连接django,以及用户的信息授权认证

小结: 1 如何自定义组件 - 组件和页面一样,也是由四个文件组成,所以我们自定义组件的时候,模拟pages文件夹,把所有的所有的组件都放在一个文件夹中,每个组件又由一个文件夹包裹,方便管理,在对应目录右击,选择新建组件 - 如果页面中要使用我们定义好的组件,必须现在对应页面的json文件中进行引用:代码如下 { "usingComponents": { "com" : "/componentes/com/com" //形式 :组件名:组件路径

微信 小程序 drawImage wx.canvasToTempFilePath wx.saveFile 获取设备宽高 尺寸问题

以下问题测试环境为微信开发者0.10.102800,手机端iphone6,如有不对敬谢指出. 根据我的测试,context.drawImage,在开发者工具中并不能画出来,只有预览到手机中显示. wx.canvasToTempFilePath wx.saveFile 官方文档中只有一行,真是坑爹啊,原来 wx.canvasToTempFilePath参数为一个对象包括canvasID,success,fail,complete,和wx.saveFile差不多: wx.canvasToTempFi

微信小程序-关于post 过来服务器没有获取到数据问题

查看一下服务器接收的post 参数是以什么形式接收的 微信给出得demo 请求的方式是Json 参数传递的 所以如果服务器使用的from 表单形式接收数据需要更改微信小程序中的 header 将 header: { 'content-type': 'application/json' }, 改成 header: { 'content-type': 'application/x-www-form-urlencoded' },

微信小程序如何把后台返回的多条json数据的时间戳转换为时间放到页面上 (微信小程序 时间戳转换为时间)

小程序端 在utils文件夹下的util.js写入 //时间戳转换时间   function toDate(number){   var n=number * 1000;   var date = new Date(n);   var Y = date.getFullYear() + '/';   var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '/';   var D = date

微信小程序实战,与后台交互

index.wxml <view class="container"> <text>{{txt}}</text> <input name="name" type="text" id='text' bindchange="xyz"/> <button id="btn" bindtap="abc" >提交</button>