easyswoole對接支付寶,微信支付


在easyswoole中,已經開發好了相關的支付組件,只需要引入即可:

composer require easyswoole/pay

 

pay組件支持協程

支付寶

支付方法

支付寶支付目前支持 7 種支付方法,對應的支付 method 如下:

 

 

 

電腦支付

統一收單下單並支付頁面接口

$aliConfig = new \EasySwoole\Pay\AliPay\Config();
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::NORMAL);
$aliConfig->setAppId('2017082000295641');
$aliConfig->setPublicKey('阿里公鑰');
$aliConfig->setPrivateKey('阿里私鑰');
 
$pay = new \EasySwoole\Pay\Pay();
 
## 對象風格
$order = new \EasySwoole\Pay\AliPay\RequestBean\Web();
$order->setSubject('測試');
$order->setOutTradeNo(time().'123456');
$order->setTotalAmount('0.01');
// 本庫只預置了常用的請求參數,沒預置的參數使用:$order->addProperty('其他字段','其他字段值');
 
## 數組風格
$order = new \EasySwoole\Pay\AliPay\RequestBean\App([
'subject'=>'測試',
'out_trade_no'=>'123456',
'total_amount'=>'0.01',
'額外的字段鍵值'=>'額外字段值'
],true);
 
$res = $pay->aliPay($aliConfig)->web($order);
var_dump($res->toArray());
 
$html = buildPayHtml(\EasySwoole\Pay\AliPay\GateWay::NORMAL,$res->toArray());
file_put_contents('test.html',$html);

 

 

訂單配置參數

所有訂單配置中,客觀參數均不用配置,擴展包已經為大家自動處理了,比如,product_code 等參數。

所有訂單配置參數和官方無任何差別,兼容所有功能,所有參數請參考這里,查看「請求參數」一欄。

參數查詢:https://docs.open.alipay.com/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("'", '&apos;', $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();
$aliConfig->setGateWay(\EasySwoole\Pay\AliPay\GateWay::NORMAL);
$aliConfig->setAppId('2017082000295641');
$aliConfig->setPublicKey('阿里公鑰');
$aliConfig->setPrivateKey('阿里私鑰');
 
$pay = new \EasySwoole\Pay\Pay();
 
$order = new \EasySwoole\Pay\AliPay\RequestBean\Wap();
$order->setSubject('測試');
$order->setOutTradeNo(time().'123456');
$order->setTotalAmount('0.01');
 
$res = $pay->aliPay($aliConfig)->wap($order);
var_dump($res->toArray());
 
$html = buildPayHtml(\EasySwoole\Pay\AliPay\GateWay::NORMAL,$res->toArray());
file_put_contents('test.html',$html);

 

 

訂單配置參數

所有訂單配置中,客觀參數均不用配置,擴展包已經為大家自動處理了,比如,product_code 等參數。

所有訂單配置參數和官方無任何差別,兼容所有功能,所有參數請參考這里,查看「請求參數」一欄。

參數查詢:https://docs.open.alipay.com/api_1/alipay.trade.wap.pay

APP支付接口2.0

$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\App();
$order->setSubject('測試');
$order->setOutTradeNo(time().'123456');
$order->setTotalAmount('0.01');
$aliPay = $pay->aliPay($aliConfig);
 
var_dump($aliPay->app($order)->toArray());

 

訂單配置參數

所有訂單配置中,客觀參數均不用配置,擴展包已經為大家自動處理了,比如, product_code 等參數。

所有訂單配置參數和官方無任何差別,兼容所有功能,所有參數請參考這里,查看「請求參數」一欄。

參數查詢:https://docs.open.alipay.com/api_1/alipay.trade.app.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\Pos();
$order->setSubject('測試');
$order->setTotalAmount('0.01');
$order->setOutTradeNo(time());
$order->setAuthCode('289756915257123456');
$aliPay = $pay->aliPay($aliConfig);
$data = $aliPay->pos($order)->toArray();
var_dump($data);

 

訂單配置參數

所有訂單配置中,客觀參數均不用配置,擴展包已經為大家自動處理了,比如,product_code 等參數。

所有訂單配置參數和官方無任何差別,兼容所有功能,所有參數請參考這里,查看「請求參數」一欄。

參數查詢:https://docs.open.alipay.com/api_1/alipay.trade.page.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->setTotalAmount('0.01');
$order->setPayeeType('ALIPAY_LOGONID');
$order->setPayeeAccount('hcihsn8174@sandbox.com');

$aliPay = $pay->aliPay($aliConfig);
$data = $aliPay->transfer($order)->toArray();
$aliPay->preQuest($data);
var_dump($data);

 

訂單配置參數

所有訂單配置中,客觀參數均不用配置,擴展包已經為大家自動處理了,比如,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);

 

服務器確認收到異步通知字符串獲取

\EasySwoole\Pay\AliPay::success();//成功響應
\EasySwoole\Pay\AliPay::fail();//失敗響應

 

微信支付

微信支付目前支持 3 種支付方法,對應的支付 method 如下:

 

 

 

微信參數配置

 

$wechatConfig = new Config();
$wechatConfig->setAppId('xxxxxx');      // 除了小程序以外使用該APPID
$wechatConfig->setMiniAppId('xxxxxx');  // 小程序使用該APPID
$wechatConfig->setMchId('xxxxxx');
$wechatConfig->setKey('xxxxxx');
$wechatConfig->setNotifyUrl('xxxxx');
$wechatConfig->setApiClientCert('xxxxxxx');//客戶端證書
$wechatConfig->setApiClientKey('xxxxxxx'); //客戶端證書秘鑰

 

由於小程序擁有獨立的APPID,只需要在配置里同時配置上AppId和MiniAppId兩個配置項,在支付的時候會自動選擇對應的APPID來發起支付

公眾號支付

$officialAccount = new OfficialAccount();
$officialAccount->setOpenid('xxxxxxx');
$officialAccount->setOutTradeNo('CN' . date('YmdHis') . rand(1000, 9999));
$officialAccount->setBody('xxxxx-測試' . $outTradeNo);
$officialAccount->setTotalFee(1);
$officialAccount->setSpbillCreateIp('xxxxx');
$pay = new \EasySwoole\Pay\Pay();
$params = $pay->weChat($wechatConfig)->officialAccount($officialAccount);

 

可以參考demo/wechat/index.php

H5支付

$wap = new \EasySwoole\Pay\WeChat\RequestBean\Wap();
$wap->setOutTradeNo('CN' . date('YmdHis') . rand(1000, 9999));
$wap->setBody('xxxxx-WAP測試' . $outTradeNo);
$wap->setTotalFee(1);
$wap->setSpbillCreateIp('xxxxx');
$pay = new \EasySwoole\Pay\Pay();
$params = $pay->weChat($wechatConfig)->wap($wap);

 

小程序支付

$bean = new \EasySwoole\Pay\WeChat\RequestBean\MiniProgram();
$bean->setOpenid('xxxxxxxxx');
$bean->setOutTradeNo('CN' . date('YmdHis') . rand(1000, 9999));
$bean->setBody('xxxx-測試' . $outTradeNo);
$bean->setTotalFee(1);
$bean->setSpbillCreateIp($this->request()->getHeader('x-real-ip')[0]);
$pay = new \EasySwoole\Pay\Pay();
$params = $pay->weChat($this->wechatConfig)->miniProgram($bean);

 

掃碼支付

模式一

生成掃碼鏈接 然后生成二維碼 具體請查看demo/wechat/index.php

$biz = new Biz();
$biz->setProductId('123456789');
$biz->setTimeStamp(time());
$biz->setAppId($wechatConfig->getAppId());
$biz->setMchId($wechatConfig->getMchid());
$data = $biz->toArray();
$u = new Utility($wechatConfig);
$sign = $u->generateSign($data);
$biz->setSign($sign);
$url1 = "weixin://wxpay/bizpayurl?" . $this->ToUrlParams($biz->toArray());

 

掃碼回調地址(ps:公眾號平台設置)

$xml = $this->request()->getBody()->__toString();
$pay = new Pay();
$data = $pay->weChat($this->wechatConfig)->verify($xml);
$bean = new \EasySwoole\Pay\WeChat\RequestBean\Scan();
$bean->setOutTradeNo('CN' . date('YmdHis') . rand(1000, 9999));
$bean->setOpenid('xxxxxx');
$bean->setProductId($data['product_id']);
$bean->setBody('xxxxxx-SCAN測試' . $outTradeNo);
$bean->setTotalFee(1);
$bean->setSpbillCreateIp($this->request()->getHeader('x-real-ip')[0]);
$response = $pay->weChat($this->wechatConfig)->scan($bean);
$nativeResponse = new NativeResponse([
'appid' => $this->wechatConfig->getAppId(),
'mch_id' => $this->wechatConfig->getMchId(),
'prepay_id' => $response->getPrepayId(),
'nonce_str' => $response->getNonceStr()]);
$u = new Utility($this->wechatConfig);
$nativeResponse->setSign($u->generateSign($nativeResponse->toArray()));
$xml = (new SplArray($nativeResponse->toArray()))->toXML();
$this->response()->write($xml);

 

模式二

$bean = new \EasySwoole\Pay\WeChat\RequestBean\Scan();
$bean->setOutTradeNo($outTradeNo);
$bean->setProductId('123456789');
$bean->setBody('xxxx-SCAN2測試' . $outTradeNo);
$bean->setTotalFee(1);
$bean->setSpbillCreateIp($this->request()->getHeader('x-real-ip')[0]);
$pay = new Pay();
$data = $pay->weChat($this->wechatConfig)->scan($bean);
$url2 = $data->getCodeUrl();

 

訂單查詢

go(function () use ($wechatConfig) {
    $orderFind = new \EasySwoole\Pay\WeChat\RequestBean\OrderFind();
    $orderFind->setOutTradeNo('CN201903181044383609');
    $pay = new \EasySwoole\Pay\Pay();
    $info = $pay->weChat($wechatConfig)->orderFind($orderFind);
    print_r((array)$info);
});

 

申請退款

 

go(function () use ($wechatConfig) {
    $refund = new \EasySwoole\Pay\WeChat\RequestBean\Refund();
    $refund->setOutTradeNo('CN201903181111275823');
    $refund->setOutRefundNo('TK' . date('YmdHis') . rand(1000, 9999));
    $refund->setTotalFee(1);
    $refund->setRefundFee(1);
    $refund->setNotifyUrl('xxxxx');
    $pay = new \EasySwoole\Pay\Pay();
    $info = $pay->weChat($wechatConfig)->refund($refund);
    print_r($info);
});

 

退款查詢

go(function () use ($wechatConfig) {
  $refundFind = new \EasySwoole\Pay\WeChat\RequestBean\RefundFind();
  $refundFind->setOutTradeNo('CN201903181044383609');
  $pay = new \EasySwoole\Pay\Pay();
  $info = $pay->weChat($wechatConfig)->refundFind($refundFind);
  print_r((array)$info);
});

 

關閉訂單

go(function () use ($wechatConfig) {
    $close = new \EasySwoole\Pay\WeChat\RequestBean\Close();
    $close->setOutTradeNo('CN201903151343107239');
    $pay = new \EasySwoole\Pay\Pay();
    $info = $pay->weChat($wechatConfig)->close($close);
    print_r((array)$info);
});

 

下載對賬單

go(function () use ($wechatConfig) {
    $download = new \EasySwoole\Pay\WeChat\RequestBean\Download();
    $download->setBillDate('20190312');
    $download->setBillType('ALL');//這個參數必傳
    $pay = new \EasySwoole\Pay\Pay();
    $info = $pay->weChat($wechatConfig)->download($download);
    echo htmlspecialchars($info, ENT_QUOTES);});

 

下載資金對賬單

go(function () use ($wechatConfig) {
    $download = new \EasySwoole\Pay\WeChat\RequestBean\DownloadFundFlow();
    $download->setBillDate('20190312');
    $download->setAccountType('Basic');
    $pay = new \EasySwoole\Pay\Pay();
    $info = $pay->weChat($wechatConfig)->downloadFundFlow($download);
    echo htmlspecialchars($info, ENT_QUOTES);
});

 

驗證簽名

$pay = new \EasySwoole\Pay\Pay();
$content = '';
//content為xml原始數據,在easyswoole中可通過$this->request()->getBody()->__toString()取出
$data = $pay->weChat($wechatConfig)->verify($content)

 

服務器確認收到異步通知字符串獲取

\EasySwoole\Pay\WeChat\WeChat::success();//成功響應
\EasySwoole\Pay\WeChat\WeChat::fail();//失敗響應

 

 

 

本文轉自 www.easyswoole.com 官方文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM