php 支付宝官方 Alipay Easy SDK
使用 Alipay Easy SDK。
打造最好用的支付宝开放平台服务端SDK,Alipay Easy SDK让您享受极简编程体验,快速访问支付宝开放平台开放的各项核心能力。
要求:
- PHP版本 >= 7.0
- 安装PHP cURL扩展
- 安装PHP OpenSSL扩展
- 安装PHP fileinfo扩展
使用Composer安装EasyAlipay:
composer require alipaysdk/easysdk
require 'vendor/autoload.php';
use Alipay\EasySDK\Kernel\Factory;
use Alipay\EasySDK\Kernel\Util\ResponseChecker;
use Alipay\EasySDK\Kernel\Config;//1. 设置参数(全局只需设置一次)
Factory::setOptions(getOptions());try {//2. 发起API调用(以支付能力下的统一收单交易创建接口为例)$result = Factory::payment()->common()->create("iPhone6 16G", "20200326235526001", "88.88", "2088002656718920");$responseChecker = new ResponseChecker();//3. 处理响应或异常if ($responseChecker->success($result)) {echo "调用成功". PHP_EOL;} else {echo "调用失败,原因:". $result->msg.",".$result->subMsg.PHP_EOL;}
} catch (Exception $e) {echo "调用失败,". $e->getMessage(). PHP_EOL;;
}function getOptions()
{$options = new Config();$options->protocol = 'https';$options->gatewayHost = 'openapi.alipay.com';$options->signType = 'RSA2';$options->appId = '<-- 请填写您的AppId,例如:2019022663440152 -->';// 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中$options->merchantPrivateKey = '<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->';$options->alipayCertPath = '<-- 请填写您的支付宝公钥证书文件路径,例如:/foo/alipayCertPublicKey_RSA2.crt -->';$options->alipayRootCertPath = '<-- 请填写您的支付宝根证书文件路径,例如:/foo/alipayRootCert.crt" -->';$options->merchantCertPath = '<-- 请填写您的应用公钥证书文件路径,例如:/foo/appCertPublicKey_2019051064521003.crt -->';//注:如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可// $options->alipayPublicKey = '<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->';//可设置异步通知接收服务地址(可选)$options->notifyUrl = "<-- 请填写您的支付类接口异步通知接收服务地址,例如:https://www.test.com/callback -->";return $options;
}
也可以单独配置文件
<?php$config = ['protocol' => 'https','gatewayHost' => 'openapi.alipay.com','signType' => 'RSA2','appId' => '<-- 请填写您的AppId,例如:2019022663440152 -->','merchantPrivateKey' => '<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->','alipayCertPath' => '<-- 请填写您的支付宝公钥证书文件路径,例如:/foo/alipayCertPublicKey_RSA2.crt -->','alipayRootCertPath' => '<-- 请填写您的支付宝根证书文件路径,例如:/foo/alipayRootCert.crt" -->','merchantCertPath' => '<-- 请填写您的应用公钥证书文件路径,例如:/foo/appCertPublicKey_2019051064521003.crt -->',// 'alipayPublicKey' => '<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->','notifyUrl' => "<-- 请填写您的支付类接口异步通知接收服务地址,例如:https://www.test.com/callback -->",
];return $config;
这个版本唯一的缺点就是,有很多没有代码示例,需要自己理解使用。
示例代码一:提供了现成的方法调用
alipay.system.oauth.token(换取授权访问令牌)
// 初始化
Factory::setOptions(getOptions());
// 获取access token
try {$result = Factory::base()->oauth()->getToken($authCode);$responseChecker = new ResponseChecker();if ($responseChecker->success($result)) {$resultArr = json_decode($result->httpBody, true);print_r($resultArr);} else {echo "调用失败,原因:". $result->msg.",".$result->subMsg.PHP_EOL;} catch (Exception $e) {echo "调用失败,". $e->getMessage(). PHP_EOL;}
}
示例代码二:没有提供了现成的方法调用,则需要使用Factory::util()->generic()->execute()方法去调用
alipay.user.info.share(支付宝会员授权信息查询接口)
$result = Factory::util()->generic()->execute('alipay.user.info.share',['auth_token' => ''],[]
);
第一个参数:OpenAPI的名称,例如:alipay.user.info.share
第二个参数:没有包装在`biz_content`下的请求参数数组。
第三个参数:包装在`biz_content`下的请求参数数组。
返回结果说明:
Alipay\EasySDK\Util\Generic\Models\AlipayOpenApiGenericResponse Object
([_name:protected] => Array([httpBody] => http_body[code] => code[msg] => msg[subCode] => sub_code[subMsg] => sub_msg)[_required:protected] => Array()[httpBody] => {"alipay_user_info_share_response":{"code":"10000","msg":"Success","age":"64","avatar":"https:\/\/tfs.alipayobjects.com\/images\/partner\/https:\/\/mdn.alipayobjects.com\/sandboxsys\/afts\/img\/AibKQZxFsLUAAAAAAAAAAAAADgSLAQBr\/original","cert_no":"561901196007233740","cert_type":"0","city":"资阳市","country_code":"CN","deliver_addresses":[{"address_code":"512000","default_deliver_address":"F","deliver_city":"资阳市","deliver_province":"四川省"}],"display_name":"pafmms5825@sandbox.com","email":"pafmms5825@sandbox.com","firm_agent_person_cert_type":"10","firm_legal_person_cert_type":"10","firm_type":"CO","inst_or_corp":"N","is_adult":"T","is_blocked":"F","is_certified":"T","is_student_certified":"F","license_no":"561901196007233740","member_grade":"unknown","mobile":"10900000001","nick_name":"沙箱账号","province":"四川省","user_name":"pafmms5825@sandbox.com","user_status":"T","user_type":"1","open_id":"01348t5fKqEymiasr00b6695ly2-8Ry6a0hfAKxT16WLVEc"},"sign":"g4UFAc6T1f/z5nfGUV9ahVH4TQetaCywFy+YXTDVijxMZzPKy/2QET6P2IsGZEe/YvaG6vDH9C03bVp/jmTDBoiA4T8nUxPBiX13zyMT4IXSxXAUMjpNIuJ4GkAFzSmwVdQh4+oyfM3lYkFOYBQHBu/Mf+rm6zxbDUm2PP/rivtFa2ZJ4Cqjp/mCg1hDbWfhryDCYztkyKQxJ8nU/q+u11cVt30ft+mEqGnof5vqMnSGkFry53TSdcoUoDy6SxLBM1o7h6rhBoRo2w6Ak7e1ss14qUx3zxx67biJhnu3SM3CfCEvPHV4b72M832lZlPrXOD9sr9fS2K3C7Yc2GHSqw=="}[code] => 10000[msg] => Success[subCode] =>[subMsg] =>
)
返回结果参数说明:
httpBody:网关返回的HTTP响应,是一个JSON格式的字符串,开发者可按需从中解析出响应参数。
code:网关返回码。
msg:网关返回码描述。
subCode:业务返回码,参见具体的API接口文档。
subMsg:业务返回码描述,参见具体的API接口文档。