協程支付網關(支付寶支付)
組件安裝方法和說明
注意:請務必檢查你的
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.fe88.cn'); // 示例中途退出返回商戶網站的地址(僅供參考)
// (可選)設置 訂單描述,默認為 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.fe88.cn', // 示例中途退出返回商戶網站的地址(僅供參考)
'額外的字段鍵值' => '額外字段值', // 示例支付其他可選參數(詳細請看支付寶接口的可選參數,支付寶接口對應地址請看下文)
], 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(); // 失敗響應