共计 2297 个字符,预计需要花费 6 分钟才能阅读完成。
最近公司有一个需求,如果用户使用支付宝访问系统的话,需要获取到用户的一些基本信息, 由于之前没有接触过支付包相关的开发, 实现起来还是有点麻烦的
一:开发前期准备
1:配置沙箱支付宝测试号
在开发过程中我们可以使用支付宝提供的沙箱支付宝测试号
1):在浏览器上登录支付宝:https://open.alipay.com/platf… , 登录成功之后进入我的开放平台
2):进入个人开放平台之后进入开发中心
3):进入研发服务
4):按照需要填写相关信息
2:下载支付宝 SDK
支付宝 SDK 地址:https://docs.open.alipay.com/…,将支付宝 SDK 下载到本地之后放到我们的项目中
二:获取用户信息
获取用户信息的流程图如下:
php 实现获取支付宝用户信息
1: 授权:
支付宝授权地址:
https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id= 开发者应用的 APPID&scope= 接口权限值 &redirect_uri= 回调页面
上面的链接是正式环境下的支付宝授权地址,如果你使用的是沙箱测试号的话,授权地址中 alipay 改成 alipaydev
代码实现:
//appId
$appId= '2016101000654906';
// 回调地址 (经过转义 的 url 链接,url 必须以 http 或者 https 开头),这里的回调地址就是测试号中的授权回调地址
$redirect_uri = 'http://x2xdn2.natappfree.cc/index.php?r=alipay/get-user';
//url 转义
$redirect_uri = urlencode($redirect_uri);
// 授权方式 (目前只支持 auth_userinfo 和 auth_base 两个值)
$scope = 'auth_userinfo';
// 授权地址
$authUrl = "https://openauth.alipaydev.com/oauth2/publicAppAuthorize.htm?app_id=". $appId ."&scope=". $scope ."&redirect_uri=". $redirect_uri;
return $this->redirect($authUrl);
2: 授权回调及获取用户信息 (在回调方法中)
1):引入所需的支付宝 SDK 文件
require_once '../components/alipay/aop/AopClient.php';
require_once '../components/alipay/aop/request/AlipaySystemOauthTokenRequest.php';
require_once '../components/alipay/aop/request/AlipayUserUserinfoShareRequest.php';
2):
// 获取授权返回的 auth_code
$request = Yii::$app->request;
$code = $request->get('auth_code', '');
$aop = new \AopClient ();
// 网关,正式环境需要将 alipaydev 改成 alipay
$aop->gatewayUrl = 'https://openapi.alipaydev.com/gateway.do';
//appId
$aop->appId = '2016101000654906';
// 开发者私钥
$aop->rsaPrivateKey = 'XXX';
// 支付宝公钥
$aop->alipayrsaPublicKey = 'XXX';
// 签名算法类型
$aop->signType = 'RSA2';
$request = new \AlipaySystemOauthTokenRequest();
$request->setGrantType("authorization_code");
$request->setCode($code);
$result = $aop->execute($request);
$responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
// 获取 access_token
$accessToken = $result->$responseNode->access_token;
if ($accessToken) {
// 获取用户信息
$requestUser = new \AlipayUserUserinfoShareRequest();
$info = $aop->execute($requestUser,$accessToken); // 这里传入获取的 access_token
$responseNodeName = str_replace(".", "_", $requestUser->getApiMethodName()) . "_response";
// 用户信息
$userInfo = $info->$responseNodeName;
var_dump($userInfo);
}
注意:
根据如上就可以获取到用户信息了,但是支付宝 SDK 有一个问题,执行上面的代码之后会发现报一个 Class SignData not found 问题
错误原因:
项目中中未引用 SignData.php 文件导致
建议方案:
在 phpsdk 的 AopClient.php 文件中加上
require_once 'SignData.php';
引用代码,到此就可以获取到支付宝的用户信息了
正文完