支付寶小程序獲取 user_id(openid) ThinkPHP版
近期支付寶小程序個人公測了,就想着玩一下,沒想到就獲取用戶唯一標識都這么麻煩,微信的openid的話Get請求一下就完事了,支付寶的user_id,需要對接SDK以及公鑰私鑰驗簽,而且支付寶的開發工具巨占內存,打開就至少占用2G內存,腦闊疼
- 首先注冊一個小程序,附一些用得到的鏈接
支付寶小程序注冊鏈接
開發工具下載鏈接
SDK下載地址
支付寶小程序開發文檔
RSA 密鑰生成工具下載地址 - 注冊完成后將上邊提供的軟件都下載好,在開發中心—小程序應用—選擇小程序—開發管理–功能列表(在底部)中添加 [ 獲取會員基礎信息 ] 功能。
- 使用RSA生成工具生成密鑰,並且這個工具以后可以用來驗簽使用
生成應用私鑰和應用公鑰后,復制應用公鑰,在 [ 開發中心—小程序應用—選擇小程序-設置–開發設置–設置接口加密方式 ]
- 前端部分,我是使用的靜默獲取,不會彈出授權框,我只需user_id即可
my.getAuthCode({
scopes: 'auth_base',
success:(res) =>{
//在此處將res.authCode發送到后端
//可以參照https://blog.csdn.net/qq_40413670/article/details/103796680 五、部署類 dispose.js的9. APP啟動事件
}
})
- ThinkPHP部分,首選下載SDK,SDK中有很多很多類,如果只需要獲取user_id則只需要下面6個類
AopClient.php
AopEncrypt.php
EncryptParseItem.php
EncryptResponseData.php
SignData.php
request/AlipaySystemOauthTokenRequest.php
依照他的目錄結構,那就將前五個類歸屬於同一個命名空間,第六個類在上層命名空間的request下
我將SDK放在根目錄的extend目錄下,列出這幾個類更改的前幾部分,后邊與SDK相同,主要是標注namespace,並且由TP框架的自動加載機制,不需要再手動引入
// AopClient.php
<?php
namespace lib\alipay;
use think\Exception;
class AopClient
{
//應用ID
public $appId;
// ..................
}
// AopEncrypt.php
<?php
namespace lib\alipay;
/**
* 加密工具類
*
* User: jiehua
* Date: 16/3/30
* Time: 下午3:25
*/
/**
* 加密方法
* @param string $str
* @return string
*/
function encrypt($str, $screct_key)
{
// ..................
}
// EncryptParseItem.php
<?php
namespace lib\alipay;
/**
* TODO 補充說明
*
* User: jiehua
* Date: 16/3/30
* Time: 下午8:55
*/
class EncryptParseItem
{
// ..................
}
// EncryptResponseData.php
<?php
namespace lib\alipay;
/**
* TODO 補充說明
*
* User: jiehua
* Date: 16/3/30
* Time: 下午8:51
*/
class EncryptResponseData
{
public $realContent;
public $returnContent;
}
// SignData.php
<?php
namespace lib\alipay;
/**
* Created by PhpStorm.
* User: jiehua
* Date: 15/5/2
* Time: 下午6:21
*/
class SignData
{
public $signSourceData = null;
public $sign = null;
}
// AlipaySystemOauthTokenRequest.php
<?php
namespace lib\alipay\request;
/**
* ALIPAY API: alipay.system.oauth.token request
*
* @author auto create
* @since 1.0, 2019-07-03 12:05:01
*/
class AlipaySystemOauthTokenRequest
{
// ........................
}
調用類得到user_id
$c = new AopClient();
$c->appId = ""; // APPID
$c->rsaPrivateKey = ""; // 生成的RSA私鑰
$c->alipayrsaPublicKey = ""; // 生成的RSA公鑰
$c->signType= "RSA2";
$request= new AlipaySystemOauthTokenRequest();
$request -> setCode($_POST['code']); //前端傳來的code
$request -> setGrantType("authorization_code");
$response= $c->execute($request);
$user_id =$response -> alipay_system_oauth_token_response -> user_id;
至此,獲取user_id完成,如果有驗簽錯誤的話,可以使用上述RSA生成工具進行調試,此外返回值中還有token等數據,按需取用