支付宝小程序开发:获取用户唯一标识的麻烦与解决方法

2024-08-04
来源:网络整理

支付宝小程序Get()版本

最近支付宝小程序上线个人公测,本想试试的,没想到获取用户唯一标识这么麻烦,微信一个Get请求就可以了,支付宝需要连接SDK,验证公私钥,另外支付宝开发工具占用内存很大,打开至少要占用2G内存,很头疼。

先注册一个小程序,附上一些有用的链接

支付宝小程序注册链接

开发工具下载链接

SDK下载链接

支付宝小程序开发文档

RSA密钥生成工具下载地址 注册完成后,下载上面提供的所有软件,在开发中心-小程序应用-选择小程序-开发管理-功能列表(最下方)添加【获取会员基本信息】功能。

使用RSA生成工具生成密钥,之后可使用此工具来验证签名

生成应用私钥和应用公钥后,复制应用公钥,进入【开发中心-小程序应用-选择小程序-设置-开发设置-设置接口加密方式】

前端部分我采用的是静默获取,不会弹出授权框,只需要

my.getAuthCode({ scopes: 'auth_base', success:(res) =>{ //在此处将res.authCode发送到后端 //可以参照https://blog.csdn.net/qq_40413670/article/details/103796680 五、部署类 dispose.js的9. APP启动事件 } })

部分,首先下载SDK,SDK里有很多类,如果只需要获取的话,只需要下面6个类

AopClient.php AopEncrypt.php EncryptParseItem.php EncryptResponseData.php SignData.php request/AlipaySystemOauthTokenRequest.php

按照他的目录结构来看,前五个类属于同一个命名空间,第六个类则在上层命名空间之下。

我把SDK放在了根目录下,列出了前面几个部分类的变更,剩下的和SDK一样,主要是注解,TP框架的自动加载机制就不用手动引入了。

// AopClient.php namespace lib\alipay; use think\Exception; class AopClient { //应用ID public $appId; // .................. }

// AopEncrypt.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 namespace lib\alipay; /** * TODO 补充说明 * * User: jiehua * Date: 16/3/30 * Time: 下午8:55 */ class EncryptParseItem { // .................. }

// EncryptResponseData.php namespace lib\alipay; /** * TODO 补充说明 * * User: jiehua * Date: 16/3/30 * Time: 下午8:51 */ class EncryptResponseData { public $realContent; public $returnContent; }

// SignData.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 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 { // ........................ }

调用类来获取

$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;

至此,获取完成,若有签名验证错误,可以使用上面的RSA生成工具进行调试,另外返回值中还有其他数据,可根据需要使用。

分享