Laravel+微信小程序实现获取用户手机号案例

2021-08-26   阅读:1107   分类:后端    标签: 微信小程序

前提:企业认证的微信小程序

说明:微信小程序获取用户手机号需要用户授权允许,然后传递code、iv、encryptedData,后端解密。

Sdk下载:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#%E5%8A%A0%E5%AF%86%E6%95%B0%E6%8D%AE%E8%A7%A3%E5%AF%86%E7%AE%97%E6%B3%95

已改好的laravel版阿里云网盘下载地址:

https://www.aliyundrive.com/s/4rKkDc3cT68

步骤实现:

一、后端:

1、Laravel后端:将下载好的sdk放在项目/app/Http/lib目录下wxBizDataCrypt,如下图所示:

2、加载扩展类文件,打开项目根目录下的composer.json文件,添加代码"app/Http/lib/wxBizDataCrypt"

部分如下

   "autoload": {
       "psr-4": {
           "App\\": "app/"
       },
       "classmap": [
           "database/seeds",
           "database/factories",
           "app/Http/lib/wxBizDataCrypt"
       ]
},

3、执行更新

composer dump-autoload

4、后端使用:use引入use App\Http\lib\wxBizDataCrypt\wxBizDataCrypt;

<?php
 
namespace App\Http\Controllers\Api\WeappOfficial;
 
use App\Http\Controllers\Api\Controller;
use Illuminate\Http\Request;
use App\Http\lib\wxBizDataCrypt\wxBizDataCrypt;
 
class PhoneController extends Controller
{
   //获取用户手机号
   public function index(Request $request)
   {
      $appid = Env('WECHAT_MINI_PROGRAM_APPID');
      $secret = Env('WECHAT_MINI_PROGRAM_SECRET');
      $encryptedData = $request->encryptedData;  //包括敏感数据在内的完整用户信息的加密数据
      $jscode=$request->code;  //用户登录授权获取到的code
      $iv=$request->iv;  //用户登录授权获取到的iv
      //用code 获取sessionkey
      $access_token='https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$jscode.'&grant_type=authorization_code';
      $result = $this->curlOpen($access_token);
      $jsonarr = json_decode($result, true);
      $sessionKey = $jsonarr['session_key'];
 
      //获取手机号解密
      $pc = new WXBizDataCrypt($appid, $sessionKey);
      $errCode = $pc->decryptData($encryptedData, $iv, $data );
      if ($errCode == 0) {
         $js_data = json_decode($data,true);
         return response ()->json(['code'=>200,'msg'=>'success','data'=>$js_data['phoneNumber']]);
           
           
      }else{
           return response ()->json(['code'=>$errCode,'msg'=>'error','data'=>'授权失败']);
      }
 
   }
}

二、小程序前端方面:

1、放置按钮,用户调起授权获取手机号

<button class="btn_submit" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" type="primary">授权获取手机号</button>

2、代码获取及提交后端验证

//用户绑定手机号
getPhoneNumber (e) {
      var __that = this
      var iv = e.$wx.detail.iv;
      var encryptedData = e.$wx.detail.encryptedData;
      wx.login({
       success:function(res){
             const getUserPhones = await getUserPhone({
                     code: res.code,
                     iv: iv,
                     encryptedData: encryptedData,
                     sharePhone: __that.sharePhone,
              })
              console.log(getUserPhones)
              
       }
      })
},
【腾讯云】爆款云服务器限时体验20元起,更多上云必备产品低至1元

‘简忆博客’微信公众号 扫码关注‘简忆博客’微信公众号,获取最新文章动态
转载:请说明文章出处“来源简忆博客”。http://www.tpxhm.com/adetail/807.html

×
觉得文章有用就打赏一下文章作者
微信扫一扫打赏 微信扫一扫打赏
支付宝扫一扫打赏 支付宝扫一扫打赏

文章评论(0)

登录
简忆博客壁纸 头像

简忆博客
勤于学习,乐于分享。

置顶推荐

打赏本站

如果你觉得本站很棒,可以通过扫码支付打赏哦!
微信扫码:你说多少就多少~
微信扫码
支付宝扫码:你说多少就多少~
支付宝扫码
×