微信小程序结合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中echo与print区别点整理

    下面是详细讲解“php中echo与print区别点整理”的完整攻略: 1. echo和print的区别 在PHP中,echo和print都是用于将字符串输出到浏览器或者终端的命令。它们的用法很相似,但是它们在以下几个方面有明显的区别。 echo没有返回值,只是输出字符串到浏览器;print有返回值,返回值为1。 echo可以一次性输出多个字符串,中间用逗号隔…

    PHP 2023年5月26日
    00
  • PHP微信支付与退款功能实现流程详解

    以下是 “PHP微信支付与退款功能实现流程详解”的完整攻略: 1. 准备工作 在进行微信支付和退款的功能实现前,需要进行以下准备: 在微信支付平台中注册账号并完成实名认证; 在微信支付平台中创建应用并获取相应的APPID与商户号; 下载并集成微信支付SDK,并完成相关的配置。 2. 支付流程 下面是 PHP 微信支付流程的详细步骤: 客户端用户打开 APP …

    PHP 2023年5月23日
    00
  • PHP 读取Postgresql中的数组

    要在PHP中读取PostgreSQL中的数组,需要按照以下步骤进行操作: 编写SQL查询语句 首先需要编写一条SQL查询语句,来获取PostgreSQL数组中的值。例如,假设你有一个名为”pets”的数组,它包含了每种宠物的名称和年龄,那么你可以使用以下查询语句来获取这个数组中包含的宠物名称: SELECT pets->>’name’ AS pe…

    PHP 2023年5月26日
    00
  • PHP在字符串中查找指定字符串并删除的代码

    你好,让我为你讲解在PHP中如何在字符串中查找指定的字符串并删除。 方法一:使用str_replace函数 PHP中内置的str_replace函数可以在字符串中查找指定字符串并替换为另一个字符串。当需要删除指定字符串时,只需要将指定字符串替换为空字符串即可。 示例一: $str = "Hello, World!"; // 待修改的字符串…

    PHP 2023年5月26日
    00
  • 微信小程序实现移动端滑动分页效果(ajax)

    好的!以下是详细讲解“微信小程序实现移动端滑动分页效果(ajax)”的完整攻略: 介绍 在移动端应用中,滑动分页效果是一种非常常见的交互效果。微信小程序也提供了相应的API,允许我们通过ajax加载数据实现这种效果。在这篇文章中,我们将通过两个示例来展示如何实现微信小程序中的移动端滑动分页效果。 示例一:实现纵向滑动分页效果 在这个示例中,我们将展示如何实现…

    PHP 2023年5月23日
    00
  • 关于Laravel Route重定向的一个注意点

    接下来我会为大家详细讲解关于 Laravel Route 重定向的一个注意点。 问题描述 在 Laravel 开发过程中,我们经常需要定义路由。有时,我们需要将某个路由重定向到另一个路由上。这时,我们可以使用 Laravel 路由的 redirect 方法。例如: Route::redirect(‘/page1’, ‘/page2’); 这个例子表示,当用户…

    PHP 2023年5月23日
    00
  • PHP eval函数使用介绍

    PHP eval函数使用介绍 什么是eval函数 eval 函数是 PHP 的内置函数之一,它有一个参数,表示需要执行的 PHP 代码字符串。eval 函数的作用是执行一个字符串代码,并将其结果返回。如果字符串不是有效的 PHP 代码,那么 eval 函数将会抛出一个 Parse Error 异常。 eval函数的用法 eval 函数的基本语法格式如下: e…

    PHP 2023年5月25日
    00
  • 微信小程序获取微信运动步数的实例代码

    下面我将详细讲解“微信小程序获取微信运动步数的实例代码”的完整攻略。 一、前提条件 在使用微信小程序获取微信运动步数之前,需要满足以下几个前提条件: 用户已经在微信中授权了小程序访问微信运动步数。 小程序已经申请了微信运动步数的授权。 二、获取微信运动步数的实现方式 2.1 方式一:使用微信运动接口获取步数 微信开放平台提供了相关的微信运动接口,小程序可以通…

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