• easyswoole对接支付宝,微信支付


    在easyswoole中,已经开发好了相关的支付组件,只需要引入即可:

    composer require easyswoole/pay

    pay组件支持协程

    支付宝

    支付方法

    支付宝支付目前支持 7 种支付方法,对应的支付 method 如下:

    电脑支付

    统一收单下单并支付页面接口

    $aliConfig = new EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::NORMAL);
    $aliConfig->setAppId('2017082000295641');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
     
    $pay = new EasySwoolePayPay();
     
    ## 对象风格
    $order = new EasySwoolePayAliPayRequestBeanWeb();
    $order->setSubject('测试');
    $order->setOutTradeNo(time().'123456');
    $order->setTotalAmount('0.01');
    // 本库只预置了常用的请求参数,没预置的参数使用:$order->addProperty('其他字段','其他字段值');
     
    ## 数组风格
    $order = new EasySwoolePayAliPayRequestBeanApp([
    'subject'=>'测试',
    'out_trade_no'=>'123456',
    'total_amount'=>'0.01',
    '额外的字段键值'=>'额外字段值'
    ],true);
     
    $res = $pay->aliPay($aliConfig)->web($order);
    var_dump($res->toArray());
     
    $html = buildPayHtml(EasySwoolePayAliPayGateWay::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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::NORMAL);
    $aliConfig->setAppId('2017082000295641');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
     
    $pay = new EasySwoolePayPay();
     
    $order = new EasySwoolePayAliPayRequestBeanWap();
    $order->setSubject('测试');
    $order->setOutTradeNo(time().'123456');
    $order->setTotalAmount('0.01');
     
    $res = $pay->aliPay($aliConfig)->wap($order);
    var_dump($res->toArray());
     
    $html = buildPayHtml(EasySwoolePayAliPayGateWay::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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::SANDBOX);
    $aliConfig->setAppId('2016091800538339');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
     
    $pay = new EasySwoolePayPay();
    $order = new EasySwoolePayAliPayRequestBeanApp();
    $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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::SANDBOX);
    $aliConfig->setAppId('2016091800538339');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
    $pay = new EasySwoolePayPay();
    $order = new EasySwoolePayAliPayRequestBeanPos();
    $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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::SANDBOX);
    $aliConfig->setAppId('2016091800538339');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
    $pay = new EasySwoolePayPay();
    $pay = new EasySwoolePayPay();
    $order = new EasySwoolePayAliPayRequestBeanScan();
    $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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::SANDBOX);
    $aliConfig->setAppId('2016091800538339');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
    
    $pay = new EasySwoolePayPay();
    
    $order = new EasySwoolePayAliPayRequestBeanTransfer();
    $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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::SANDBOX);
    $aliConfig->setAppId('2016091800538339');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
    $pay = new EasySwoolePayPay();
    $order = new EasySwoolePayAliPayRequestBeanMiniProgram();
    $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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::SANDBOX);
    $aliConfig->setAppId('2016091800538339');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
    $pay = new EasySwoolePayPay();
    $order = new EasySwoolePayAliPayRequestBeanOrderFind();
    $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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::SANDBOX);
    $aliConfig->setAppId('2016091800538339');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
    $pay = new EasySwoolePayPay();
    $order = new EasySwoolePayAliPayRequestBeanRefundFind();
    $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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::SANDBOX);
    $aliConfig->setAppId('2016091800538339');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
    $pay = new EasySwoolePayPay();
    $order = new EasySwoolePayAliPayRequestBeanTransferFind();
    $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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::SANDBOX);
    $aliConfig->setAppId('2016091800538339');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
    $pay = new EasySwoolePayPay();
    $order = new EasySwoolePayAliPayRequestBeanCancel();
    $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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::SANDBOX);
    $aliConfig->setAppId('2016091800538339');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
    $pay = new EasySwoolePayPay();
    $order = new EasySwoolePayAliPayRequestBeanClose();
    $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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::SANDBOX);
    $aliConfig->setAppId('2016091800538339');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
    $pay = new EasySwoolePayPay();
    $order = new EasySwoolePayAliPayRequestBeanDownload();
    $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 EasySwoolePayAliPayConfig();
    $aliConfig->setGateWay(EasySwoolePayAliPayGateWay::SANDBOX);
    $aliConfig->setAppId('2016091800538339');
    $aliConfig->setPublicKey('阿里公钥');
    $aliConfig->setPrivateKey('阿里私钥');
    $pay = new EasySwoolePayPay();
    $param = [];//伪代码,post数据
    unset($param['sign_type']);//需要忽略sign_type组装
    $order = new EasySwoolePayAliPayRequestBeanNotifyRequest($param,true);
    $aliPay = $pay->aliPay($aliConfig);
    $result = $aliPay->verify($order);
    var_dump($result);

    服务器确认收到异步通知字符串获取

    EasySwoolePayAliPay::success();//成功响应
    EasySwoolePayAliPay::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 EasySwoolePayPay();
    $params = $pay->weChat($wechatConfig)->officialAccount($officialAccount);

    可以参考demo/wechat/index.php

    H5支付

    $wap = new EasySwoolePayWeChatRequestBeanWap();
    $wap->setOutTradeNo('CN' . date('YmdHis') . rand(1000, 9999));
    $wap->setBody('xxxxx-WAP测试' . $outTradeNo);
    $wap->setTotalFee(1);
    $wap->setSpbillCreateIp('xxxxx');
    $pay = new EasySwoolePayPay();
    $params = $pay->weChat($wechatConfig)->wap($wap);

    小程序支付

    $bean = new EasySwoolePayWeChatRequestBeanMiniProgram();
    $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 EasySwoolePayPay();
    $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 EasySwoolePayWeChatRequestBeanScan();
    $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 EasySwoolePayWeChatRequestBeanScan();
    $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 EasySwoolePayWeChatRequestBeanOrderFind();
        $orderFind->setOutTradeNo('CN201903181044383609');
        $pay = new EasySwoolePayPay();
        $info = $pay->weChat($wechatConfig)->orderFind($orderFind);
        print_r((array)$info);
    });

    申请退款

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

    退款查询

    go(function () use ($wechatConfig) {
      $refundFind = new EasySwoolePayWeChatRequestBeanRefundFind();
      $refundFind->setOutTradeNo('CN201903181044383609');
      $pay = new EasySwoolePayPay();
      $info = $pay->weChat($wechatConfig)->refundFind($refundFind);
      print_r((array)$info);
    });

    关闭订单

    go(function () use ($wechatConfig) {
        $close = new EasySwoolePayWeChatRequestBeanClose();
        $close->setOutTradeNo('CN201903151343107239');
        $pay = new EasySwoolePayPay();
        $info = $pay->weChat($wechatConfig)->close($close);
        print_r((array)$info);
    });

    下载对账单

    go(function () use ($wechatConfig) {
        $download = new EasySwoolePayWeChatRequestBeanDownload();
        $download->setBillDate('20190312');
        $download->setBillType('ALL');//这个参数必传
        $pay = new EasySwoolePayPay();
        $info = $pay->weChat($wechatConfig)->download($download);
        echo htmlspecialchars($info, ENT_QUOTES);});

    下载资金对账单

    go(function () use ($wechatConfig) {
        $download = new EasySwoolePayWeChatRequestBeanDownloadFundFlow();
        $download->setBillDate('20190312');
        $download->setAccountType('Basic');
        $pay = new EasySwoolePayPay();
        $info = $pay->weChat($wechatConfig)->downloadFundFlow($download);
        echo htmlspecialchars($info, ENT_QUOTES);
    });

    验证签名

    $pay = new EasySwoolePayPay();
    $content = '';
    //content为xml原始数据,在easyswoole中可通过$this->request()->getBody()->__toString()取出
    $data = $pay->weChat($wechatConfig)->verify($content)

    服务器确认收到异步通知字符串获取

    EasySwoolePayWeChatWeChat::success();//成功响应
    EasySwoolePayWeChatWeChat::fail();//失败响应

    本文转自 www.easyswoole.com 官方文档

  • 相关阅读:
    第三章web安全基础—IIS发布网站(其中包括服务器IIS搭建、DNS搭建)
    第三章web安全基础—web系统架构
    第二章网络协议安全—网络协议看安全
    第一章信息收集—漏洞利用框架metasploit基本实用
    第一章信息收集—漏洞扫描awvs和appscan
    第一章信息收集—扫描技术与抓包分析
    Pikachu——Unsafe Fileupload不安全文件上传
    Pikachu——Unsafe Filedownload 不安全的文件下载
    Pikachu——File Inclusion(文件包含)
    拿什么拯救你,红果果的小磁盘?
  • 原文地址:https://www.cnblogs.com/wadhf/p/11856449.html
Copyright © 2020-2023  润新知