协程支付网关(支付宝支付)
组件安装方法和说明
注意:请务必检查你的
php
环境有没有安装php-bcmath
扩展,没有安装php-bcmath
扩展时安装的pay
组件的版本是1.2.17
之前的版本(不是最新)。想要使用最新稳定版pay
组件的功能,请先安装php-bcmath
扩展,php
安装此扩展的方法请自行查询。
composer require easyswoole/pay
支付宝
支付方法
支付宝支付目前支持 7 种支付方法,对应的支付 method 如下:
method | 说明 | 参数 | 返回值 |
---|---|---|---|
web | 电脑支付 | Request | Response |
wap | 手机网站支付 | Request | Response |
app | APP 支付 | Request | Response |
pos | 刷卡支付 | Request | Response |
scan | 扫码支付 | Request | Response |
transfer | 账户转账 | Request | Response |
mini | 小程序支付 | Request | Response |
barCode | 条码当面支付 | Request | Response |
注意,easyswoole/pay
支付宝支付组件的默认签名为 RSA2
普通公钥方式签名,也支持 RSA2
公钥证书的签名方式。放置应用公私钥证书、支付宝证书路径、支付宝根证书路径的时候切记核对。
电脑支付
统一收单下单并支付页面接口
/**
* 普通公钥方式生成密钥验签(签名和验签方式)
*/
// 设置支付配置
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
### 配置支付公共请求参数
// (必须)设置 支付宝分配给开发者的应用ID
$aliConfig->setAppId('2017082000295641');
// (必须)设置 请求网关(默认为 沙箱模式)
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::NORMAL);
// 设置 参数格式(默认为 'JSON',可选参数),不建议修改
// $aliConfig->setFormat('JSON');
// 设置 return_url(默认为 null,可选参数)
// $aliConfig->setReturnUrl(null);
// 设置 请求使用的编码格式,如utf-8、gbk、gb2312等(默认为 'utf-8')
// $aliConfig->setCharset('utf-8');
// 设置 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2(默认为 'RSA2')
$aliConfig->setSignType('RSA2');
// 设置 调用的接口版本(默认为 '1.0')
// $aliConfig->setApiVersion('1.0');
// 设置 支付宝服务器主动通知商户服务器里指定的页面http/https路径,即支付回调地址(默认为 null,可选参数)
// $aliConfig->setNotifyUrl(null);
// 设置 应用授权参数(默认为 null,可选参数),详细请看(https://opendocs.alipay.com/open/common/105193)
// $aliConfig->setAppAuthToken(null);
// 设置 阿里应用公钥(支持 .pem 结尾的格式,默认为 PKCS1 格式),用于支付回调时验证签名
$aliConfig->setPublicKey('阿里应用公钥字符串'); // 示例应用公钥字符串
// 设置 阿里应用私钥(支持 .pem 结尾的格式,默认为 PKCS1 格式),用于生成签名
$aliConfig->setPrivateKey('阿里应用私钥字符串'); // 示例应用私钥字符串
/**
* 公钥证书方式生成密钥验签(签名和验签方式)
*/
/*
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
### 配置支付公共请求参数
// (必须)设置 支付宝分配给开发者的应用ID
$aliConfig->setAppId('2017082000295641');
// (必须)设置 请求网关(默认为 沙箱模式)
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::NORMAL);
// 设置 参数格式(默认为 'JSON',可选参数),不建议修改
// $aliConfig->setFormat('JSON');
// 设置 return_url(默认为 null,可选参数)
// $aliConfig->setReturnUrl(null);
// 设置 请求使用的编码格式,如utf-8、gbk、gb2312等(默认为 'utf-8')
// $aliConfig->setCharset('utf-8');
// 设置 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2(默认为 'RSA2')
$aliConfig->setSignType('RSA2');
// 设置 调用的接口版本(默认为 '1.0')
// $aliConfig->setApiVersion('1.0');
// 设置 支付宝服务器主动通知商户服务器里指定的页面http/https路径,即支付回调地址(默认为 null,可选参数)
// $aliConfig->setNotifyUrl(null);
// 设置 应用授权参数(默认为 null,可选参数),详细请看(https://opendocs.alipay.com/open/common/105193)
// $aliConfig->setAppAuthToken(null);
// (必须)设置 使用公钥证书方式生密钥延签(签名和验签方式)
$aliConfig->setCertMode(true);
// (必须)设置 支付宝公钥文件路径
$aliConfig->setCertPath(__DIR__ . '/cert/alipayCertPublicKey_RSA2.crt'); // 示例支付宝公钥文件路径
// (必须)设置 支付宝根证书文件路径
$aliConfig->setRootCertPath(__DIR__ . '/cert/alipayRootCert.crt'); // 示例支付宝公钥根证书文件路径
// (必须)设置 阿里应用公钥证书文件路径
$aliConfig->setMerchantCertPath(__DIR__ . '/cert/appCertPublicKey_2016091800538780.crt');
// (必须)设置 阿里应用私钥(支持 .pem 结尾的格式,默认为 PKCS1 格式),用于生成签名
$aliConfig->setPrivateKey('阿里应用私钥字符串'); // 示例应用私钥字符串
*/
// 以上【普通公钥方式】 和 【公钥证书方式】 生成密钥验签(签名和验签方式) 这 2 种方式,用户可自行选择一种】
$pay = new \EasySwoole\Pay\Pay();
## (面向对象风格)设置请求参数 biz_content,组件自动帮你组装成对应的格式
$order = new \EasySwoole\Pay\AliPay\RequestBean\Web();
// (必须)设置 商户订单号(商户订单号。64 个字符以内的大小,仅支持字母、数字、下划线。需保证该参数在商户端不重复。)
$order->setOutTradeNo(time() . '123456'); // 示例订单号(仅供参考)
// (必须)设置 订单总金额
$order->setTotalAmount('0.01'); // 示例订单总金额,单位:元(仅供参考)
// (必须)设置 商品标题/交易标题/订单标题/订单关键字等。注意:不可使用特殊字符,如 /,=,& 等。
$order->setSubject('测试'); // 示例商品标题(仅供参考)
// (可选)设置 订单描述,默认为 null
// $order->setBody(null);
// (可选)设置 在订单中设置支付宝服务器主动通知商户服务器里指定的页面http/https路径,即支付回调地址(默认为 null,可选参数)
// $order->setNotifyUrl(null); // 等价于在配置中设置 支付回调地址,两者中只要设置一次即可
// (可选)设置 return_url(默认为 null,可选参数)
// $order->setReturnUrl(null); // 等价于在配置中设置 return_url,两者中只要设置一次即可
// 本库只预置了常用的请求参数,没预置的参数请求使用:$order->addProperty('其他字段','其他字段值');
// 支付其他可选参数(详细请看支付宝接口的可选参数,支付宝接口对应地址请看下文)
## (数组风格)设置请求参数 biz_content,组件自动帮你组装成对应的格式
/*
$order = new \EasySwoole\Pay\AliPay\RequestBean\Web([
'out_trade_no' => time() . '123456', // 示例订单号(仅供参考)
'total_amount' => '0.01', // 示例订单总金额,单位:元(仅供参考)
'subject' => '测试', // 示例商品标题(仅供参考)
'额外的字段键值' => '额外字段值', // 示例支付其他可选参数(详细请看支付宝接口的可选参数,支付宝接口对应地址请看下文)
], true);
*/
// 以上 2 种风格设置请求参数,用户可根据个人需要,选其一即可
// 获取构造请求参数对象
$res = $pay->aliPay($aliConfig)->web($order);
// 将所有请求参数转为数组
var_dump($res->toArray());
// 构造请求表单(buildPayHtml 该方法的实现请看下文)
$html = buildPayHtml(\EasySwoole\Pay\AliPay\GateWay::NORMAL, $res->toArray());
file_put_contents('test.html', $html);
订单配置参数
所有订单配置中,对于客观非必选参数,用户可以自行选择是否进行配置,也可以不进行配置,扩展包已经为您自动处理了,比如,product_code
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考 这里,查看「请求参数」一栏。
参数查询:https://opendocs.alipay.com/apis/api_1/alipay.trade.page.pay
生成支付的跳转 html
示例
function buildPayHtml($endpoint, $payload)
{
$sHtml = "<form id='alipaysubmit' name='alipaysubmit' action='".$endpoint."' method='POST'>";
foreach ($payload as $key => $val) {
$val = str_replace("'", ''', $val);
$sHtml .= "<input type='hidden' name='".$key."' value='".$val."'/>";
}
$sHtml .= "<input type='submit' value='ok' style='display:none;'></form>";
$sHtml .= "<script>document.forms['alipaysubmit'].submit();</script>";
return $sHtml;
}
手机网站支付接口 2.0
/**
* 普通公钥方式生成密钥验签(签名和验签方式)
*/
// 设置支付配置
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
### 配置支付公共请求参数
// (必须)设置 支付宝分配给开发者的应用ID
$aliConfig->setAppId('2017082000295641');
// (必须)设置 请求网关(默认为 沙箱模式)
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::NORMAL);
// 设置 参数格式(默认为 'JSON',可选参数),不建议修改
// $aliConfig->setFormat('JSON');
// 设置 return_url(默认为 null,可选参数)
// $aliConfig->setReturnUrl(null);
// 设置 请求使用的编码格式,如utf-8、gbk、gb2312等(默认为 'utf-8')
// $aliConfig->setCharset('utf-8');
// 设置 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2(默认为 'RSA2')
$aliConfig->setSignType('RSA2');
// 设置 调用的接口版本(默认为 '1.0')
// $aliConfig->setApiVersion('1.0');
// 设置 支付宝服务器主动通知商户服务器里指定的页面http/https路径,即支付回调地址(默认为 null,可选参数)
// $aliConfig->setNotifyUrl(null);
// 设置 应用授权参数(默认为 null,可选参数),详细请看(https://opendocs.alipay.com/open/common/105193)
// $aliConfig->setAppAuthToken(null);
// 设置 阿里应用公钥(支持 .pem 结尾的格式,默认为 PKCS1 格式),用于支付回调时验证签名
$aliConfig->setPublicKey('阿里应用公钥字符串'); // 示例应用公钥字符串
// 设置 阿里应用私钥(支持 .pem 结尾的格式,默认为 PKCS1 格式),用于生成签名
$aliConfig->setPrivateKey('阿里应用私钥字符串'); // 示例应用私钥
/**
* 公钥证书方式生成密钥验签(签名和验签方式)
*/
/*
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
### 配置支付公共请求参数
// (必须)设置 支付宝分配给开发者的应用ID
$aliConfig->setAppId('2017082000295641');
// (必须)设置 请求网关(默认为 沙箱模式)
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::NORMAL);
// 设置 参数格式(默认为 'JSON',可选参数),不建议修改
// $aliConfig->setFormat('JSON');
// 设置 return_url(默认为 null,可选参数)
// $aliConfig->setReturnUrl(null);
// 设置 请求使用的编码格式,如utf-8、gbk、gb2312等(默认为 'utf-8')
// $aliConfig->setCharset('utf-8');
// 设置 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2(默认为 'RSA2')
$aliConfig->setSignType('RSA2');
// 设置 调用的接口版本(默认为 '1.0')
// $aliConfig->setApiVersion('1.0');
// 设置 支付宝服务器主动通知商户服务器里指定的页面http/https路径,即支付回调地址(默认为 null,可选参数)
// $aliConfig->setNotifyUrl(null);
// 设置 应用授权参数(默认为 null,可选参数),详细请看(https://opendocs.alipay.com/open/common/105193)
// $aliConfig->setAppAuthToken(null);
// (必须)设置 使用公钥证书方式生密钥延签(签名和验签方式)
$aliConfig->setCertMode(true);
// (必须)设置 支付宝公钥文件路径
$aliConfig->setCertPath(__DIR__ . '/cert/alipayCertPublicKey_RSA2.crt'); // 示例支付宝公钥文件路径
// (必须)设置 支付宝根证书文件路径
$aliConfig->setRootCertPath(__DIR__ . '/cert/alipayRootCert.crt'); // 示例支付宝公钥根证书文件路径
// (必须)设置 阿里应用公钥证书文件路径
$aliConfig->setMerchantCertPath(__DIR__ . '/cert/appCertPublicKey_2016091800538780.crt');
// (必须)设置 阿里应用私钥(支持 .pem 结尾的格式,默认为 PKCS1 格式),用于生成签名
$aliConfig->setPrivateKey('阿里应用私钥字符串');
*/
// 以上【普通公钥方式】 和 【公钥证书方式】 生成密钥验签(签名和验签方式) 这 2 种方式,用户可自行选择一种】
$pay = new \EasySwoole\Pay\Pay();
## (面向对象风格)设置请求参数 biz_content,组件自动帮你组装成对应的格式
$order = new \EasySwoole\Pay\AliPay\RequestBean\Wap();
// (必须)设置 商品标题/交易标题/订单标题/订单关键字等。注意:不可使用特殊字符,如 /,=,& 等。
$order->setSubject('测试'); // 示例商品标题(仅供参考)
// (必须)设置 商户订单号(商户订单号。64 个字符以内的大小,仅支持字母、数字、下划线。需保证该参数在商户端不重复。)
$order->setOutTradeNo(time() . '123456'); // 示例订单号(仅供参考)
// (必须)设置 订单总金额
$order->setTotalAmount('0.01'); // 示例订单总金额,单位:元(仅供参考)
// (必须)设置 用户付款中途退出返回商户网站的地址
$order->addProperty('quit_url', 'http://www.easyswoole.com'); // 示例中途退出返回商户网站的地址(仅供参考)
// (可选)设置 订单描述,默认为 null
// $order->setBody(null);
// (可选)设置 在订单中设置支付宝服务器主动通知商户服务器里指定的页面http/https路径,即支付回调地址(默认为 null,可选参数)
// $order->setNotifyUrl(null); // 等价于在配置中设置 支付回调地址,两者中只要设置一次即可
// (可选)设置 return_url(默认为 null,可选参数)
// $order->setReturnUrl(null); // 等价于在配置中设置 return_url,两者中只要设置一次即可
// 本库只预置了常用的请求参数,没预置的参数请求使用:$order->addProperty('其他字段','其他字段值');
// 支付其他可选参数(详细请看支付宝接口的可选参数,支付宝接口对应地址请看下文)
## (数组风格)设置请求参数 biz_content,组件自动帮你组装成对应的格式
/*
$order = new \EasySwoole\Pay\AliPay\RequestBean\Wap([
'out_trade_no' => time() . '123456', // 示例订单号(仅供参考)
'total_amount' => '0.01', // 示例订单总金额,单位:元(仅供参考)
'subject' => '测试', // 示例商品标题(仅供参考)
'quit_url' => 'http://www.easyswoole.com', // 示例中途退出返回商户网站的地址(仅供参考)
'额外的字段键值' => '额外字段值', // 示例支付其他可选参数(详细请看支付宝接口的可选参数,支付宝接口对应地址请看下文)
], true);
*/
// 以上 2 种风格设置请求参数,用户可根据个人需要,选其一即可
// 获取构造请求参数对象
$res = $pay->aliPay($aliConfig)->wap($order);
// 将所有请求参数转为数组
var_dump($res->toArray());
// 构造请求表单(buildPayHtml 该方法的实现请看上文)
$html = buildPayHtml(\EasySwoole\Pay\AliPay\GateWay::NORMAL, $res->toArray());
file_put_contents('test.html', $html);
订单配置参数
所有订单配置中,对于客观非必选参数,用户可以自行选择是否进行配置,也可以不进行配置,扩展包已经为您自动处理了,比如,product_code
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考 这里,查看「请求参数」一栏。
参数查询:https://opendocs.alipay.com/apis/api_1/alipay.trade.wap.pay
APP支付接口 2.0
/**
* 普通公钥方式生成密钥验签(签名和验签方式)
*/
// 设置支付配置
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
### 配置支付公共请求参数
// (必须)设置 支付宝分配给开发者的应用ID
$aliConfig->setAppId('2017082000295641');
// (必须)设置 请求网关(默认为 沙箱模式)
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::NORMAL);
// 设置 参数格式(默认为 'JSON',可选参数),不建议修改
// $aliConfig->setFormat('JSON');
// 设置 return_url(默认为 null,可选参数)
// $aliConfig->setReturnUrl(null);
// 设置 请求使用的编码格式,如utf-8、gbk、gb2312等(默认为 'utf-8')
// $aliConfig->setCharset('utf-8');
// 设置 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2(默认为 'RSA2')
$aliConfig->setSignType('RSA2');
// 设置 调用的接口版本(默认为 '1.0')
// $aliConfig->setApiVersion('1.0');
// 设置 支付宝服务器主动通知商户服务器里指定的页面http/https路径,即支付回调地址(默认为 null,可选参数)
// $aliConfig->setNotifyUrl(null);
// 设置 应用授权参数(默认为 null,可选参数),详细请看(https://opendocs.alipay.com/open/common/105193)
// $aliConfig->setAppAuthToken(null);
// 设置 阿里应用公钥(支持 .pem 结尾的格式,默认为 PKCS1 格式),用于支付回调时验证签名
$aliConfig->setPublicKey('阿里应用公钥字符串'); // 示例应用公钥字符串
// 设置 阿里应用私钥(支持 .pem 结尾的格式,默认为 PKCS1 格式),用于生成签名
$aliConfig->setPrivateKey('阿里应用私钥字符串'); // 示例应用私钥
/**
* 公钥证书方式生成密钥验签(签名和验签方式)
*/
/*
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
### 配置支付公共请求参数
// (必须)设置 支付宝分配给开发者的应用ID
$aliConfig->setAppId('2017082000295641');
// (必须)设置 请求网关(默认为 沙箱模式)
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::NORMAL);
// 设置 参数格式(默认为 'JSON',可选参数),不建议修改
// $aliConfig->setFormat('JSON');
// 设置 return_url(默认为 null,可选参数)
// $aliConfig->setReturnUrl(null);
// 设置 请求使用的编码格式,如utf-8、gbk、gb2312等(默认为 'utf-8')
// $aliConfig->setCharset('utf-8');
// 设置 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2(默认为 'RSA2')
$aliConfig->setSignType('RSA2');
// 设置 调用的接口版本(默认为 '1.0')
// $aliConfig->setApiVersion('1.0');
// 设置 支付宝服务器主动通知商户服务器里指定的页面http/https路径,即支付回调地址(默认为 null,可选参数)
// $aliConfig->setNotifyUrl(null);
// 设置 应用授权参数(默认为 null,可选参数),详细请看(https://opendocs.alipay.com/open/common/105193)
// $aliConfig->setAppAuthToken(null);
// (必须)设置 使用公钥证书方式生密钥延签(签名和验签方式)
$aliConfig->setCertMode(true);
// (必须)设置 支付宝公钥文件路径
$aliConfig->setCertPath(__DIR__ . '/cert/alipayCertPublicKey_RSA2.crt'); // 示例支付宝公钥文件路径
// (必须)设置 支付宝根证书文件路径
$aliConfig->setRootCertPath(__DIR__ . '/cert/alipayRootCert.crt'); // 示例支付宝公钥根证书文件路径
// (必须)设置 阿里应用公钥证书文件路径
$aliConfig->setMerchantCertPath(__DIR__ . '/cert/appCertPublicKey_2016091800538780.crt');
// (必须)设置 阿里应用私钥(支持 .pem 结尾的格式,默认为 PKCS1 格式),用于生成签名
$aliConfig->setPrivateKey('阿里应用私钥字符串');
*/
// 以上【普通公钥方式】 和 【公钥证书方式】 生成密钥验签(签名和验签方式) 这 2 种方式,用户可自行选择一种】
$pay = new \EasySwoole\Pay\Pay();
## (面向对象风格)设置请求参数 biz_content,组件自动帮你组装成对应的格式
$order = new \EasySwoole\Pay\AliPay\RequestBean\App();
// (必须)设置 订单总金额
$order->setTotalAmount('0.01'); // 示例订单总金额,单位:元(仅供参考)
// (必须)设置 商品标题/交易标题/订单标题/订单关键字等。注意:不可使用特殊字符,如 /,=,& 等。
$order->setSubject('测试'); // 示例商品标题(仅供参考)
// (必须)设置 商户订单号(商户订单号。64 个字符以内的大小,仅支持字母、数字、下划线。需保证该参数在商户端不重复。)
$order->setOutTradeNo(time() . '123456'); // 示例订单号(仅供参考)
// (可选)设置 销售产品码,商家和支付宝签约的产品码,默认为 QUICK_MSECURITY_PAY(App支付)。
// $order->addProperty('product_code', 'QUICK_MSECURITY_PAY'); // 示例销售产品码(仅供参考)
// (可选)设置 订单描述,默认为 null
// $order->setBody(null);
// (可选)设置 在订单中设置支付宝服务器主动通知商户服务器里指定的页面http/https路径,即支付回调地址(默认为 null,可选参数)
// $order->setNotifyUrl(null); // 等价于在配置中设置 支付回调地址,两者中只要设置一次即可
// (可选)设置 return_url(默认为 null,可选参数)
// $order->setReturnUrl(null); // 等价于在配置中设置 return_url,两者中只要设置一次即可
// 本库只预置了常用的请求参数,没预置的参数请求使用:$order->addProperty('其他字段','其他字段值');
// 支付其他可选参数(详细请看支付宝接口的可选参数,支付宝接口对应地址请看下文)
## (数组风格)设置请求参数 biz_content,组件自动帮你组装成对应的格式
/*
$order = new \EasySwoole\Pay\AliPay\RequestBean\Wap([
'out_trade_no' => time() . '123456', // 示例订单号(仅供参考)
'total_amount' => '0.01', // 示例订单总金额,单位:元(仅供参考)
'subject' => '测试', // 示例商品标题(仅供参考)
'额外的字段键值' => '额外字段值', // 示例支付其他可选参数(详细请看支付宝接口的可选参数,支付宝接口对应地址请看下文)
], true);
*/
// 以上 2 种风格设置请求参数,用户可根据个人需要,选其一即可
// 获取构造请求参数对象
$res = $pay->aliPay($aliConfig)->app($order);
// 将所有请求参数转为数组
var_dump($res->toArray());
订单配置参数
所有订单配置中,对于客观非必选参数,用户可以自行选择是否进行配置,也可以不进行配置,扩展包已经为您自动处理了,比如,product_code
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考 这里,查看「请求参数」一栏。
参数查询:https://opendocs.alipay.com/apis/api_1/alipay.trade.app.pay
刷卡支付
/**
* 普通公钥方式生成密钥验签(签名和验签方式)
*/
// 设置支付配置
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
### 配置支付公共请求参数
// (必须)设置 支付宝分配给开发者的应用ID
$aliConfig->setAppId('2017082000295641');
// (必须)设置 请求网关(默认为 沙箱模式)
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::NORMAL);
// 设置 参数格式(默认为 'JSON',可选参数),不建议修改
// $aliConfig->setFormat('JSON');
// 设置 请求使用的编码格式,如utf-8、gbk、gb2312等(默认为 'utf-8')
// $aliConfig->setCharset('utf-8');
// 设置 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2(默认为 'RSA2')
$aliConfig->setSignType('RSA2');
// 设置 调用的接口版本(默认为 '1.0')
// $aliConfig->setApiVersion('1.0');
// 设置 支付宝服务器主动通知商户服务器里指定的页面http/https路径,即支付回调地址(默认为 null,可选参数)
// $aliConfig->setNotifyUrl(null);
// 设置 应用授权参数(默认为 null,可选参数),详细请看(https://opendocs.alipay.com/open/common/105193)
// $aliConfig->setAppAuthToken(null);
// 设置 阿里应用公钥(支持 .pem 结尾的格式,默认为 PKCS1 格式),用于支付回调时验证签名
$aliConfig->setPublicKey('阿里应用公钥字符串'); // 示例应用公钥字符串
// 设置 阿里应用私钥(支持 .pem 结尾的格式,默认为 PKCS1 格式),用于生成签名
$aliConfig->setPrivateKey('阿里应用私钥字符串'); // 示例应用私钥
/**
* 公钥证书方式生成密钥验签(签名和验签方式)
*/
/*
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
### 配置支付公共请求参数
// (必须)设置 支付宝分配给开发者的应用ID
$aliConfig->setAppId('2017082000295641');
// (必须)设置 请求网关(默认为 沙箱模式)
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::NORMAL);
// 设置 参数格式(默认为 'JSON',可选参数),不建议修改
// $aliConfig->setFormat('JSON');
// 设置 请求使用的编码格式,如utf-8、gbk、gb2312等(默认为 'utf-8')
// $aliConfig->setCharset('utf-8');
// 设置 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2(默认为 'RSA2')
$aliConfig->setSignType('RSA2');
// 设置 调用的接口版本(默认为 '1.0')
// $aliConfig->setApiVersion('1.0');
// 设置 支付宝服务器主动通知商户服务器里指定的页面http/https路径,即支付回调地址(默认为 null,可选参数)
// $aliConfig->setNotifyUrl(null);
// 设置 应用授权参数(默认为 null,可选参数),详细请看(https://opendocs.alipay.com/open/common/105193)
// $aliConfig->setAppAuthToken(null);
// (必须)设置 使用公钥证书方式生密钥延签(签名和验签方式)
$aliConfig->setCertMode(true);
// (必须)设置 支付宝公钥文件路径
$aliConfig->setCertPath(__DIR__ . '/cert/alipayCertPublicKey_RSA2.crt'); // 示例支付宝公钥文件路径
// (必须)设置 支付宝根证书文件路径
$aliConfig->setRootCertPath(__DIR__ . '/cert/alipayRootCert.crt'); // 示例支付宝公钥根证书文件路径
// (必须)设置 阿里应用公钥证书文件路径
$aliConfig->setMerchantCertPath(__DIR__ . '/cert/appCertPublicKey_2016091800538780.crt');
// (必须)设置 阿里应用私钥(支持 .pem 结尾的格式,默认为 PKCS1 格式),用于生成签名
$aliConfig->setPrivateKey('阿里应用私钥字符串');
*/
// 以上【普通公钥方式】 和 【公钥证书方式】 生成密钥验签(签名和验签方式) 这 2 种方式,用户可自行选择一种】
$pay = new \EasySwoole\Pay\Pay();
## (面向对象风格)设置请求参数 biz_content,组件自动帮你组装成对应的格式
$order = new \EasySwoole\Pay\AliPay\RequestBean\Pos();
// (必须)设置 商户订单号(商户订单号。64 个字符以内的大小,仅支持字母、数字、下划线。需保证该参数在商户端不重复。)
$order->setOutTradeNo(time() . '123456'); // 示例订单号(仅供参考)
// (必须)设置 支付授权码(详细说明请看支付宝官网文档:https://opendocs.alipay.com/apis/api_1/alipay.trade.pay?scene=common)
$order->setAuthCode('289756915257123456'); // 示例支付授权码(仅供参考)
// (必须)设置 商品标题/交易标题/订单标题/订单关键字等。注意:不可使用特殊字符,如 /,=,& 等。
$order->setSubject('测试'); // 示例商品标题(仅供参考)
// (可选)设置 支付场景,(默认为 'bar_code')
// $order->addProperty('scene', 'bar_code');
// (可选)设置 产品码,默认为 'FACE_TO_FACE_PAYMENT'(当面付)
// $order->addProperty('product_code', 'FACE_TO_FACE_PAYMENT');
// (可选)设置 订单描述,默认为 null
// $order->setBody(null);
// (可选)设置 在订单中设置支付宝服务器主动通知商户服务器里指定的页面http/https路径,即支付回调地址(默认为 null,可选参数)
// $order->setNotifyUrl(null); // 等价于在配置中设置 支付回调地址,两者中只要设置一次即可
// 本库只预置了常用的请求参数,没预置的参数请求使用:$order->addProperty('其他字段','其他字段值');
// 支付其他可选参数(详细请看支付宝接口的可选参数,支付宝接口对应地址请看下文)
## (数组风格)设置请求参数 biz_content,组件自动帮你组装成对应的格式
/*
$order = new \EasySwoole\Pay\AliPay\RequestBean\Wap([
'out_trade_no' => time() . '123456', // 示例订单号(仅供参考)
'auth_code' => '289756915257123456', // 示例支付授权码(仅供参考)
'product_code' => 'FACE_TO_FACE_PAYMENT', // 示例产品码,默认为 'FACE_TO_FACE_PAYMENT'(当面付)
'subject' => '测试', // 示例商品标题(仅供参考)
'额外的字段键值' => '额外字段值', // 示例支付其他可选参数(详细请看支付宝接口的可选参数,支付宝接口对应地址请看下文)
], true);
*/
// 以上 2 种风格设置请求参数,用户可根据个人需要,选其一即可
// 获取构造请求参数对象
$res = $pay->aliPay($aliConfig)->pos($order);
// 将所有请求参数转为数组
$data = $res->toArray();
订单配置参数
所有订单配置中,对于客观非必选参数,用户可以自行选择是否进行配置,也可以不进行配置,扩展包已经为您自动处理了,比如,product_code
、auth_code
、scene
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考 这里,查看「请求参数」一栏。
参数查询:https://opendocs.alipay.com/apis/api_1/alipay.trade.pay
扫码支付
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::SANDBOX);
$aliConfig->setAppId('2016091800538339');
$aliConfig->setPublicKey('阿里公钥');
$aliConfig->setPrivateKey('阿里私钥');
$pay = new \EasySwoole\Pay\Pay();
$pay = new \EasySwoole\Pay\Pay();
$order = new \EasySwoole\Pay\AliPay\RequestBean\Scan();
$order->setSubject('测试');
$order->setTotalAmount('0.01');
$order->setOutTradeNo(time());
$aliPay = $pay->aliPay($aliConfig);
$data = $aliPay->scan($order)->toArray();
$response = $aliPay->preQuest($data);
var_dump($response);
// qr_code 当前预下单请求生成的二维码码串,可以用二维码生成工具根据该码串值生成对应的二维码 https://qr.alipay.com/bavh4wjlxf12tper3a
订单配置参数
所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,product_code
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
参考参数:https://docs.open.alipay.com/api_1/alipay.trade.precreate
单笔转账到支付宝账户接口
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::SANDBOX);
$aliConfig->setAppId('2016091800538339');
$aliConfig->setPublicKey('阿里公钥');
$aliConfig->setPrivateKey('阿里私钥');
$pay = new \EasySwoole\Pay\Pay();
$order = new \EasySwoole\Pay\AliPay\RequestBean\Transfer();
$order->setSubject('测试');
$order->setAmount('0.01');
/*
收款方账户类型。可取值:
1、ALIPAY_USERID:支付宝账号对应的支付宝唯一用户号。以2088开头的16位纯数字组成。
2、ALIPAY_LOGONID:支付宝登录号,支持邮箱和手机号格式。
*/
$order->setPayeeType('ALIPAY_LOGONID');
$order->setPayeeAccount('hcihsn8174@sandbox.com');
$aliPay = $pay->aliPay($aliConfig);
$data = $aliPay->transfer($order)->toArray();
$aliPay->preQuest($data);
var_dump($data);
本接口用的是老版本的 https://docs.open.alipay.com/309/alipay.fund.trans.toaccount.transfer
订单配置参数
所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,product_code
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
参数查询:https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer
小程序支付
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::SANDBOX);
$aliConfig->setAppId('2016091800538339');
$aliConfig->setPublicKey('阿里公钥');
$aliConfig->setPrivateKey('阿里私钥');
$pay = new \EasySwoole\Pay\Pay();
$order = new \EasySwoole\Pay\AliPay\RequestBean\MiniProgram();
$order->setSubject('测试');
$order->setOutTradeNo(time().'123456');
$order->setTotalAmount('0.01');
$order->setBuyerId('hcihsn8174@sandbox.com');
$aliPay = $pay->aliPay($aliConfig);
$data = $aliPay->miniProgram($order)->toArray();
var_dump($data);
订单配置参数
所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,product_code
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
小程序支付接入文档:https://docs.alipay.com/mini/introduce/pay。
参数查询:
订单查询
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::SANDBOX);
$aliConfig->setAppId('2016091800538339');
$aliConfig->setPublicKey('阿里公钥');
$aliConfig->setPrivateKey('阿里私钥');
$pay = new \EasySwoole\Pay\Pay();
$order = new \EasySwoole\Pay\AliPay\RequestBean\OrderFind();
$order->setOutTradeNo(time().'123456');
$aliPay = $pay->aliPay($aliConfig);
var_dump($aliPay->orderFind($order)->toArray());
官方参数查询:https://docs.open.alipay.com/api_1/alipay.trade.fastpay.refund.query
退款查询
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::SANDBOX);
$aliConfig->setAppId('2016091800538339');
$aliConfig->setPublicKey('阿里公钥');
$aliConfig->setPrivateKey('阿里私钥');
$pay = new \EasySwoole\Pay\Pay();
$order = new \EasySwoole\Pay\AliPay\RequestBean\RefundFind();
$order->setOutTradeNo('20150320010101001');
$order->setOutRequestNo(time().'2014112611001004680073956707');
$aliPay = $pay->aliPay($aliConfig);
$data = $aliPay->refundFind($order)->toArray();
var_dump($aliPay->preQuest($data));
官方参数查询:https://docs.open.alipay.com/api_1/alipay.trade.refund
查询转账订单接口
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::SANDBOX);
$aliConfig->setAppId('2016091800538339');
$aliConfig->setPublicKey('阿里公钥');
$aliConfig->setPrivateKey('阿里私钥');
$pay = new \EasySwoole\Pay\Pay();
$order = new \EasySwoole\Pay\AliPay\RequestBean\TransferFind();
$order->setOutBizNo('3142321423432');
// 二选一
// $order->setOrderId('20160627110070001502260006780837');
$aliPay = $pay->aliPay($aliConfig);
$data = $aliPay->transferFind($order)->toArray();
var_dump($aliPay->preQuest($data));
官方参数查询:https://docs.open.alipay.com/api_28/alipay.fund.trans.order.query
交易撤销接口
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::SANDBOX);
$aliConfig->setAppId('2016091800538339');
$aliConfig->setPublicKey('阿里公钥');
$aliConfig->setPrivateKey('阿里私钥');
$pay = new \EasySwoole\Pay\Pay();
$order = new \EasySwoole\Pay\AliPay\RequestBean\Cancel();
$order->setOutTradeNo('20150320010101001');
$aliPay = $pay->aliPay($aliConfig);
$data = $aliPay->cancel($order)->toArray();
var_dump($aliPay->preQuest($data));
官方参数查询:https://docs.open.alipay.com/api_1/alipay.trade.cancel
交易关闭接口
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::SANDBOX);
$aliConfig->setAppId('2016091800538339');
$aliConfig->setPublicKey('阿里公钥');
$aliConfig->setPrivateKey('阿里私钥');
$pay = new \EasySwoole\Pay\Pay();
$order = new \EasySwoole\Pay\AliPay\RequestBean\Close();
$order->setOutTradeNo(time().'123456');
$aliPay = $pay->aliPay($aliConfig);
$data = $aliPay->close($order)->toArray();
var_dump($aliPay->preQuest($data));
官方参数查询:https://docs.open.alipay.com/api_1/alipay.trade.close
查询对账单下载地址
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::SANDBOX);
$aliConfig->setAppId('2016091800538339');
$aliConfig->setPublicKey('阿里公钥');
$aliConfig->setPrivateKey('阿里私钥');
$pay = new \EasySwoole\Pay\Pay();
$order = new \EasySwoole\Pay\AliPay\RequestBean\Download();
$order->setBillType('trade');
$order->setBillDate('2016-04-05');
$aliPay = $pay->aliPay($aliConfig);
$data = $aliPay->download($order)->toArray();
var_dump($aliPay->preQuest($data));
官方参数查询:https://docs.open.alipay.com/api_15/alipay.data.dataservice.bill.downloadurl.query
验证服务器数据
$aliConfig = new \EasySwoole\Pay\AliPay\Config();
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::SANDBOX);
$aliConfig->setAppId('2016091800538339');
$aliConfig->setPublicKey('阿里公钥');
$aliConfig->setPrivateKey('阿里私钥');
$pay = new \EasySwoole\Pay\Pay();
$param = [];//伪代码,post数据
unset($param['sign_type']);//需要忽略sign_type组装
$order = new \EasySwoole\Pay\AliPay\RequestBean\NotifyRequest($param,true);
$aliPay = $pay->aliPay($aliConfig);
$result = $aliPay->verify($order);
var_dump($result);
服务器确认收到异步通知字符串获取
可通过调用如下方法得到响应支付宝的异步通知字符串:'success'/'failure'
\EasySwoole\Pay\AliPay\AliPay::success(); // 成功响应
\EasySwoole\Pay\AliPay\AliPay::fail(); // 失败响应