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

2023-12-12php编程
27

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

  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和加密数据,并返回用户手机号的方法。

The End

相关推荐

php实现多语言网站的思路和构想
我们在进行系统或者网站开发的时候,有需要多语言切换的功能。PHP作为一种常用的编程语言,可以很方便地实现多语言网站功能。本文将介绍如何使用PHP实现多语言网站功能,并提供相应的代码示例。 创建语言文件 首先,需要创建不同语言的语言文件。每个语言文件...
2025-08-20 php编程
83

php通过调用谷歌翻译API实现网站中英文翻译
我们在制作网站时候,要实现中英文双语网站,通过调用api方式实现文章内容自动翻译,这个要怎么操作呢?以调用谷歌翻译api实现翻译。 获取谷歌翻译秘钥 我们需要到Google Cloud控制台创建一个项目,并启用Cloud Translation API。然后,生成一个API密钥,这个...
2025-08-20 php编程
200

PHP+HTML集成DeepSeek API,实现一个简单的聊天对话项目
PHP+HTML集成DeepSeek API,实现一个简单的聊天对话项目,最终实现效果如下: 准备工作 PHP环境 :确保你的开发环境中安装了PHP。 DeepSeek API密钥 :注册并获取DeepSeek API的访问密钥。 创建api调用接口 创建一个PHP脚本(api.php),用于调用DeepSeek API...
2025-03-31 php编程
100

PHP怎么删除系统中的文件和目录
我们在使用php编程时候,有时候需要删除系统中某个目录。在php中,删除目录是通过使用一些内置函数来完成的。本文将介绍如何使用php中的内置函数删除目录。 一、unlink()函数 PHP中的unlink()函数可以用于删除一个文件,而当用于删除目录时,它只能删除目录...
2025-02-21 php编程
184

js+php实现用户登录
一.ajax完成用户名异步检验 html代码: !DOCTYPE htmlhtml lang="en"head meta charset="UTF-8" title用户名是否存在/title/headbodyform action="" method="post" table tr td用户名/td tdinput type="text" name="username" placeholder="请输入用户名" cla...
2025-01-09 php编程
93

PHP如何使用session实现保存用户登录信息
session在php中是一个非常重要的东西,像我们用户登录一般都使用到session这个东西,相对于cookie来说session 要安全很多,同时我们购物车经常使用session来做临时的记录保存哦。 使用session保存页面登录信息 1、数据库连接配置页面:connectvars.php ?php/...
2024-11-05 php编程
95