在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 官方文档

版权声明:本文为wadhf原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wadhf/p/11856449.html