微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码 - 子钦加油

时间:2024-02-16 09:22:23

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