微信小程序结合ThinkPHP5授权登陆后获取手机号

yizhihongxing

下面给出详细的攻略,分为以下几个步骤:

  1. 获取微信小程序用户的授权信息。
  2. 发送授权凭证code到后端服务器,获取session_key和openid。
  3. 利用session_key和encryptedData解密用户敏感数据(如手机号等)。

步骤一:获取微信小程序用户的授权信息

在小程序端,可以通过wx.login函数获取用户授权凭证code,示例代码如下:

wx.login({
  success: function(res) {
    if (res.code) {
      /* 在这里向后台服务器发送授权凭证code */
    } else {
      console.log('获取用户登录态失败!' + res.errMsg)
    }
  }
})

除此之外,如果需要获取用户手机号等敏感数据,还需要调用wx.getPhoneNumber函数获取用户授权,示例代码如下:

wx.getPhoneNumber({
  success: function(res) {
    /* 在这里向后台服务器发送encryptedData和iv等信息 */
  },
  fail: function(res) {
    console.log('获取用户手机号失败!' + res.errMsg)
  }
})

步骤二:发送授权凭证code到后端服务器,获取session_key和openid

在后端服务器上,可以使用ThinkPHP5框架自带的Http库发送请求获取session_key和openid,示例代码如下:

use think\facade\Http;

function getSessionKeyAndOpenid($code) {
    $url = "https://api.weixin.qq.com/sns/jscode2session?" .
        "appid=APPID&secret=SECRET&js_code=CODE&grant_type=authorization_code";
    $url = str_replace('APPID', '你的小程序appid', $url);
    $url = str_replace('SECRET', '你的小程序appsecret', $url);
    $url = str_replace('CODE', $code, $url);
    $response = Http::get($url);
    return json_decode($response, true);
}

步骤三:利用session_key和encryptedData解密用户敏感数据

在后端服务器上,可以使用PHPopenssl_decrypt函数解密用户敏感数据,示例代码如下:

function getPhoneNumber($sessionKey, $encryptedData, $iv) {
    $data = openssl_decrypt(base64_decode($encryptedData), 'AES-128-CBC', base64_decode($sessionKey), OPENSSL_RAW_DATA, base64_decode($iv));
    $res = json_decode($data, true);
    return $res['phoneNumber'];
}

至此,就可以完成微信小程序的授权登陆并获取用户手机号的操作了。

示例代码:例如通过ThinkPHP5框架实现了一个小程序登陆接口,接收小程序端发送的授权凭证code和加密数据,从而返回用户的手机号,代码如下:

<?php
namespace app\api\controller;

use think\Controller;

class Wechat extends Controller
{
    public function getUserPhoneNumber()
    {
        $code = input('code');
        $encryptedData = input('encryptedData');
        $iv = input('iv');

        $result = $this->getSessionKeyAndOpenid($code);
        $sessionKey = $result['session_key'];

        $phoneNumber = $this->getPhoneNumber($sessionKey, $encryptedData, $iv);

        return json([
            'phone_number' => $phoneNumber,
        ]);
    }

    private function getSessionKeyAndOpenid($code) {
        $url = "https://api.weixin.qq.com/sns/jscode2session?" .
            "appid=APPID&secret=SECRET&js_code=CODE&grant_type=authorization_code";
        $url = str_replace('APPID', '你的小程序appid', $url);
        $url = str_replace('SECRET', '你的小程序appsecret', $url);
        $url = str_replace('CODE', $code, $url);
        $response = Http::get($url);
        return json_decode($response, true);
    }

    private function getPhoneNumber($sessionKey, $encryptedData, $iv) {
        $data = openssl_decrypt(base64_decode($encryptedData), 'AES-128-CBC', base64_decode($sessionKey), OPENSSL_RAW_DATA, base64_decode($iv));
        $res = json_decode($data, true);
        return $res['phoneNumber'];
    }
}

其中的getUserPhoneNumber方法就是接收小程序端发送的授权凭证code和加密数据,并返回用户手机号的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序结合ThinkPHP5授权登陆后获取手机号 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • php curl post 时出现的问题解决

    问题描述: 在使用 PHP 的 curl 库进行 POST 请求时,可能会出现以下问题: 请求正文数据无法正确传递; 请求结果返回不正确。 以下是解决问题的攻略。 步骤一:设置 curl 参数 首先,设置 curl 的参数。在设置参数的时候,需要保证如下方面的正确性: 请求的 URL 地址; 请求的 HTTP 方法; 请求的数据格式和参数; 请求的 head…

    PHP 2023年5月27日
    00
  • 微信怎么打开麦克风权限?微信打开麦克风权限教程

    当你在微信中使用语音消息、视频通话、语音电话等功能时,需要打开麦克风权限。如果你的微信麦克风权限没有打开,将无法正常使用这些功能。下面是微信打开麦克风权限的教程: 打开麦克风权限 1. iOS系统 打开手机设置 -> 隐私 -> 麦克风; 找到微信,将其麦克风权限打开。 例如,iOS14系统中,具体操作步骤如下: 打开手机 设置; 选择 隐私; …

    PHP 2023年5月30日
    00
  • php array_slice 取出数组中的一段序列实例

    下面是关于“php array_slice 取出数组中的一段序列实例”的完整攻略,包含示例说明。 基本语法 array array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] ) 函数说明 php中的array_slice…

    PHP 2023年5月26日
    00
  • php操作mysql数据库的基本类代码

    接下来我将为你讲解如何使用 PHP 操作 MySQL 数据库的基本类代码。 准备数据库 在使用 PHP 操作 MySQL 数据库之前,你需要先准备好一个数据库。 打开 MySQL 数据库客户端,通过以下命令创建一个名为 test 的数据库: CREATE DATABASE test; 创建一个名为 users 的表: “` USE test; CREATE…

    PHP 2023年5月23日
    00
  • Docker容器中运行nginx

    下面是关于在Docker容器中运行nginx的完整攻略。 准备工作 在开始之前,你需要安装和配置好以下工具: Docker Docker Compose 步骤一:创建Dockerfile文件 首先,创建一个名为Dockerfile的文件,并在其中编写以下内容: FROM nginx:latest COPY ./nginx.conf /etc/nginx/ng…

    PHP 2023年5月27日
    00
  • PHP中=>和->以及::符号的用法

    PHP中=>和->以及::符号的用法,分别表示不同的语法类型和功能。 1. =>符号 1.1. 定义数组 在PHP中,=>符号常用来定义关联数组,表示“键=>值”的关系。 示例: // 定义关联数组 $menu = array( ‘home’ => ‘首页’, ‘about’ => ‘关于我们’, ‘contact’…

    PHP 2023年5月23日
    00
  • 浅谈PHP检查数组中是否存在某个值 in_array 函数

    下面是浅谈PHP检查数组中是否存在某个值 in_array 函数的完整攻略。 一、介绍 在 PHP 中,我们经常需要检查一个数组是否包含某个特定的值。为此,PHP提供了一个内置的函数 in_array(),该函数可以帮助我们完成这个任务。in_array() 函数可以判断一个给定的值是否在一个数组中,如果存在返回 true,否则返回 false。 in_ar…

    PHP 2023年5月26日
    00
  • php禁止某ip或ip地址段访问的方法

    当我们需要禁止某个IP或IP地址段访问我们的网站时,可以通过以下几种方式实现。 方法一:修改服务器配置文件 我们可以在服务器的配置文件中设置,禁止某个IP或IP地址段访问我们的网站。 第一步:登录服务器,打开服务器的配置文件。常见的服务器软件如Apache、Nginx等的配置文件路径如下: Apache:/etc/httpd/conf/httpd.confN…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部