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

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

  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代码

    在字符串指定位置插入一段字符串可以使用PHP的字符串操作函数完成,下面是一个完整的攻略过程: 使用PHP的substr函数,获取需要插入的位置之前和之后的两个子字符串。这里使用的substr函数原型为: substr(string $string, int $start, int $length = ?): string 其中,$string表示要操作的原字…

    PHP 2023年5月27日
    00
  • [原创]php使用正则验证密码字段的复杂强度原理详细讲解

    以下是“[原创]php使用正则验证密码字段的复杂强度原理详细讲解”的完整使用攻略: 基础知识 在使用PHP正则验证密码字段的复杂强度之前,需要掌握一些基础知识,包括PHP语言的基本语法、正则表达式的基本语法等。以下是一些常见的基础知识: PHP语言的基本语法,包括变量、数组、函数、类等的定义和使用。 正则表达式的基本语法,包括元字符、模式修饰符、字符类等。 …

    PHP 2023年5月12日
    00
  • 国内php原创论坛

    国内PHP原创论坛攻略 前言 国内PHP原创论坛是一个专注于PHP技术交流和学习的网站,拥有大量的PHP开发者和爱好者。以下是关于如何使用该网站的攻略。 注册和登录 初次使用网站需要注册一个账号,可以通过首页的“注册”按钮进行操作。填写完个人信息后,点击“注册”按钮即可完成注册。 完成注册后,登录网站。点击首页右上角的“登录”按钮,输入刚刚注册的账号和密码即…

    PHP 2023年5月23日
    00
  • php数组添加元素方法小结

    下面我将详细讲解如何使用PHP数组添加元素的方法。 1. 使用array_push()函数 使用array_push()函数可以将一个或多个元素添加到数组末尾。该函数接收两个参数,第一个参数是要添加元素的数组,第二个参数可以是一个单独的值,也可以是一个包含多个值的数组。 下面是一个示例: $fruits = array("apple", …

    PHP 2023年5月26日
    00
  • 微信小程序学习笔记之目录结构、基本配置图文详解

    关于“微信小程序学习笔记之目录结构、基本配置图文详解”的完整攻略,我将会分以下几个部分进行讲解: 目录结构的介绍 app.json文件的配置 配置各个页面的json文件 示例说明 总结 1. 目录结构的介绍 微信小程序采用了类似于MVVM的框架来开发应用,应用主要由配置文件和代码文件两部分组成。其中配置文件主要包括:app.json文件、各个页面的json文…

    PHP 2023年5月23日
    00
  • PHP include任意文件或URL介绍

    PHP中的include函数可以用于将一个文件中的内容插入到另一个文件中,这其中可以包含任意文件或URL。这种方式在开发web应用程序时非常常见,可以帮助我们重用代码,提高代码的可维护性。不过,如果使用不当,恶意用户可能会利用该功能从而执行任意代码,危及系统安全。因此,在使用此功能时,应该非常小心,严格限制可被包含的文件,并且不要直接将外部输入用作inclu…

    PHP 2023年5月26日
    00
  • php下的原生ajax请求用法实例分析

    下面是关于“php下的原生ajax请求用法实例分析”的完整攻略。 什么是原生ajax请求? 在介绍原生ajax请求的用法之前,我们需要先了解什么是ajax。AJAX(Asynchronous JavaScript and XML)是一种用于创建快速动态网页的技术。它能够在不刷新页面的情况下从服务器加载数据,并可以在页面上进行实时更新。 原生ajax请求,指的…

    PHP 2023年5月26日
    00
  • PHP匿名函数(闭包函数)详解

    PHP匿名函数(闭包函数)详解 什么是匿名函数 匿名函数,也称为闭包函数,是一种可以在运行时定义的函数。匿名函数传统上被用来在代码中定义回调函数,也可以用来避免全局作用域的变量污染。 基本语法 匿名函数的基本语法如下: $my_function = function($param1, $param2, …) use ($var1, $var2, …)…

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