Bladeren bron

add yurunsoft/pay-sdk

joe 4 jaren geleden
bovenliggende
commit
6e316aff55
100 gewijzigde bestanden met toevoegingen van 7361 en 5 verwijderingen
  1. 2 1
      composer.json
  2. 48 1
      composer.lock
  3. 1 0
      vendor/bin/CertificateDownloader.php
  4. 1 0
      vendor/composer/autoload_psr4.php
  5. 5 0
      vendor/composer/autoload_static.php
  6. 50 0
      vendor/composer/installed.json
  7. 11 2
      vendor/composer/installed.php
  8. 1 1
      vendor/services.php
  9. 20 0
      vendor/yurunsoft/pay-sdk/LICENSE
  10. 265 0
      vendor/yurunsoft/pay-sdk/README.md
  11. 21 0
      vendor/yurunsoft/pay-sdk/composer.json
  12. 231 0
      vendor/yurunsoft/pay-sdk/src/Alipay/Params/Pay/BusinessParams.php
  13. 46 0
      vendor/yurunsoft/pay-sdk/src/Alipay/Params/Pay/Request.php
  14. 65 0
      vendor/yurunsoft/pay-sdk/src/Alipay/Params/PublicParams.php
  15. 68 0
      vendor/yurunsoft/pay-sdk/src/Alipay/Params/Refund/BusinessParams.php
  16. 47 0
      vendor/yurunsoft/pay-sdk/src/Alipay/Params/Refund/Request.php
  17. 59 0
      vendor/yurunsoft/pay-sdk/src/Alipay/Params/RefundPwd/BusinessParams.php
  18. 39 0
      vendor/yurunsoft/pay-sdk/src/Alipay/Params/RefundPwd/Request.php
  19. 223 0
      vendor/yurunsoft/pay-sdk/src/Alipay/Params/WapPay/BusinessParams.php
  20. 39 0
      vendor/yurunsoft/pay-sdk/src/Alipay/Params/WapPay/ExtUserInfo.php
  21. 46 0
      vendor/yurunsoft/pay-sdk/src/Alipay/Params/WapPay/Request.php
  22. 194 0
      vendor/yurunsoft/pay-sdk/src/Alipay/SDK.php
  23. 67 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/App/ExtUserInfo.php
  24. 143 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/App/Params/Pay/BusinessParams.php
  25. 57 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/App/Params/Pay/ExtendParams.php
  26. 39 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/App/Params/Pay/Request.php
  27. 26 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/FTF/Params/ExtendParams.php
  28. 58 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/FTF/Params/GoodsDetail.php
  29. 164 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/FTF/Params/Pay/BusinessParams.php
  30. 48 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/FTF/Params/Pay/Request.php
  31. 134 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/FTF/Params/QR/BusinessParams.php
  32. 48 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/FTF/Params/QR/Request.php
  33. 25 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/Query/BusinessParams.php
  34. 39 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/Query/Request.php
  35. 66 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/Transfer/BusinessParams.php
  36. 39 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/Transfer/Request.php
  37. 93 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/UniTransfer/BusinessParams.php
  38. 26 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/UniTransfer/PayeeInfoParams.php
  39. 34 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/UniTransfer/Request.php
  40. 190 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/MiniApp/Params/Pay/BusinessParams.php
  41. 33 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/MiniApp/Params/Pay/ExtendParams.php
  42. 46 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/MiniApp/Params/Pay/Request.php
  43. 26 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Page/Params/GoodsDetail.php
  44. 169 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Page/Params/Pay/BusinessParams.php
  45. 40 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Page/Params/Pay/ExtendParams.php
  46. 46 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Page/Params/Pay/Request.php
  47. 26 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Cancel/BusinessParams.php
  48. 41 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Cancel/Request.php
  49. 26 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Close/BusinessParams.php
  50. 41 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Close/Request.php
  51. 27 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/DownloadBill/BusinessParams.php
  52. 41 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/DownloadBill/Request.php
  53. 115 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/PublicParams.php
  54. 26 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Query/BusinessParams.php
  55. 41 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Query/Request.php
  56. 68 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Refund/BusinessParams.php
  57. 41 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Refund/Request.php
  58. 33 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/RefundQuery/BusinessParams.php
  59. 41 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/RefundQuery/Request.php
  60. 54 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Settle/BusinessParams.php
  61. 41 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Settle/Request.php
  62. 44 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Settle/RoyaltyParameter.php
  63. 309 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/SDK.php
  64. 158 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Wap/Params/Pay/BusinessParams.php
  65. 57 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Wap/Params/Pay/ExtendParams.php
  66. 46 0
      vendor/yurunsoft/pay-sdk/src/AlipayApp/Wap/Params/Pay/Request.php
  67. 32 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Customs/Query/Request.php
  68. 96 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Customs/Submit/Request.php
  69. 61 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/BarcodePay/ExtendInfo.php
  70. 126 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/BarcodePay/Request.php
  71. 63 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/Cancel/Request.php
  72. 174 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/CreateMerchantQR/BizData.php
  73. 28 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/CreateMerchantQR/ChannelFee.php
  74. 66 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/CreateMerchantQR/Request.php
  75. 202 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/CreateQR/Request.php
  76. 23 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/ModifyMerchantQR/Request.php
  77. 73 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/ModifyStatus/Request.php
  78. 61 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/PreCreate/ExtendInfo.php
  79. 58 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/PreCreate/GoodsDetail.php
  80. 185 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/PreCreate/Request.php
  81. 38 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/Query/Request.php
  82. 73 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/Refund/Request.php
  83. 37 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/DownloadCompare/Request.php
  84. 37 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/DownloadSettlement/Request.php
  85. 23 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/ExchageRate/Request.php
  86. 74 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/Notify/Base.php
  87. 22 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/Notify/Pay.php
  88. 28 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/Notify/Sync.php
  89. 30 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/NotifyVerify/Request.php
  90. 166 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/Pay/Request.php
  91. 40 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/Query/Request.php
  92. 104 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/Refund/Request.php
  93. 173 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/WapPay/Request.php
  94. 65 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Params/PublicParams.php
  95. 39 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Params/SplitFundInfo.php
  96. 290 0
      vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/SDK.php
  97. 16 0
      vendor/yurunsoft/pay-sdk/src/AlipayRequestBase.php
  98. 316 0
      vendor/yurunsoft/pay-sdk/src/Base.php
  99. 102 0
      vendor/yurunsoft/pay-sdk/src/Lib/CertUtil.php
  100. 26 0
      vendor/yurunsoft/pay-sdk/src/Lib/Encrypt/AES.php

+ 2 - 1
composer.json

@@ -43,7 +43,8 @@
         "alipaysdk/easysdk": "^2.2",
         "pda/pheanstalk": "^4.0",
         "robthree/twofactorauth": "^1.8",
-        "yurunsoft/yurun-oauth-login": "^3.0"
+        "yurunsoft/yurun-oauth-login": "^3.0",
+        "yurunsoft/pay-sdk": "^3.1"
     },
     "autoload": {
         "psr-4": {

+ 48 - 1
composer.lock

@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "509db374adaca735f9e7f05c961a661c",
+    "content-hash": "5bc750cfd46d579e03de31cca9cd2027",
     "packages": [
         {
             "name": "adbario/php-dot-notation",
@@ -3841,6 +3841,53 @@
             "description": "PHP项目日常开发必备基础库,数组工具类、字符串工具类、数字工具类、函数工具类、服务器工具类、加密工具类",
             "time": "2019-06-22T08:28:23+00:00"
         },
+        {
+            "name": "yurunsoft/pay-sdk",
+            "version": "v3.1.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Yurunsoft/PaySDK.git",
+                "reference": "2a1fbfaacdb46d3920a0d9580ff0b4c5b78912ec"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Yurunsoft/PaySDK/zipball/2a1fbfaacdb46d3920a0d9580ff0b4c5b78912ec",
+                "reference": "2a1fbfaacdb46d3920a0d9580ff0b4c5b78912ec",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=5.5",
+                "yurunsoft/yurun-http": "~4.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "2.18.3"
+            },
+            "bin": [
+                "src/Weixin/Tool/CertificateDownloader.php"
+            ],
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Yurun\\PaySDK\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "PHP 集成支付 SDK ,集成了支付宝、微信支付的支付接口和其它相关接口的操作。",
+            "support": {
+                "issues": "https://github.com/Yurunsoft/PaySDK/issues",
+                "source": "https://github.com/Yurunsoft/PaySDK/tree/v3.1.3"
+            },
+            "time": "2021-10-14T02:23:25+00:00"
+        },
         {
             "name": "yurunsoft/yurun-http",
             "version": "v4.3.8",

+ 1 - 0
vendor/bin/CertificateDownloader.php

@@ -0,0 +1 @@
+../yurunsoft/pay-sdk/src/Weixin/Tool/CertificateDownloader.php

+ 1 - 0
vendor/composer/autoload_psr4.php

@@ -20,6 +20,7 @@ return array(
     'clagiordano\\weblibs\\configmanager\\' => array($vendorDir . '/clagiordano/weblibs-configmanager/src'),
     'app\\' => array($baseDir . '/app'),
     'Yurun\\Util\\' => array($vendorDir . '/yurunsoft/yurun-http/src'),
+    'Yurun\\PaySDK\\' => array($vendorDir . '/yurunsoft/pay-sdk/src'),
     'Yurun\\OAuthLogin\\' => array($vendorDir . '/yurunsoft/yurun-oauth-login/src'),
     'Workerman\\' => array($vendorDir . '/workerman/workerman'),
     'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'),

+ 5 - 0
vendor/composer/autoload_static.php

@@ -66,6 +66,7 @@ class ComposerStaticInitf16474ac994ccc25392f403933800b79
         'Y' => 
         array (
             'Yurun\\Util\\' => 11,
+            'Yurun\\PaySDK\\' => 13,
             'Yurun\\OAuthLogin\\' => 17,
         ),
         'W' => 
@@ -228,6 +229,10 @@ class ComposerStaticInitf16474ac994ccc25392f403933800b79
         array (
             0 => __DIR__ . '/..' . '/yurunsoft/yurun-http/src',
         ),
+        'Yurun\\PaySDK\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/yurunsoft/pay-sdk/src',
+        ),
         'Yurun\\OAuthLogin\\' => 
         array (
             0 => __DIR__ . '/..' . '/yurunsoft/yurun-oauth-login/src',

+ 50 - 0
vendor/composer/installed.json

@@ -6062,6 +6062,56 @@
             "description": "PHP项目日常开发必备基础库,数组工具类、字符串工具类、数字工具类、函数工具类、服务器工具类、加密工具类",
             "install-path": "../xin/helper"
         },
+        {
+            "name": "yurunsoft/pay-sdk",
+            "version": "v3.1.3",
+            "version_normalized": "3.1.3.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/Yurunsoft/PaySDK.git",
+                "reference": "2a1fbfaacdb46d3920a0d9580ff0b4c5b78912ec"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/Yurunsoft/PaySDK/zipball/2a1fbfaacdb46d3920a0d9580ff0b4c5b78912ec",
+                "reference": "2a1fbfaacdb46d3920a0d9580ff0b4c5b78912ec",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "php": ">=5.5",
+                "yurunsoft/yurun-http": "~4.0"
+            },
+            "require-dev": {
+                "friendsofphp/php-cs-fixer": "2.18.3"
+            },
+            "time": "2021-10-14T02:23:25+00:00",
+            "bin": [
+                "src/Weixin/Tool/CertificateDownloader.php"
+            ],
+            "type": "library",
+            "installation-source": "dist",
+            "autoload": {
+                "psr-4": {
+                    "Yurun\\PaySDK\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "PHP 集成支付 SDK ,集成了支付宝、微信支付的支付接口和其它相关接口的操作。",
+            "support": {
+                "issues": "https://github.com/Yurunsoft/PaySDK/issues",
+                "source": "https://github.com/Yurunsoft/PaySDK/tree/v3.1.3"
+            },
+            "install-path": "../yurunsoft/pay-sdk"
+        },
         {
             "name": "yurunsoft/yurun-http",
             "version": "v4.3.8",

+ 11 - 2
vendor/composer/installed.php

@@ -5,7 +5,7 @@
         'type' => 'project',
         'install_path' => __DIR__ . '/../../',
         'aliases' => array(),
-        'reference' => 'a1583401a20253e1e3349cb88e248cf227fc37f4',
+        'reference' => 'cd004333264e0f0247ac29635942f3ab55b42a60',
         'name' => 'topthink/think',
         'dev' => true,
     ),
@@ -871,7 +871,7 @@
             'type' => 'project',
             'install_path' => __DIR__ . '/../../',
             'aliases' => array(),
-            'reference' => 'a1583401a20253e1e3349cb88e248cf227fc37f4',
+            'reference' => 'cd004333264e0f0247ac29635942f3ab55b42a60',
             'dev_requirement' => false,
         ),
         'topthink/think-captcha' => array(
@@ -1009,6 +1009,15 @@
             'reference' => '02a58132dae2aea2d1c0b8e66f55125969224747',
             'dev_requirement' => false,
         ),
+        'yurunsoft/pay-sdk' => array(
+            'pretty_version' => 'v3.1.3',
+            'version' => '3.1.3.0',
+            'type' => 'library',
+            'install_path' => __DIR__ . '/../yurunsoft/pay-sdk',
+            'aliases' => array(),
+            'reference' => '2a1fbfaacdb46d3920a0d9580ff0b4c5b78912ec',
+            'dev_requirement' => false,
+        ),
         'yurunsoft/yurun-http' => array(
             'pretty_version' => 'v4.3.8',
             'version' => '4.3.8.0',

+ 1 - 1
vendor/services.php

@@ -1,5 +1,5 @@
 <?php 
-// This file is automatically generated at:2021-10-05 12:26:00
+// This file is automatically generated at:2021-11-28 12:09:54
 declare (strict_types = 1);
 return array (
   0 => 'think\\captcha\\CaptchaService',

+ 20 - 0
vendor/yurunsoft/pay-sdk/LICENSE

@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright (c) 2017 宇润
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

+ 265 - 0
vendor/yurunsoft/pay-sdk/README.md

@@ -0,0 +1,265 @@
+# PaySDK
+
+[![Latest Version](https://img.shields.io/packagist/v/yurunsoft/pay-sdk.svg)](https://packagist.org/packages/yurunsoft/pay-sdk)
+[![Php Version](https://img.shields.io/badge/php-%3E=5.5-brightgreen.svg)](https://secure.php.net/)
+[![IMI Doc](https://img.shields.io/badge/docs-passing-green.svg)](http://doc.yurunsoft.com/PaySDK)
+[![IMI License](https://img.shields.io/github/license/Yurunsoft/PaySDK.svg)](https://github.com/Yurunsoft/PaySDK/blob/master/LICENSE)
+
+## 介绍
+
+PaySDK 是 PHP 集成支付 SDK ,集成了支付宝、微信支付的支付接口和其它相关接口的操作。
+
+无框架依赖,支持所有框架,支持 Swoole 协程环境。
+
+我们有完善的在线技术文档:[http://doc.yurunsoft.com/PaySDK](http://doc.yurunsoft.com/PaySDK)
+
+API 文档:[https://apidoc.gitee.com/yurunsoft/PaySDK](https://apidoc.gitee.com/yurunsoft/PaySDK)
+
+同时欢迎各位加入**宇润 PHP 全家桶技术支持群**:17916227 [![点击加群](https://pub.idqqimg.com/wpa/images/group.png "点击加群")](https://jq.qq.com/?_wv=1027&k=5wXf4Zq),如有问题可以及时解答和修复。
+
+大家在开发中肯定会对接各种各样的支付平台,我个人精力有限,欢迎各位来 [Github](https://github.com/Yurunsoft/PaySDK) 提交 PR,一起完善 PaySDK ,让它能够支持更多的支付平台,更加稳定可靠好用。
+
+## 支持的支付接口
+
+### 支付宝
+
+* 即时到账-电脑网站支付(老)
+* 即时到账-手机网站支付(老)
+* 当面付
+* 手机网站支付
+* 电脑网站支付
+* APP支付服务端
+* 小程序支付
+* 单笔转账到支付宝账户
+* 海外支付(电脑网站、手机网站、APP、扫码)
+* 海关报关
+* 其它辅助交易接口(退款、查询等)
+
+### 微信支付
+
+* 刷卡支付
+* 公众号支付
+* 扫码支付
+* APP支付
+* H5支付
+* 小程序支付
+* 企业付款到零钱
+* 企业付款到银行卡
+* 海外支付(刷卡、公众号、扫码、APP)
+* 海关报关
+* 其它辅助交易接口(退款、查询等)
+
+## 安装
+
+在您的composer.json中加入配置:
+
+`PHP >= 5.5`
+
+```json
+{
+    "require": {
+        "yurunsoft/pay-sdk": "~3.0"
+    }
+}
+```
+
+`PHP >= 5.4`
+
+```json
+{
+    "require": {
+        "yurunsoft/pay-sdk": "~2.0"
+    }
+}
+```
+
+> 3.x 版本支持 PHP >= 5.5,持续迭代维护中
+
+> 2.x 版本支持 PHP >= 5.4,支持长期 BUG 维护,保证稳定可用,停止功能性更新
+
+然后执行`composer update`命令。
+
+## 代码示例
+
+### 支付宝即时到账
+
+```php
+// SDK实例化,传入公共配置
+$pay = new \Yurun\PaySDK\Alipay\SDK($params);
+
+// 支付接口
+$request = new \Yurun\PaySDK\Alipay\Params\Pay\Request;
+$request->notify_url = ''; // 支付后通知地址(作为支付成功回调,这个可靠)
+$request->return_url = ''; // 支付后跳转返回地址
+$request->businessParams->seller_id = $GLOBALS['PAY_CONFIG']['appid']; // 卖家支付宝用户号
+$request->businessParams->out_trade_no = 'test' . mt_rand(10000000,99999999); // 商户订单号
+$request->businessParams->total_fee = 0.01; // 价格
+$request->businessParams->subject = '测试商品'; // 商品标题
+
+// 跳转到支付页面
+// $pay->redirectExecute($request);
+
+// 获取跳转url
+$pay->prepareExecute($request, $url);
+var_dump($url);
+```
+
+### 支付宝手机网站支付
+
+```php
+// SDK实例化,传入公共配置
+$pay = new \Yurun\PaySDK\AlipayApp\SDK($params);
+
+// 支付接口
+$request = new \Yurun\PaySDK\AlipayApp\Wap\Params\Pay\Request;
+$request->notify_url = ''; // 支付后通知地址(作为支付成功回调,这个可靠)
+$request->return_url = ''; // 支付后跳转返回地址
+$request->businessParams->out_trade_no = 'test' . mt_rand(10000000,99999999); // 商户订单号
+$request->businessParams->total_amount = 0.01; // 价格
+$request->businessParams->subject = '小米手机9黑色陶瓷尊享版'; // 商品标题
+
+// 跳转到支付页面
+// $pay->redirectExecute($request);
+
+// 获取跳转url
+$pay->prepareExecute($request, $url);
+var_dump($url);
+```
+
+### 微信H5支付
+
+```php
+// SDK实例化,传入公共配置
+$pay = new \Yurun\PaySDK\Weixin\SDK($params);
+
+// 支付接口
+$request = new \Yurun\PaySDK\Weixin\H5\Params\Pay\Request;
+$request->body = 'test'; // 商品描述
+$request->out_trade_no = 'test' . mt_rand(10000000,99999999); // 订单号
+$request->total_fee = 1; // 订单总金额,单位为:分
+$request->spbill_create_ip = '127.0.0.1'; // 客户端ip
+$request->notify_url = ''; // 异步通知地址
+
+// 调用接口
+$result = $pay->execute($request);
+if($pay->checkResult())
+{
+    // 跳转支付界面
+    header('Location: ' . $result['mweb_url']);
+}
+else
+{
+    var_dump($pay->getErrorCode() . ':' . $pay->getError());
+}
+exit;
+```
+
+### Swoole 协程环境支持
+
+在支付、退款异步通知中,需要赋值 `Swoole` 的 `Request` 和 `Response` 对象,或者遵循 PSR-7 标准的对象即可。
+
+主流框架的 `Request` 和 `Response` 对象,一般都遵循 PSR-7 标准,可以直接使用。
+
+#### imi 框架中使用
+
+imi 是基于 PHP Swoole 的高性能协程应用开发框架,它支持 HttpApi、WebSocket、TCP、UDP 服务的开发。
+
+在 Swoole 的加持下,相比 php-fpm 请求响应能力,I/O密集型场景处理能力,有着本质上的提升。
+
+imi 框架拥有丰富的功能组件,可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。
+
+<https://www.imiphp.com/>
+
+```php
+/**
+ * 这是一个在控制器中的动作方法
+ * @Action
+ */
+public function test()
+{
+    $payNotify = new class extends \Yurun\PaySDK\Weixin\Notify\Pay
+    {
+        /**
+         * 后续执行操作
+         * @return void
+         */
+        protected function __exec()
+        {
+
+        }
+    };
+    $context = RequestContext::getContext();
+    // 下面两行很关键
+    $payNotify->swooleRequest = $context['request'];
+    $payNotify->swooleResponse = $context['response'];
+
+    $sdk->notify($payNotify);
+
+    // 这句话必须填写
+    return $payNotify->swooleResponse;
+}
+```
+
+#### 其它框架(Swoole 对象)
+
+```php
+$payNotify = new class extends \Yurun\PaySDK\Weixin\Notify\Pay
+{
+    /**
+     * 后续执行操作
+     * @return void
+     */
+    protected function __exec()
+    {
+
+    }
+};
+// 下面两行很关键,$request、$response 从 request 中获取
+// 或者查阅如何从你使用的框架中获取
+$payNotify->swooleRequest = $request;
+$payNotify->swooleResponse = $response;
+
+$sdk->notify($payNotify);
+```
+
+#### 其它框架(PSR-7 对象)
+
+```php
+$payNotify = new class extends \Yurun\PaySDK\Weixin\Notify\Pay
+{
+    /**
+     * 后续执行操作
+     * @return void
+     */
+    protected function __exec()
+    {
+
+    }
+};
+// 目前主流 Swoole 基本都支持 PSR-7 标准的对象
+// 所以可以直接传入,如何获取请查阅对应框架的文档
+$payNotify->swooleRequest = $request;
+$payNotify->swooleResponse = $response;
+
+$sdk->notify($payNotify);
+
+// 处理完成后需要将 $response 从控制器返回或者赋值给上下文
+// 不同框架的操作不同,请自行查阅对应框架的文档
+return $payNotify->swooleResponse;
+```
+
+## 商业服务
+
+**服务内容:**
+
+* 问题排查及咨询
+* 代接支付
+* 其它合作
+
+如有需要加QQ:369124067(注明来意)
+
+## 捐赠
+
+<img src="https://raw.githubusercontent.com/Yurunsoft/PaySDK/master/res/pay.png"/>
+
+开源不求盈利,多少都是心意,生活不易,随缘随缘……

+ 21 - 0
vendor/yurunsoft/pay-sdk/composer.json

@@ -0,0 +1,21 @@
+{
+    "name": "yurunsoft/pay-sdk",
+    "description": "PHP 集成支付 SDK ,集成了支付宝、微信支付的支付接口和其它相关接口的操作。",
+    "type": "library",
+    "license": "MIT",
+    "autoload": {
+        "psr-4": {
+            "Yurun\\PaySDK\\": "src/"
+        }
+    },
+    "require": {
+        "php": ">=5.5",
+        "yurunsoft/yurun-http" : "~4.0"
+    },
+    "require-dev": {
+        "friendsofphp/php-cs-fixer": "2.18.3"
+    },
+    "bin": [
+        "src/Weixin/Tool/CertificateDownloader.php"
+    ]
+}

+ 231 - 0
vendor/yurunsoft/pay-sdk/src/Alipay/Params/Pay/BusinessParams.php

@@ -0,0 +1,231 @@
+<?php
+
+namespace Yurun\PaySDK\Alipay\Params\Pay;
+
+/**
+ * 支付宝即时到账支付业务参数类.
+ */
+class BusinessParams
+{
+    /**
+     * 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 商品的标题/交易标题/订单标题/订单关键字等。
+     * 该参数最长为128个汉字。
+     *
+     * @var string
+     */
+    public $subject;
+
+    /**
+     * 只支持取值为1(商品购买)。
+     *
+     * @var int
+     */
+    public $payment_type = 1;
+
+    /**
+     * 该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。
+     *
+     * @var float
+     */
+    public $total_fee;
+
+    /**
+     * 卖家支付宝用户号.
+     *
+     * @var string
+     */
+    public $seller_id;
+
+    /**
+     * 卖家支付宝账号.
+     *
+     * @var string
+     */
+    public $seller_email;
+
+    /**
+     * 卖家支付宝账号别名.
+     *
+     * @var string
+     */
+    public $seller_account_name;
+
+    /**
+     * 买家支付宝用户号.
+     *
+     * @var string
+     */
+    public $buyer_id;
+
+    /**
+     * 买家支付宝账号.
+     *
+     * @var string
+     */
+    public $buyer_email;
+
+    /**
+     * 买家支付宝账号别名.
+     *
+     * @var string
+     */
+    public $buyer_account_name;
+
+    /**
+     * 商品单价.
+     *
+     * @var float
+     */
+    public $price;
+
+    /**
+     * 购买数量.
+     *
+     * @var int
+     */
+    public $quantity;
+
+    /**
+     * 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 收银台页面上,商品展示的超链接。
+     *
+     * @var string
+     */
+    public $show_url;
+
+    /**
+     * 可用的支付渠道,用户只能在指定渠道范围内支付。
+     * 当有多个渠道时,以“^”分隔。
+     * 与disable_paymethod互斥。
+     *
+     * @var string
+     */
+    public $enable_paymethod;
+
+    /**
+     * 被禁用的支付渠道,用户不可用指定渠道支付。
+     * 当有多个渠道时,以“^”分隔。
+     * 与nable_paymethod互斥。
+     *
+     * @var string
+     */
+    public $disable_paymethod;
+
+    /**
+     * 防钓鱼时间戳,通过时间戳查询接口获取的加密支付宝系统时间戳。
+     * 如果已申请开通防钓鱼时间戳验证,则此字段必填。
+     *
+     * @var string
+     */
+    public $anti_phishing_key;
+
+    /**
+     * 客户端IP,用户在创建交易时,该用户当前所使用机器的IP。
+     * 如果商户申请后台开通防钓鱼IP地址检查选项,此字段必填,校验用。
+     *
+     * @var string
+     */
+    public $exter_invoke_ip;
+
+    /**
+     * 公用回传参数,如果用户请求时传递了该参数,则返回给商户时会回传该参数。
+     *
+     * @var string
+     */
+    public $extra_common_param;
+
+    /**
+     * 超时时间
+     * 该笔订单允许的最晚付款时间,逾期将关闭交易。
+     * 取值范围:1m~15d。
+     * m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。
+     * 该参数数值不接受小数点,如1.5h,可转换为90m。
+     * 该参数在请求到支付宝时开始计时。
+     *
+     * @var string
+     */
+    public $it_b_pay;
+
+    /**
+     * 如果开通了快捷登录产品,则需要填写;如果没有开通,则为空。
+     *
+     * @var string
+     */
+    public $token;
+
+    /**
+     * 扫码支付的方式,支持前置模式和跳转模式。
+     * 前置模式是将二维码前置到商户的订单确认页的模式。需要商户在自己的页面中以iframe方式请求支付宝页面。具体分为以下4种:
+     * 0:订单码-简约前置模式,对应iframe宽度不能小于600px,高度不能小于300px;
+     * 1:订单码-前置模式,对应iframe宽度不能小于300px,高度不能小于600px;
+     * 3:订单码-迷你前置模式,对应iframe宽度不能小于75px,高度不能小于75px。
+     * 4:订单码-可定义宽度的嵌入式二维码,商户可根据需要设定二维码的大小。
+     * 跳转模式下,用户的扫码界面是由支付宝生成的,不在商户的域名下。
+     * 2:订单码-跳转模式.
+     *
+     * @var int
+     */
+    public $qr_pay_mode = 2;
+
+    /**
+     * 商户自定义的二维码宽度。
+     * 当qr_pay_mode=4时,该参数生效。
+     *
+     * @var int
+     */
+    public $qrcode_width;
+
+    /**
+     * 是否需要买家实名认证。
+     * T表示需要买家实名认证;
+     * 不传或者传其它值表示不需要买家实名认证。
+     *
+     * @var string
+     */
+    public $need_buyer_realnamed;
+
+    /**
+     * 参数格式:hb_fq_seller_percent ^卖家承担付费比例|hb_fq_num ^期数。
+     * hb_fq_num:花呗分期数,比如分3期支付;
+     * hb_fq_seller_percent:卖家承担收费比例,比如100代表卖家承担100%。
+     * 两个参数必须一起传入。
+     * 两个参数用“|”间隔。Key和value之间用“^”间隔。
+     * 具体花呗分期期数和卖家承担收费比例可传入的数值请咨询支付宝。
+     *
+     * @var string
+     */
+    public $hb_fq_param;
+
+    /**
+     * 商品类型:
+     * 1表示实物类商品
+     * 0表示虚拟类商品
+     * 如果不传,默认为实物类商品。
+     *
+     * @var int
+     */
+    public $goods_type = 1;
+
+    /**
+     * 业务扩展参数
+     * 参数格式:参数名1^参数值1|参数名2^参数值2|……
+     * 多条数据用“|”间隔。
+     * 详见下面的“业务扩展参数说明”。
+     *
+     * @var string
+     */
+    public $extend_param;
+}

+ 46 - 0
vendor/yurunsoft/pay-sdk/src/Alipay/Params/Pay/Request.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace Yurun\PaySDK\Alipay\Params\Pay;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝即时到账支付请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'create_direct_pay_by_user';
+
+    /**
+     * 同步返回地址,HTTP/HTTPS开头字符串.
+     *
+     * @var string
+     */
+    public $return_url;
+
+    /**
+     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/62/104743/.
+     *
+     * @var \Yurun\PaySDK\Alipay\Params\Pay\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+    }
+}

+ 65 - 0
vendor/yurunsoft/pay-sdk/src/Alipay/Params/PublicParams.php

@@ -0,0 +1,65 @@
+<?php
+
+namespace Yurun\PaySDK\Alipay\Params;
+
+use Yurun\PaySDK\PublicBase;
+
+/**
+ * 支付宝即时到账接口公共参数.
+ */
+class PublicParams extends PublicBase
+{
+    /**
+     * 商户网站使用的编码格式,如UTF-8、GBK、GB2312等。
+     *
+     * @var string
+     */
+    public $_input_charset = 'UTF-8';
+
+    /**
+     * DSA、RSA、MD5三个值可选,必须大写。
+     *
+     * @var string
+     */
+    public $sign_type = 'MD5';
+
+    /**
+     * 私有证书文件内容.
+     *
+     * @var string
+     */
+    public $appPrivateKey;
+
+    /**
+     * 私有证书文件地址,不为空时优先使用文件地址
+     *
+     * @var string
+     */
+    public $appPrivateKeyFile;
+
+    /**
+     * 公有证书文件内容.
+     *
+     * @var string
+     */
+    public $appPublicKey;
+
+    /**
+     * 公有证书文件地址,不为空时优先使用文件地址
+     *
+     * @var string
+     */
+    public $appPublicKeyFile;
+
+    /**
+     * MD5密钥,安全检验码,由数字和字母组成的32位字符串,查看地址:https://b.alipay.com/order/pidAndKey.htm.
+     *
+     * @var string
+     */
+    public $md5Key;
+
+    public function __construct()
+    {
+        $this->apiDomain = 'https://mapi.alipay.com/gateway.do';
+    }
+}

+ 68 - 0
vendor/yurunsoft/pay-sdk/src/Alipay/Params/Refund/BusinessParams.php

@@ -0,0 +1,68 @@
+<?php
+
+namespace Yurun\PaySDK\Alipay\Params\Refund;
+
+/**
+ * 支付宝无密退款业务参数类
+ * 注:无密退款接口权限需要联系支付宝客服申请签约.
+ */
+class BusinessParams
+{
+    /**
+     * 每进行一次即时到账批量退款,都需要提供一个批次号,通过该批次号可以查询这一批次的退款交易记录。对于每一个合作伙伴,传递的每一个批次号都必须保证唯一性。
+     * 格式为:退款日期(8 位当天日期)+流水号(3~24 位,流水号可以接受数字或英文字符,建议使用数字,但不可接受“000”)。
+     *
+     * @var string
+     */
+    public $batch_no;
+
+    /**
+     * 退款请求的当前时间。
+     * 格式为:yyyy-MM-dd hh:mm:ss。
+     *
+     * @var string
+     */
+    public $refund_date;
+
+    /**
+     * 退款总笔数
+     * 即参数 detail_data 的值中,“#”字符出现的数量加 1,最大支持 1000 笔(即“#”字符出现的最大数量 999个)。
+     *
+     * @var int
+     */
+    public $batch_num;
+
+    /**
+     * 退款请求的明细数据。
+     * 单笔数据集格式为:第一笔交易#第二笔交易#第三笔交易...#第 N 笔交易。
+     * 其中每一笔交易按退交易、退分润、退子交易的组合来划分,有以下 4 种格式:
+     *   – 交易退款数据集|分润退款数据集 1|分润退款数据集 2|...|分润退款数据集 N
+     *   – 交易退款数据集|分润退款数据集 1|分润退款数据集 2|...|分润退款数据集 N$$退子交易
+     *   – 交易退款数据集
+     *   – 交易退款数据集$$退子交易
+     * 交易退款数据集格式为:原付款支付宝交易号^退款总金额^退款理由。
+     * 分润退款数据集格式为:转出人支付宝账号[原收到分润金额的账户]^转出人支付宝账号对应用户ID[2088开头16位纯数字]^转入人支付宝账号[原付出分润金额的账户]^转入人支付宝账号对应用户 ID^退款金额^退款理由。
+     * 子交易退款数据集格式为:金额^退款理由。
+     *
+     * @var string
+     */
+    public $detail_data;
+
+    /**
+     * 是否使用冻结金额退款
+     * Y:可以使用冻结金额退款
+     * N:不可使用冻结金额退款
+     * 如果不提供,则默认值为 N.
+     *
+     * @var string
+     */
+    public $use_freeze_amount;
+
+    /**
+     * 结果返回类型:xml。
+     * xml:以 XML 格式返回执行结果。
+     *
+     * @var string
+     */
+    public $return_type;
+}

+ 47 - 0
vendor/yurunsoft/pay-sdk/src/Alipay/Params/Refund/Request.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace Yurun\PaySDK\Alipay\Params\Refund;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝无密退款业务请求类
+ * 注:无密退款接口权限需要联系支付宝客服申请签约.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'refund_fastpay_by_platform_nopwd';
+
+    /**
+     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 支付宝服务器主动通知商户网站里指定的页面http 路径,用于通知商户交易充退结果。
+     *
+     * @var string
+     */
+    public $dback_notify_url;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/62/104743/.
+     *
+     * @var \Yurun\PaySDK\Alipay\Params\Refund\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+    }
+}

+ 59 - 0
vendor/yurunsoft/pay-sdk/src/Alipay/Params/RefundPwd/BusinessParams.php

@@ -0,0 +1,59 @@
+<?php
+
+namespace Yurun\PaySDK\Alipay\Params\RefundPwd;
+
+/**
+ * 支付宝有密退款业务参数类.
+ */
+class BusinessParams
+{
+    /**
+     * 卖家支付宝账号.
+     *
+     * @var string
+     */
+    public $seller_email;
+
+    /**
+     * 卖家用户ID
+     * 登录时,seller_email和seller_user_id两者必填一个。如果两者都填,以seller_user_id为准。
+     *
+     * @var string
+     */
+    public $seller_user_id;
+
+    /**
+     * 退款请求时间
+     * 格式为:yyyy-MM-dd HH:mm:ss。
+     *
+     * @var string
+     */
+    public $refund_date;
+
+    /**
+     * 退款批次号
+     * 每进行一次即时到账批量退款,都需要提供一个批次号,通过该批次号可以查询这一批次的退款交易记录,对于每一个合作伙伴,传递的每一个批次号都必须保证唯一性。
+     * 格式为:退款日期(8位)+流水号(3~24位)。
+     * 不可重复,且退款日期必须是当天日期。流水号可以接受数字或英文字符,建议使用数字,但不可接受“000”。
+     *
+     * @var string
+     */
+    public $batch_no;
+
+    /**
+     * 总笔数
+     * 即参数detail_data的值中,“#”字符出现的数量加1,最大支持1000笔(即“#”字符出现的最大数量为999个)。
+     *
+     * @var string
+     */
+    public $batch_num;
+
+    /**
+     * 单笔数据集
+     * 退款请求的明细数据。
+     * 格式详情参见下面的“单笔数据集参数说明”。
+     *
+     * @var string
+     */
+    public $detail_data;
+}

+ 39 - 0
vendor/yurunsoft/pay-sdk/src/Alipay/Params/RefundPwd/Request.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace Yurun\PaySDK\Alipay\Params\RefundPwd;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝有密退款业务请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'refund_fastpay_by_platform_pwd';
+
+    /**
+     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/62/104743/.
+     *
+     * @var \Yurun\PaySDK\Alipay\Params\RefundPwd\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+    }
+}

+ 223 - 0
vendor/yurunsoft/pay-sdk/src/Alipay/Params/WapPay/BusinessParams.php

@@ -0,0 +1,223 @@
+<?php
+
+namespace Yurun\PaySDK\Alipay\Params\WapPay;
+
+/**
+ * 支付宝手机网站支付接口参数类.
+ */
+class BusinessParams
+{
+    /**
+     * 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 商品的标题/交易标题/订单标题/订单关键字等。
+     * 该参数最长为128个汉字。
+     *
+     * @var string
+     */
+    public $subject;
+
+    /**
+     * 只支持取值为1(商品购买)。
+     *
+     * @var int
+     */
+    public $payment_type = 1;
+
+    /**
+     * 该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。
+     *
+     * @var float
+     */
+    public $total_fee;
+
+    /**
+     * 卖家支付宝用户号.
+     *
+     * @var string
+     */
+    public $seller_id;
+
+    /**
+     * 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 收银台页面上,商品展示的超链接。
+     *
+     * @var string
+     */
+    public $show_url;
+
+    /**
+     * 可用的支付渠道,用户只能在指定渠道范围内支付。
+     * 当有多个渠道时,以“^”分隔。
+     * 与disable_paymethod互斥。
+     *
+     * @var string
+     */
+    public $enable_paymethod;
+
+    /**
+     * 超时时间
+     * 该笔订单允许的最晚付款时间,逾期将关闭交易。
+     * 取值范围:1m~15d。
+     * m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。
+     * 该参数数值不接受小数点,如1.5h,可转换为90m。
+     * 该参数在请求到支付宝时开始计时。
+     *
+     * @var string
+     */
+    public $it_b_pay;
+
+    /**
+     * 钱包token
+     * 接入极简版wap收银台时支持。
+     * 当商户请求是来自支付宝钱包,在支付宝钱包登录后,有生成登录信息token时,使用该参数传入token将可以实现信任登录收银台,不需要再次登录。
+     * 注意:
+     * 登录后用户还是有入口可以切换账户,不能使用该参数锁定用户。
+     *
+     * @var string
+     */
+    public $extern_token;
+
+    /**
+     * 航旅订单其它费用
+     * 航旅订单中除去票面价之外的费用,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。
+     *
+     * @var float
+     */
+    public $otherfee;
+
+    /**
+     * 航旅订单金额
+     * 航旅订单金额描述,由四项或两项构成,各项之间由“|”分隔,每项包含金额与描述,金额与描述间用“^”分隔,票面价之外的价格之和必须与otherfee相等。
+     *
+     * @var float
+     */
+    public $airticket;
+
+    /**
+     * 是否发起实名校验
+     * T:发起实名校验;
+     * F:不发起实名校验。
+     *
+     * @var string
+     */
+    public $rn_check;
+
+    /**
+     * 买家证件号码(需要与支付宝实名认证时所填写的证件号码一致)。
+     * 说明:
+     * 当scene=ZJCZTJF的情况下,才会校验buyer_cert_no字段。
+     *
+     * @var string
+     */
+    public $buyer_cert_no;
+
+    /**
+     * 买家真实姓名。
+     * 说明:
+     * 当scene=ZJCZTJF的情况下,才会校验buyer_real_name字段。
+     *
+     * @var string
+     */
+    public $buyer_real_name;
+
+    /**
+     * 收单场景。如需使用该字段,需向支付宝申请开通,否则传入无效。
+     *
+     * @var string
+     */
+    public $scene;
+
+    /**
+     * 参数格式:hb_fq_seller_percent ^卖家承担付费比例|hb_fq_num ^期数。
+     * hb_fq_num:花呗分期数,比如分3期支付;
+     * hb_fq_seller_percent:卖家承担收费比例,比如100代表卖家承担100%。
+     * 两个参数必须一起传入。
+     * 两个参数用“|”间隔。Key和value之间用“^”间隔。
+     * 具体花呗分期期数和卖家承担收费比例可传入的数值请咨询支付宝。
+     *
+     * @var string
+     */
+    public $hb_fq_param;
+
+    /**
+     * 商品类型:
+     * 1表示实物类商品
+     * 0表示虚拟类商品
+     * 如果不传,默认为实物类商品。
+     *
+     * @var int
+     */
+    public $goods_type = 1;
+
+    /**
+     * app_pay=Y:尝试唤起支付宝客户端进行支付,若用户未安装支付宝,则继续使用wap收银台进行支付。商户若为APP,则需在APP的webview中增加alipays协议处理逻辑。
+     *
+     * @var string
+     */
+    public $app_pay = 'Y';
+
+    /**
+     * 商户与支付宝约定的营销参数,为Key:Value键值对,如需使用,请联系支付宝技术人员。
+     *
+     * @var string
+     */
+    public $promo_params;
+
+    /**
+     * 业务扩展参数
+     * 参数格式:参数名1^参数值1|参数名2^参数值2|……
+     * 多条数据用“|”间隔。
+     * 详见下面的“业务扩展参数说明”。
+     *
+     * @var string
+     */
+    public $extend_params;
+
+    /**
+     * 外部用户信息。提供给商户传入用户的身份信息,与支付宝内用户信息匹配校验。校验失败报错“付款人不匹配”。参数说明:json格式
+     * 详见 https://docs.open.alipay.com/60/104790/.
+     *
+     * @var \Yurun\PaySDK\Alipay\Params\WapPay\ExtUserInfo
+     */
+    public $ext_user_info;
+
+    public function __construct()
+    {
+        $this->ext_user_info = new ExtUserInfo();
+    }
+
+    public function toArray()
+    {
+        $obj = (array) $this;
+        $result = $obj['ext_user_info']->toString();
+        if (null === $result)
+        {
+            unset($obj['ext_user_info']);
+        }
+        else
+        {
+            $obj['ext_user_info'] = $result;
+        }
+        foreach ($obj as $key => $value)
+        {
+            if (null === $value)
+            {
+                unset($obj[$key]);
+            }
+        }
+
+        return $obj;
+    }
+}

+ 39 - 0
vendor/yurunsoft/pay-sdk/src/Alipay/Params/WapPay/ExtUserInfo.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace Yurun\PaySDK\Alipay\Params\WapPay;
+
+use Yurun\PaySDK\Traits\JSONParams;
+
+class ExtUserInfo
+{
+    use JSONParams;
+
+    /**
+     * 证件类型
+     * 填充的证件号对应的证件类型,目前支持:IDENTITY_CARD(身份证).
+     *
+     * @var string
+     */
+    public $cert_type;
+
+    /**
+     * 证件姓名.
+     *
+     * @var string
+     */
+    public $name;
+
+    /**
+     * 证件号.
+     *
+     * @var string
+     */
+    public $cert_no;
+
+    /**
+     * 是否要进行实名制校验: l T需要 l F不需要(默认不需要).
+     *
+     * @var string
+     */
+    public $need_check_info;
+}

+ 46 - 0
vendor/yurunsoft/pay-sdk/src/Alipay/Params/WapPay/Request.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace Yurun\PaySDK\Alipay\Params\WapPay;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝手机网站支付接口请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'alipay.wap.create.direct.pay.by.user';
+
+    /**
+     * 同步返回地址,HTTP/HTTPS开头字符串.
+     *
+     * @var string
+     */
+    public $return_url;
+
+    /**
+     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/60/104790/.
+     *
+     * @var \Yurun\PaySDK\Alipay\Params\WapPay\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+    }
+}

+ 194 - 0
vendor/yurunsoft/pay-sdk/src/Alipay/SDK.php

@@ -0,0 +1,194 @@
+<?php
+
+namespace Yurun\PaySDK\Alipay;
+
+use Yurun\PaySDK\Base;
+use Yurun\PaySDK\Lib\ObjectToArray;
+
+/**
+ * 支付宝即时到账SDK类.
+ */
+class SDK extends Base
+{
+    /**
+     * 公共参数.
+     *
+     * @var \Yurun\PaySDK\Alipay\Params\PublicParams
+     */
+    public $publicParams;
+
+    /**
+     * 处理执行接口的数据.
+     *
+     * @param $params
+     * @param &$data 数据数组
+     * @param &$requestData 请求用的数据,格式化后的
+     * @param &$url 请求地址
+     *
+     * @return array
+     */
+    public function __parseExecuteData($params, &$data, &$requestData, &$url)
+    {
+        $data = array_merge(ObjectToArray::parse($this->publicParams), ObjectToArray::parse($params), ObjectToArray::parse($params->businessParams));
+        unset($data['apiDomain'], $data['appID'], $data['businessParams'], $data['appPrivateKey'], $data['appPrivateKeyFile'], $data['md5Key'], $data['appPublicKey'], $data['appPublicKeyFile'], $data['_syncResponseName'], $data['_method'], $data['_isSyncVerify'], $data['_contentType']);
+        $data['partner'] = $this->publicParams->appID;
+        foreach ($data as $key => $value)
+        {
+            if ('' == $value)
+            {
+                unset($data[$key]);
+            }
+        }
+        $data['sign'] = $this->sign($data);
+        $requestData = $data;
+        $url = $this->publicParams->apiDomain;
+    }
+
+    public function sign($data)
+    {
+        $content = $this->parseSignData($data);
+        if (empty($this->publicParams->appPrivateKeyFile))
+        {
+            $key = $this->publicParams->appPrivateKey;
+            $method = 'signPrivate';
+        }
+        else
+        {
+            $key = $this->publicParams->appPrivateKeyFile;
+            $method = 'signPrivateFromFile';
+        }
+        switch ($this->publicParams->sign_type)
+        {
+            case 'DSA':
+                $result = \Yurun\PaySDK\Lib\Encrypt\DSA::$method($content, $key);
+                break;
+            case 'RSA':
+                $result = \Yurun\PaySDK\Lib\Encrypt\RSA::$method($content, $key);
+                break;
+            case 'MD5':
+                return md5($content . $this->publicParams->md5Key);
+            default:
+                throw new \Exception('未知的加密方式:' . $this->publicParams->sign_type);
+        }
+
+        return base64_encode($result);
+    }
+
+    /**
+     * 验证回调通知是否合法.
+     *
+     * @param $data
+     *
+     * @return bool
+     */
+    public function verifyCallback($data)
+    {
+        if (!isset($data['sign'], $data['sign_type']))
+        {
+            return false;
+        }
+        $content = $this->parseSignData($data);
+        if (empty($this->publicParams->appPublicKeyFile))
+        {
+            $key = $this->publicParams->appPublicKey;
+            $method = 'verifyPublic';
+        }
+        else
+        {
+            $key = $this->publicParams->appPublicKeyFile;
+            $method = 'verifyPublicFromFile';
+        }
+        switch ($this->publicParams->sign_type)
+        {
+            case 'DSA':
+                return \Yurun\PaySDK\Lib\Encrypt\DSA::$method($content, $key, base64_decode($data['sign']));
+            case 'RSA':
+                return \Yurun\PaySDK\Lib\Encrypt\RSA::$method($content, $key, base64_decode($data['sign']));
+            case 'MD5':
+                return $data['sign'] === md5($content . $this->publicParams->md5Key);
+            default:
+                throw new \Exception('未知的加密方式:' . $this->publicParams->sign_type);
+        }
+    }
+
+    /**
+     * 验证同步返回内容.
+     *
+     * @param AlipayRequestBase                        $params
+     * @param array                                    $data
+     * @param \Yurun\Util\YurunHttp\Http\Response|null $response
+     *
+     * @return bool
+     */
+    public function verifySync($params, $data, $response = null)
+    {
+        return true;
+    }
+
+    public function parseSignData($data)
+    {
+        unset($data['sign_type'], $data['sign']);
+        ksort($data);
+        $content = '';
+        foreach ($data as $k => $v)
+        {
+            if ('' !== $v && null !== $v && !\is_array($v))
+            {
+                $content .= $k . '=' . $v . '&';
+            }
+        }
+
+        return trim($content, '&');
+    }
+
+    /**
+     * 调用执行接口.
+     *
+     * @param mixed  $params
+     * @param string $method
+     *
+     * @return mixed
+     */
+    public function execute($params, $format = 'XML')
+    {
+        $result = parent::execute($params, $format);
+
+        return $result;
+    }
+
+    /**
+     * 检查是否执行成功
+     *
+     * @param array $result
+     *
+     * @return bool
+     */
+    protected function __checkResult($result)
+    {
+        return true;
+    }
+
+    /**
+     * 获取错误信息.
+     *
+     * @param array $result
+     *
+     * @return string
+     */
+    protected function __getError($result)
+    {
+        return '';
+    }
+
+    /**
+     * 获取错误代码
+     *
+     * @param array $result
+     *
+     * @return string
+     */
+    protected function __getErrorCode($result)
+    {
+        return '';
+    }
+}

+ 67 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/App/ExtUserInfo.php

@@ -0,0 +1,67 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\App;
+
+use Yurun\PaySDK\Traits\JSONParams;
+
+class ExtUserInfo
+{
+    use JSONParams;
+
+    /**
+     * 证件姓名
+     * need_check_info=T时该参数才有效.
+     *
+     * @var string
+     */
+    public $name;
+
+    /**
+     * 手机号
+     * 该参数暂不校验.
+     *
+     * @var string
+     */
+    public $mobile;
+
+    /**
+     * 身份证:IDENTITY_CARD、护照:PASSPORT、军官证:OFFICER_CARD、士兵证:SOLDIER_CARD、户口本:HOKOU等。如有其它类型需要支持,请与蚂蚁金服工作人员联系。
+     * 注: need_check_info=T时该参数才有效.
+     *
+     * @var string
+     */
+    public $cert_type;
+
+    /**
+     * 证件号
+     * need_check_info=T时该参数才有效.
+     *
+     * @var string
+     */
+    public $cert_no;
+
+    /**
+     * 允许的最小买家年龄,买家年龄必须大于等于所传数值
+     * 1. need_check_info=T时该参数才有效
+     * 2. min_age为整数,必须大于等于0.
+     *
+     * @var int
+     */
+    public $min_age;
+
+    /**
+     * 是否强制校验付款人身份信息
+     * T:强制校验,F:不强制.
+     *
+     * @var string
+     */
+    public $fix_buyer;
+
+    /**
+     * 是否强制校验身份信息
+     * T:强制校验,F:不强制.
+     *
+     * @var string
+     */
+    public $need_check_info;
+}

+ 143 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/App/Params/Pay/BusinessParams.php

@@ -0,0 +1,143 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\App\Params\Pay;
+
+/**
+ * 支付宝手机支付下单业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 订单描述.
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 订单标题.
+     *
+     * @var string
+     */
+    public $subject = '';
+
+    /**
+     * 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
+     * 该参数在请求到支付宝时开始计时。
+     *
+     * @var string
+     */
+    public $timeout_express;
+
+    /**
+     * 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000].
+     *
+     * @var float
+     */
+    public $total_amount = 0;
+
+    /**
+     * 销售产品码,与支付宝签约的产品码名称。 注:目前仅支持QUICK_WAP_WAY.
+     *
+     * @var string
+     */
+    public $product_code = 'QUICK_MSECURITY_PAY';
+
+    /**
+     * 商品主类型:0—虚拟类商品,1—实物类商品(默认).
+     *
+     * @var int
+     */
+    public $goods_type = 1;
+
+    /**
+     * 公用回传参数,如果请求时传递了该参数,则返回给商户时会回传该参数。支付宝只会在异步通知时将该参数原样返回。本参数必须进行UrlEncode之后才可以发送给支付宝.
+     *
+     * @var string
+     */
+    public $passback_params;
+
+    /**
+     * 优惠参数
+     * 注:仅与支付宝协商后可用.
+     *
+     * @var string
+     */
+    public $promo_params;
+
+    /**
+     * 业务扩展参数,详见业务扩展参数说明.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\App\Params\Pay\ExtendParams
+     */
+    public $extend_params;
+
+    /**
+     * 可用渠道,用户只能在指定渠道范围内支付
+     * 当有多个渠道时用“,”分隔
+     * 注:与disable_pay_channels互斥.
+     *
+     * @var string
+     */
+    public $enable_pay_channels;
+
+    /**
+     * 禁用渠道,用户不可用指定渠道支付
+     * 当有多个渠道时用“,”分隔
+     * 注:与enable_pay_channels互斥.
+     *
+     * @var string
+     */
+    public $disable_pay_channels;
+
+    /**
+     * 商户门店编号。该参数用于请求参数中以区分各门店,非必传项。
+     *
+     * @var string
+     */
+    public $store_id;
+
+    /**
+     * 外部指定买家.
+     *
+     * @var array
+     */
+    public $ext_user_info;
+
+    public function __construct()
+    {
+        $this->extend_params = new ExtendParams();
+    }
+
+    public function toString()
+    {
+        $obj = (array) $this;
+        $result = $obj['extend_params']->toArray();
+        if (null === $result)
+        {
+            unset($obj['extend_params']);
+        }
+        else
+        {
+            $obj['extend_params'] = $result;
+        }
+        foreach ($obj as $key => $value)
+        {
+            if (null === $value)
+            {
+                unset($obj[$key]);
+            }
+        }
+
+        return json_encode($obj);
+    }
+}

+ 57 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/App/Params/Pay/ExtendParams.php

@@ -0,0 +1,57 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\App\Params\Pay;
+
+/**
+ * 支付宝手机支付下单扩展参数类.
+ */
+class ExtendParams
+{
+    /**
+     * 系统商编号,该参数作为系统商返佣数据提取的依据,请填写系统商签约协议的PID.
+     *
+     * @var string
+     */
+    public $sys_service_provider_id;
+
+    /**
+     * 是否发起实名校验
+     * T:发起
+     * F:不发起.
+     *
+     * @var string
+     */
+    public $needBuyerRealnamed;
+
+    /**
+     * 账务备注
+     * 注:该字段显示在离线账单的账务备注中.
+     *
+     * @var string
+     */
+    public $TRANS_MEMO;
+
+    /**
+     * 花呗分期数(目前仅支持3、6、12).
+     *
+     * @var string
+     */
+    public $hb_fq_num;
+
+    /**
+     * 卖家承担收费比例,商家承担手续费传入100,用户承担手续费传入0,仅支持传入100、0两种,其他比例暂不支持
+     *
+     * @var string
+     */
+    public $hb_fq_seller_percent;
+
+    public function toArray()
+    {
+        if (null === $this->sys_service_provider_id && null === $this->hb_fq_num && null === $this->hb_fq_seller_percent && null === $this->needBuyerRealnamed && null === $this->TRANS_MEMO)
+        {
+            return null;
+        }
+
+        return (array) $this;
+    }
+}

+ 39 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/App/Params/Pay/Request.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\App\Params\Pay;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝手机支付下单请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.trade.app.pay';
+
+    /**
+     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/204/105465/.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\App\Params\Pay\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+    }
+}

+ 26 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/FTF/Params/ExtendParams.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\FTF\Params;
+
+/**
+ * 支付宝当面付扩展参数.
+ */
+class ExtendParams
+{
+    /**
+     * 系统商编号,该参数作为系统商返佣数据提取的依据,请填写系统商签约协议的PID.
+     *
+     * @var string
+     */
+    public $sys_service_provider_id;
+
+    public function toArray()
+    {
+        if (null === $this->sys_service_provider_id)
+        {
+            return null;
+        }
+
+        return (array) $this;
+    }
+}

+ 58 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/FTF/Params/GoodsDetail.php

@@ -0,0 +1,58 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\FTF\Params;
+
+/**
+ * 支付宝当面付商品详情.
+ */
+class GoodsDetail
+{
+    /**
+     * 商品的编号.
+     *
+     * @var string
+     */
+    public $goods_id;
+
+    /**
+     * 商品名称.
+     *
+     * @var string
+     */
+    public $goods_name;
+
+    /**
+     * 商品数量.
+     *
+     * @var int
+     */
+    public $quantity;
+
+    /**
+     * 商品单价,单位为元.
+     *
+     * @var float
+     */
+    public $price;
+
+    /**
+     * 商品类目.
+     *
+     * @var string
+     */
+    public $goods_category;
+
+    /**
+     * 商品描述信息.
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 商品的展示地址
+     *
+     * @var string
+     */
+    public $show_url;
+}

+ 164 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/FTF/Params/Pay/BusinessParams.php

@@ -0,0 +1,164 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\FTF\Params\Pay;
+
+use Yurun\PaySDK\AlipayApp\FTF\Params\ExtendParams;
+
+/**
+ * 支付宝统一收单交易支付接口业务参数.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 支付场景
+     * 条码支付,取值:bar_code
+     * 声波支付,取值:wave_code.
+     *
+     * @var string
+     */
+    public $scene;
+
+    /**
+     * 支付授权码,25~30开头的长度为16~24位的数字,实际字符串长度以开发者获取的付款码长度为准.
+     *
+     * @var string
+     */
+    public $auth_code;
+
+    /**
+     * 销售产品码,与支付宝签约的产品码名称。
+     *
+     * @var string
+     */
+    public $product_code = 'FACE_TO_FACE_PAYMENT';
+
+    /**
+     * 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000].
+     *
+     * @var float
+     */
+    public $total_amount = 0;
+
+    /**
+     * 参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]。
+     * 如果该值未传入,但传入了【订单总金额】和【不可打折金额】,则该值默认为【订单总金额】-【不可打折金额】.
+     *
+     * @var float
+     */
+    public $discountable_amount;
+
+    /**
+     * 订单标题.
+     *
+     * @var string
+     */
+    public $subject = '';
+
+    /**
+     * 买家的支付宝用户id,如果为空,会从传入了码值信息中获取买家ID.
+     *
+     * @var string
+     */
+    public $buyer_id;
+
+    /**
+     * 如果该值为空,则默认为商户签约账号对应的支付宝用户ID.
+     *
+     * @var string
+     */
+    public $seller_id;
+
+    /**
+     * 订单描述.
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 订单包含的商品列表信息.
+     *
+     * @var array<\Yurun\PaySDK\AlipayApp\FTF\Params\GoodsDetail>
+     */
+    public $goods_detail;
+
+    /**
+     * 业务扩展参数,详见业务扩展参数说明.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\FTF\Params\ExtendParams
+     */
+    public $extend_params;
+
+    /**
+     * 商户操作员编号.
+     *
+     * @var string
+     */
+    public $operator_id;
+
+    /**
+     * 商户门店编号.
+     *
+     * @var string
+     */
+    public $store_id;
+
+    /**
+     * 商户机具终端编号.
+     *
+     * @var string
+     */
+    public $terminal_id;
+
+    /**
+     * 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m.
+     *
+     * @var string
+     */
+    public $timeout_express;
+
+    public function __construct()
+    {
+        $this->extend_params = new ExtendParams();
+    }
+
+    public function toString()
+    {
+        $obj = (array) $this;
+        if (empty($obj['goods_detail']))
+        {
+            unset($obj['goods_detail']);
+        }
+        else
+        {
+            $obj['goods_detail'] = json_encode($obj['goods_detail']);
+        }
+        $result = $obj['extend_params']->toArray();
+        if (null === $result)
+        {
+            unset($obj['extend_params']);
+        }
+        else
+        {
+            $obj['extend_params'] = $result;
+        }
+        foreach ($obj as $key => $value)
+        {
+            if (null === $value)
+            {
+                unset($obj[$key]);
+            }
+        }
+
+        return json_encode($obj);
+    }
+}

+ 48 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/FTF/Params/Pay/Request.php

@@ -0,0 +1,48 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\FTF\Params\Pay;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝统一收单交易支付接口请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.trade.pay';
+
+    /**
+     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq.
+     *
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/api_1/alipay.trade.pay.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\FTF\Params\Pay\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->_syncResponseName = 'alipay_trade_pay_response';
+    }
+}

+ 134 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/FTF/Params/QR/BusinessParams.php

@@ -0,0 +1,134 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\FTF\Params\QR;
+
+use Yurun\PaySDK\AlipayApp\FTF\Params\ExtendParams;
+
+/**
+ * 支付宝统一收单线下交易预创建(扫码支付)业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000].
+     *
+     * @var float
+     */
+    public $total_amount = 0;
+
+    /**
+     * 参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]。
+     * 如果该值未传入,但传入了【订单总金额】和【不可打折金额】,则该值默认为【订单总金额】-【不可打折金额】.
+     *
+     * @var float
+     */
+    public $discountable_amount;
+
+    /**
+     * 订单标题.
+     *
+     * @var string
+     */
+    public $subject = '';
+
+    /**
+     * 如果该值为空,则默认为商户签约账号对应的支付宝用户ID.
+     *
+     * @var string
+     */
+    public $seller_id;
+
+    /**
+     * 订单描述.
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 订单包含的商品列表信息.
+     *
+     * @var array<\Yurun\PaySDK\AlipayApp\FTF\Params\GoodsDetail>
+     */
+    public $goods_detail;
+
+    /**
+     * 业务扩展参数,详见业务扩展参数说明.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\FTF\Params\ExtendParams
+     */
+    public $extend_params;
+
+    /**
+     * 商户操作员编号.
+     *
+     * @var string
+     */
+    public $operator_id;
+
+    /**
+     * 商户门店编号.
+     *
+     * @var string
+     */
+    public $store_id;
+
+    /**
+     * 商户机具终端编号.
+     *
+     * @var string
+     */
+    public $terminal_id;
+
+    /**
+     * 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m.
+     *
+     * @var string
+     */
+    public $timeout_express;
+
+    public function __construct()
+    {
+        $this->extend_params = new ExtendParams();
+    }
+
+    public function toString()
+    {
+        $obj = (array) $this;
+        if (empty($obj['goods_detail']))
+        {
+            unset($obj['goods_detail']);
+        }
+        else
+        {
+            $obj['goods_detail'] = json_encode($obj['goods_detail']);
+        }
+        $result = $obj['extend_params']->toArray();
+        if (null === $result)
+        {
+            unset($obj['extend_params']);
+        }
+        else
+        {
+            $obj['extend_params'] = $result;
+        }
+        foreach ($obj as $key => $value)
+        {
+            if (null === $value)
+            {
+                unset($obj[$key]);
+            }
+        }
+
+        return json_encode($obj);
+    }
+}

+ 48 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/FTF/Params/QR/Request.php

@@ -0,0 +1,48 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\FTF\Params\QR;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝统一收单线下交易预创建(扫码支付)请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.trade.precreate';
+
+    /**
+     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq.
+     *
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/api_1/alipay.trade.precreate/.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\FTF\Params\QR\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->_syncResponseName = 'alipay_trade_precreate_response';
+    }
+}

+ 25 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/Query/BusinessParams.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Fund\Query;
+
+/**
+ * 支付宝查询转账订单接口业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 商户转账唯一订单号。发起转账来源方定义的转账单据ID,用于将转账回执通知给来源方。
+     *
+     * @var string
+     */
+    public $out_biz_no;
+
+    /**
+     * 支付宝转账单据号:和商户转账唯一订单号不能同时为空。当和商户转账唯一订单号同时提供时,将用本参数进行查询,忽略商户转账唯一订单号。
+     *
+     * @var string
+     */
+    public $order_id;
+}

+ 39 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/Query/Request.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Fund\Query;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝查询转账订单接口请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.fund.trans.order.query';
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq.
+     *
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/api_28/alipay.fund.trans.order.query.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Fund\Query\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+    }
+}

+ 66 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/Transfer/BusinessParams.php

@@ -0,0 +1,66 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Fund\Transfer;
+
+/**
+ * 支付宝单笔转账到支付宝账户接口业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 商户转账唯一订单号。发起转账来源方定义的转账单据ID,用于将转账回执通知给来源方。
+     *
+     * @var string
+     */
+    public $out_biz_no;
+
+    /**
+     * 收款方账户类型。可取值:
+     * ALIPAY_USERID:支付宝账号对应的支付宝唯一用户号。以2088开头的16位纯数字组成。
+     * ALIPAY_LOGONID:支付宝登录号,支持邮箱和手机号格式。
+     *
+     * @var string
+     */
+    public $payee_type;
+
+    /**
+     * 收款方账户。与payee_type配合使用。付款方和收款方不能是同一个账户。
+     *
+     * @var string
+     */
+    public $payee_account;
+
+    /**
+     * 转账金额,单位:元。
+     * 只支持2位小数,小数点前最大支持13位,金额必须大于等于0.1元。
+     * 最大转账金额以实际签约的限额为准。
+     *
+     * @var string
+     */
+    public $amount;
+
+    /**
+     * 付款方姓名(最长支持100个英文/50个汉字)。显示在收款方的账单详情页。如果该字段不传,则默认显示付款方的支付宝认证姓名或单位名称。
+     *
+     * @var string
+     */
+    public $payer_show_name;
+
+    /**
+     * 收款方真实姓名(最长支持100个英文/50个汉字)。
+     * 如果本参数不为空,则会校验该账户在支付宝登记的实名是否与收款方真实姓名一致。
+     *
+     * @var string
+     */
+    public $payee_real_name;
+
+    /**
+     * 转账备注(支持200个英文/100个汉字)。
+     * 当付款方为企业账户,且转账金额达到(大于等于)50000元,remark不能为空。收款方可见,会展示在收款用户的收支详情中。
+     *
+     * @var string
+     */
+    public $remark;
+}

+ 39 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/Transfer/Request.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Fund\Transfer;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝单笔转账到支付宝账户接口请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.fund.trans.toaccount.transfer';
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq.
+     *
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://opendocs.alipay.com/apis/api_33/alipay.fund.trans.toaccount.transfer.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Fund\Transfer\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+    }
+}

+ 93 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/UniTransfer/BusinessParams.php

@@ -0,0 +1,93 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Fund\UniTransfer;
+
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 商家侧唯一订单号,由商家自定义。对于不同转账请求,商家需保证该订单号在自身系统唯一。
+     * @var string
+     */
+    public $out_biz_no;
+
+    /**
+     * 订单总金额,单位为元,精确到小数点后两位,STD_RED_PACKET产品取值范围[0.01,100000000];
+     * TRANS_ACCOUNT_NO_PWD产品取值范围[0.1,100000000]
+     * @var string
+     */
+    public $trans_amount;
+
+    /**
+     * 业务产品码,
+     * 单笔无密转账到支付宝账户固定为:TRANS_ACCOUNT_NO_PWD;
+     *  收发现金红包固定为:STD_RED_PACKET;
+     * @var string
+     */
+    public $product_code;
+
+    /**
+     * 描述特定的业务场景,可传的参数如下:
+     * DIRECT_TRANSFER:单笔无密转账到支付宝,B2C现金红包;
+     * PERSONAL_COLLECTION:C2C现金红包-领红包
+     * @var string
+     */
+    public $biz_scene;
+
+    /**
+     * 转账业务的标题,用于在支付宝用户的账单里显示
+     * @var string
+     */
+    public $order_title;
+
+    /**
+     * 原支付宝业务单号。C2C现金红包-红包领取时,传红包支付时返回的支付宝单号;B2C现金红包、单笔无密转账到支付宝不需要该参数。
+     * @var string
+     */
+    public $original_order_id;
+
+    /**
+     * 收款方信息
+     * @var array<\Yurun\PaySDK\AlipayApp\Fund\UniTransfer\PayeeInfoParams>
+     */
+    public $payee_info = array();
+
+    /**
+     * 业务备注
+     * @var string
+     */
+    public $remark;
+
+    /**
+     * 转账业务请求的扩展参数,支持传入的扩展参数如下:
+     * sub_biz_scene 子业务场景,红包业务必传,取值REDPACKET,C2C现金红包、B2C现金红包均需传入
+     * @return array
+     */
+    public $business_params = array();
+
+    public function toString()
+    {
+        $obj = (array)$this;
+
+        if (empty($obj['payee_info'])) {
+            unset($obj['payee_info']);
+        } else {
+            $obj['payee_info'] = \json_encode($obj['payee_info']);
+        }
+
+        if (empty($obj['business_params'])) {
+            unset($obj['business_params']);
+        } else {
+            $obj['business_params'] = \json_encode($obj['business_params']);
+        }
+
+        foreach ($obj as $key => $value) {
+            if (null === $value) {
+                unset($obj[$key]);
+            }
+        }
+
+        return \json_encode($obj);
+    }
+}

+ 26 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/UniTransfer/PayeeInfoParams.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Fund\UniTransfer;
+
+class PayeeInfoParams
+{
+    /**
+     * 参与方的唯一标识
+     * @var string
+     */
+    public $identity;
+
+    /**
+     * 参与方的标识类型,目前支持如下类型:
+     * 1、ALIPAY_USER_ID 支付宝的会员ID
+     * 2、ALIPAY_LOGON_ID:支付宝登录号,支持邮箱和手机号格式
+     * @var string
+     */
+    public $identity_type;
+
+    /**
+     * 参与方真实姓名,如果非空,将校验收款支付宝账号姓名一致性。当identity_type=ALIPAY_LOGON_ID时,本字段必填。
+     * @var string
+     */
+    public $name;
+}

+ 34 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Fund/UniTransfer/Request.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Fund\UniTransfer;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称
+     * @link https://opendocs.alipay.com/open/01dtld
+     * @var string
+     */
+    public $method = 'alipay.fund.trans.uni.transfer';
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://opendocs.alipay.com/apis/api_28/alipay.fund.trans.uni.transfer
+     * @var \Yurun\PaySDK\AlipayApp\Fund\UniTransfer\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams;
+        $this->_method = 'GET';
+    }
+}

+ 190 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/MiniApp/Params/Pay/BusinessParams.php

@@ -0,0 +1,190 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\MiniApp\Params\Pay;
+
+/**
+ * 支付宝小程序支付下单业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 订单描述.
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 订单标题.
+     *
+     * @var string
+     */
+    public $subject = '';
+
+    /**
+     * 买家的支付宝唯一用户号(2088开头的16位纯数字)
+     * 特殊可选.
+     *
+     * @var string
+     */
+    public $buyer_id = '';
+
+    /**
+     * 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 卖家支付宝用户ID。
+     * 如果该值为空,则默认为商户签约账号对应的支付宝用户ID.
+     *
+     * @var string
+     */
+    public $seller_id;
+
+    /**
+     * 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
+     * 该参数在请求到支付宝时开始计时。
+     *
+     * @var string
+     */
+    public $timeout_express;
+
+    /**
+     * 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000].
+     *
+     * @var float
+     */
+    public $total_amount = 0;
+
+    /**
+     * 可打折金额.
+     * 参与优惠计算的金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
+     * 如果该值未传入,但传入了【订单总金额】,【不可打折金额】则该值默认为【订单总金额】-【不可打折金额】.
+     *
+     * @var float
+     */
+    public $discountable_amount;
+
+    /**
+     * 销售产品码。
+     * 如果签约的是当面付快捷版,则传OFFLINE_PAYMENT;
+     * 其它支付宝当面付产品传FACE_TO_FACE_PAYMENT;
+     * 不传默认使用FACE_TO_FACE_PAYMENT;.
+     *
+     * @var string
+     */
+    public $product_code = 'FACE_TO_FACE_PAYMENT';
+
+    /**
+     * 业务扩展参数,详见业务扩展参数说明.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\MiniApp\Params\Pay\ExtendParams
+     */
+    public $extend_params;
+
+    /**
+     * 商户操作员编号.
+     *
+     * @var string
+     */
+    public $operator_id;
+
+    /**
+     * 商户门店编号。该参数用于请求参数中以区分各门店,非必传项。
+     *
+     * @var string
+     */
+    public $store_id;
+
+    /**
+     * 商户机具终端编号.
+     *
+     * @var string
+     */
+    public $terminal_id;
+
+    /**
+     * 描述结算信息,json格式,详见结算参数说明.
+     *
+     * @var array
+     */
+    public $settle_info;
+
+    /**
+     * 物流信息.
+     *
+     * @var array
+     */
+    public $logistics_detail;
+
+    /**
+     * 商户传入业务信息,具体值要和支付宝约定,应用于安全,营销等参数直传场景,格式为json格式.
+     *
+     * @var array
+     */
+    public $business_params;
+
+    /**
+     * 收货人及地址信息.
+     *
+     * @var array
+     */
+    public $receiver_address_info;
+
+    public function __construct()
+    {
+        $this->extend_params = new ExtendParams();
+    }
+
+    public function toString()
+    {
+        $obj = (array) $this;
+        $result = $obj['extend_params']->toArray();
+        if (null === $result)
+        {
+            unset($obj['extend_params']);
+        }
+        else
+        {
+            $obj['extend_params'] = $result;
+        }
+        if (null === $obj['logistics_detail'])
+        {
+            unset($obj['logistics_detail']);
+        }
+        else
+        {
+            $obj['logistics_detail'] = json_encode($obj['logistics_detail']);
+        }
+        if (null === $obj['business_params'])
+        {
+            unset($obj['business_params']);
+        }
+        else
+        {
+            $obj['business_params'] = json_encode($obj['business_params']);
+        }
+        if (null === $obj['receiver_address_info'])
+        {
+            unset($obj['receiver_address_info']);
+        }
+        else
+        {
+            $obj['receiver_address_info'] = json_encode($obj['receiver_address_info']);
+        }
+        foreach ($obj as $key => $value)
+        {
+            if (null === $value)
+            {
+                unset($obj[$key]);
+            }
+        }
+
+        return json_encode($obj);
+    }
+}

+ 33 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/MiniApp/Params/Pay/ExtendParams.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\MiniApp\Params\Pay;
+
+/**
+ * 业务扩展参数.
+ */
+class ExtendParams
+{
+    /**
+     * 系统商编号,该参数作为系统商返佣数据提取的依据,请填写系统商签约协议的PID.
+     *
+     * @var string
+     */
+    public $sys_service_provider_id;
+
+    /**
+     * 卡类型.
+     *
+     * @var string
+     */
+    public $card_type;
+
+    public function toArray()
+    {
+        if (null === $this->sys_service_provider_id && null === $this->card_type)
+        {
+            return null;
+        }
+
+        return (array) $this;
+    }
+}

+ 46 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/MiniApp/Params/Pay/Request.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\MiniApp\Params\Pay;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝小程序支付下单请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.trade.create';
+
+    /**
+     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq.
+     *
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/204/105465/.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\MiniApp\Params\Pay\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+    }
+}

+ 26 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Page/Params/GoodsDetail.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Page\Params;
+
+/**
+ * 支付宝PC场景下单并支付商品详情类.
+ */
+class GoodsDetail
+{
+    /**
+     * 在支付时,可点击商品名称跳转到该地址
+     *
+     * @var string
+     */
+    public $show_url;
+
+    public function toArray()
+    {
+        if (null === $this->show_url)
+        {
+            return null;
+        }
+
+        return (array) $this;
+    }
+}

+ 169 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Page/Params/Pay/BusinessParams.php

@@ -0,0 +1,169 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Page\Params\Pay;
+
+use Yurun\PaySDK\AlipayApp\Page\Params\GoodsDetail;
+
+/**
+ * 支付宝PC场景下单并支付业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 销售产品码,与支付宝签约的产品码名称。 注:目前仅支持FAST_INSTANT_TRADE_PAY.
+     *
+     * @var string
+     */
+    public $product_code = 'FAST_INSTANT_TRADE_PAY';
+
+    /**
+     * 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000].
+     *
+     * @var float
+     */
+    public $total_amount = 0;
+
+    /**
+     * 订单标题.
+     *
+     * @var string
+     */
+    public $subject = '';
+
+    /**
+     * 订单描述.
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 订单包含的商品列表信息,Json格式: {"show_url":"https://或http://打头的商品的展示地址"} ,在支付时,可点击商品名称跳转到该地址
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Page\Params\GoodsDetail
+     */
+    public $goods_detail;
+
+    /**
+     * 公用回传参数,如果请求时传递了该参数,则返回给商户时会回传该参数。支付宝只会在异步通知时将该参数原样返回。本参数必须进行UrlEncode之后才可以发送给支付宝.
+     *
+     * @var string
+     */
+    public $passback_params;
+
+    /**
+     * 业务扩展参数,详见业务扩展参数说明.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Page\Params\Pay\ExtendParams
+     */
+    public $extend_params;
+
+    /**
+     * 商品主类型:0—虚拟类商品,1—实物类商品(默认).
+     *
+     * @var int
+     */
+    public $goods_type = 1;
+
+    /**
+     * 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
+     * 该参数在请求到支付宝时开始计时。
+     *
+     * @var string
+     */
+    public $timeout_express;
+
+    /**
+     * 可用渠道,用户只能在指定渠道范围内支付
+     * 当有多个渠道时用“,”分隔
+     * 注:与disable_pay_channels互斥.
+     *
+     * @var string
+     */
+    public $enable_pay_channels;
+
+    /**
+     * 禁用渠道,用户不可用指定渠道支付
+     * 当有多个渠道时用“,”分隔
+     * 注:与enable_pay_channels互斥.
+     *
+     * @var string
+     */
+    public $disable_pay_channels;
+
+    /**
+     * 获取用户授权信息,可实现如免登功能。获取方法请查阅:用户信息授权.
+     *
+     * @var string
+     */
+    public $auth_token;
+
+    /**
+     * PC扫码支付的方式,支持前置模式和跳转模式。
+     * 前置模式是将二维码前置到商户的订单确认页的模式。需要商户在自己的页面中以iframe方式请求支付宝页面。具体分为以下几种:
+     * 0:订单码-简约前置模式,对应iframe宽度不能小于600px,高度不能小于300px;
+     * 1:订单码-前置模式,对应iframe宽度不能小于300px,高度不能小于600px;
+     * 3:订单码-迷你前置模式,对应iframe宽度不能小于75px,高度不能小于75px;
+     * 4:订单码-可定义宽度的嵌入式二维码,商户可根据需要设定二维码的大小。
+     * 跳转模式下,用户的扫码界面是由支付宝生成的,不在商户的域名下。
+     * 2:订单码-跳转模式.
+     *
+     * @var int
+     */
+    public $qr_pay_mode = 2;
+
+    /**
+     * 商户自定义二维码宽度
+     * 注:qr_pay_mode=4时该参数生效.
+     *
+     * @var int
+     */
+    public $qrcode_width;
+
+    public function __construct()
+    {
+        $this->goods_detail = new GoodsDetail();
+        $this->extend_params = new ExtendParams();
+    }
+
+    public function toString()
+    {
+        $obj = (array) $this;
+        $result = $obj['goods_detail']->toArray();
+        if (null === $result)
+        {
+            unset($obj['goods_detail']);
+        }
+        else
+        {
+            $obj['goods_detail'] = $result;
+        }
+        $result = $obj['extend_params']->toArray();
+        if (null === $result)
+        {
+            unset($obj['extend_params']);
+        }
+        else
+        {
+            $obj['extend_params'] = $result;
+        }
+        foreach ($obj as $key => $value)
+        {
+            if (null === $value)
+            {
+                unset($obj[$key]);
+            }
+        }
+
+        return json_encode($obj);
+    }
+}

+ 40 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Page/Params/Pay/ExtendParams.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Page\Params\Pay;
+
+/**
+ * 支付宝PC场景下单并支付扩展参数类.
+ */
+class ExtendParams
+{
+    /**
+     * 系统商编号,该参数作为系统商返佣数据提取的依据,请填写系统商签约协议的PID.
+     *
+     * @var string
+     */
+    public $sys_service_provider_id;
+
+    /**
+     * 花呗分期数(目前仅支持3、6、12).
+     *
+     * @var string
+     */
+    public $hb_fq_num;
+
+    /**
+     * 卖家承担收费比例,商家承担手续费传入100,用户承担手续费传入0,仅支持传入100、0两种,其他比例暂不支持
+     *
+     * @var string
+     */
+    public $hb_fq_seller_percent;
+
+    public function toArray()
+    {
+        if (null === $this->sys_service_provider_id && null === $this->hb_fq_num && null === $this->hb_fq_seller_percent)
+        {
+            return null;
+        }
+
+        return (array) $this;
+    }
+}

+ 46 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Page/Params/Pay/Request.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Page\Params\Pay;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝PC场景下单并支付请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.trade.page.pay';
+
+    /**
+     * 同步返回地址,HTTP/HTTPS开头字符串.
+     *
+     * @var string
+     */
+    public $return_url;
+
+    /**
+     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/270/alipay.trade.page.pay.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Page\Params\Pay\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+    }
+}

+ 26 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Cancel/BusinessParams.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\Cancel;
+
+/**
+ * 支付宝取消订单业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 订单支付时传入的商户订单号,和支付宝交易号不能同时为空。
+     * trade_no,out_trade_no如果同时存在优先取trade_no.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 支付宝交易号,和商户订单号不能同时为空.
+     *
+     * @var string
+     */
+    public $trade_no;
+}

+ 41 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Cancel/Request.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\Cancel;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝取消订单请求参数类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.trade.cancel';
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq.
+     *
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/api_1/alipay.trade.cancel.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Params\Cancel\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->_syncResponseName = 'alipay_trade_cancel_response';
+    }
+}

+ 26 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Close/BusinessParams.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\Close;
+
+/**
+ * 支付宝关闭订单业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 订单支付时传入的商户订单号,和支付宝交易号不能同时为空。
+     * trade_no,out_trade_no如果同时存在优先取trade_no.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 支付宝交易号,和商户订单号不能同时为空.
+     *
+     * @var string
+     */
+    public $trade_no;
+}

+ 41 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Close/Request.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\Close;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝关闭订单请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.trade.close';
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq.
+     *
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/api_1/alipay.trade.close.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Params\Close\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->_syncResponseName = 'alipay_trade_close_response';
+    }
+}

+ 27 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/DownloadBill/BusinessParams.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\DownloadBill;
+
+/**
+ * 支付宝查询对账单业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 账单类型,商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型:trade、signcustomer;
+     * trade指商户基于支付宝交易收单的业务账单;
+     * signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单;.
+     *
+     * @var string
+     */
+    public $bill_type;
+
+    /**
+     * 账单时间:日账单格式为yyyy-MM-dd,月账单格式为yyyy-MM。
+     *
+     * @var string
+     */
+    public $bill_date;
+}

+ 41 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/DownloadBill/Request.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\DownloadBill;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝查询对账单请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.data.dataservice.bill.downloadurl.query';
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq.
+     *
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/api_15/alipay.data.dataservice.bill.downloadurl.query.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Params\DownloadBill\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->_syncResponseName = 'alipay_data_dataservice_bill_downloadurl_query_response';
+    }
+}

+ 115 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/PublicParams.php

@@ -0,0 +1,115 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params;
+
+use Yurun\PaySDK\PublicBase;
+
+/**
+ * 支付宝开放平台接口公共参数类.
+ */
+class PublicParams extends PublicBase
+{
+    /**
+     * 仅支持JSON.
+     *
+     * @var string
+     */
+    public $format = 'json';
+
+    /**
+     * 请求使用的编码格式,如utf-8,gbk,gb2312等.
+     *
+     * @var string
+     */
+    public $charset = 'utf-8';
+
+    /**
+     * 商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2。
+     * RSA2需要PHP版本>=5.4.8下才可使用。
+     *
+     * @var string
+     */
+    public $sign_type = 'RSA2';
+
+    /**
+     * 调用的接口版本,固定为:1.0.
+     *
+     * @var string
+     */
+    public $version = '1.0';
+
+    /**
+     * 私有证书文件内容.
+     *
+     * @var string
+     */
+    public $appPrivateKey;
+
+    /**
+     * 私有证书文件地址,不为空时优先使用文件地址
+     *
+     * @var string
+     */
+    public $appPrivateKeyFile;
+
+    /**
+     * 公有证书文件内容.
+     *
+     * @var string
+     */
+    public $appPublicKey;
+
+    /**
+     * 公有证书文件地址,不为空时优先使用文件地址
+     *
+     * @var string
+     */
+    public $appPublicKeyFile;
+
+    /**
+     * 是否使用AES加密解密数据.
+     *
+     * @var bool
+     */
+    public $isUseAES = false;
+
+    /**
+     * AES密钥.
+     *
+     * @var string
+     */
+    public $aesKey;
+
+    /**
+     * 是否使用公钥证书模式.
+     *
+     * @var bool
+     */
+    public $usePublicKeyCert = false;
+
+    /**
+     * 支付宝公钥证书文件路径.
+     *
+     * @var string
+     */
+    public $alipayCertPath;
+
+    /**
+     * 支付宝根证书文件路径.
+     *
+     * @var string
+     */
+    public $alipayRootCertPath;
+
+    /**
+     * 支付宝应用公钥证书文件路径.
+     *
+     * @var string
+     */
+    public $merchantCertPath;
+
+    public function __construct()
+    {
+        $this->apiDomain = 'https://openapi.alipay.com/gateway.do';
+    }
+}

+ 26 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Query/BusinessParams.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\Query;
+
+/**
+ * 支付宝统一收单线下交易查询业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 订单支付时传入的商户订单号,和支付宝交易号不能同时为空。
+     * trade_no,out_trade_no如果同时存在优先取trade_no.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 支付宝交易号,和商户订单号不能同时为空.
+     *
+     * @var string
+     */
+    public $trade_no;
+}

+ 41 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Query/Request.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\Query;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝统一收单线下交易查询请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.trade.query';
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq.
+     *
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/api_1/alipay.trade.query.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Params\Query\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->_syncResponseName = 'alipay_trade_query_response';
+    }
+}

+ 68 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Refund/BusinessParams.php

@@ -0,0 +1,68 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\Refund;
+
+/**
+ * 支付宝统一收单交易退款接口业务参数.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 订单支付时传入的商户订单号,和支付宝交易号不能同时为空。
+     * trade_no,out_trade_no如果同时存在优先取trade_no.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 支付宝交易号,和商户订单号不能同时为空.
+     *
+     * @var string
+     */
+    public $trade_no;
+
+    /**
+     * 需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数.
+     *
+     * @var float
+     */
+    public $refund_amount;
+
+    /**
+     * 退款的原因说明.
+     *
+     * @var string
+     */
+    public $refund_reason;
+
+    /**
+     * 标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传。
+     *
+     * @var string
+     */
+    public $out_request_no;
+
+    /**
+     * 商户的操作员编号.
+     *
+     * @var string
+     */
+    public $operator_id;
+
+    /**
+     * 商户的门店编号.
+     *
+     * @var string
+     */
+    public $store_id;
+
+    /**
+     * 商户的终端编号.
+     *
+     * @var string
+     */
+    public $terminal_id;
+}

+ 41 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Refund/Request.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\Refund;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝统一收单交易退款接口请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.trade.refund';
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq.
+     *
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/api_1/alipay.trade.refund.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Params\Refund\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->_syncResponseName = 'alipay_trade_refund_response';
+    }
+}

+ 33 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/RefundQuery/BusinessParams.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\RefundQuery;
+
+/**
+ * 支付宝统一收单交易退款查询业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 支付宝交易号,和商户订单号不能同时为空.
+     *
+     * @var string
+     */
+    public $trade_no;
+
+    /**
+     * 订单支付时传入的商户订单号,和支付宝交易号不能同时为空。
+     * trade_no,out_trade_no如果同时存在优先取trade_no.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 请求退款接口时,传入的退款请求号,如果在退款请求时未传入,则该值为创建交易时的外部交易号.
+     *
+     * @var string
+     */
+    public $out_request_no;
+}

+ 41 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/RefundQuery/Request.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\RefundQuery;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝统一收单交易退款查询请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.trade.fastpay.refund.query';
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq.
+     *
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/api_1/alipay.trade.fastpay.refund.query/.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Params\RefundQuery\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->_syncResponseName = 'alipay_trade_fastpay_refund_query_response';
+    }
+}

+ 54 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Settle/BusinessParams.php

@@ -0,0 +1,54 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\Settle;
+
+/**
+ * 支付宝统一收单交易结算接口业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 结算请求流水号 开发者自行生成并保证唯一性.
+     *
+     * @var string
+     */
+    public $out_request_no;
+
+    /**
+     * 支付宝订单号.
+     *
+     * @var string
+     */
+    public $trade_no;
+
+    /**
+     * 分账明细信息.
+     *
+     * @var array<\Yurun\PaySDK\AlipayApp\Params\Settle\RoyaltyParameter>
+     */
+    public $royalty_parameters = [];
+
+    /**
+     * 操作员id.
+     *
+     * @var string
+     */
+    public $operator_id;
+
+    public function toString()
+    {
+        $obj = (array) $this;
+        if (empty($obj['royalty_parameters']))
+        {
+            unset($obj['royalty_parameters']);
+        }
+        else
+        {
+            $obj['royalty_parameters'] = json_encode($obj['royalty_parameters']);
+        }
+
+        return json_encode($obj);
+    }
+}

+ 41 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Settle/Request.php

@@ -0,0 +1,41 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\Settle;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝统一收单交易结算接口请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.trade.order.settle';
+
+    /**
+     * 详见:https://opendocs.alipay.com/isv/10467/xldcyq.
+     *
+     * @var string
+     */
+    public $app_auth_token;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/api_1/alipay.trade.order.settle/.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Params\Settle\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->_syncResponseName = 'alipay_trade_order_settle_response';
+    }
+}

+ 44 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Params/Settle/RoyaltyParameter.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Params\Settle;
+
+/**
+ * 支付宝统一收单交易结算接口-分账明细信息类.
+ */
+class RoyaltyParameter
+{
+    /**
+     * 分账支出方账户,类型为userId,本参数为要分账的支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。
+     *
+     * @var string
+     */
+    public $trans_out;
+
+    /**
+     * 分账收入方账户,类型为userId,本参数为要分账的支付宝账号对应的支付宝唯一用户号。以2088开头的纯16位数字。
+     *
+     * @var string
+     */
+    public $trans_in;
+
+    /**
+     * 分账的金额,单位为元.
+     *
+     * @var float
+     */
+    public $amount;
+
+    /**
+     * 分账信息中分账百分比。取值范围为大于0,少于或等于100的整数。
+     *
+     * @var float
+     */
+    public $amount_percentage;
+
+    /**
+     * 分账描述.
+     *
+     * @var string
+     */
+    public $desc;
+}

+ 309 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/SDK.php

@@ -0,0 +1,309 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp;
+
+use Yurun\PaySDK\Base;
+use Yurun\PaySDK\Lib\CertUtil;
+use Yurun\PaySDK\Lib\Encrypt\AES;
+use Yurun\PaySDK\Lib\ObjectToArray;
+
+/**
+ * 支付宝开放平台SDK类.
+ */
+class SDK extends Base
+{
+    /**
+     * 公共参数.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Params\PublicParams
+     */
+    public $publicParams;
+
+    /**
+     * 支付宝公钥证书SN.
+     *
+     * @var string
+     */
+    public $alipayCertSn;
+
+    /**
+     * 应用公钥证书SN.
+     *
+     * @var string
+     */
+    public $appCertSn;
+
+    /**
+     * 支付宝根证书SN.
+     *
+     * @var string
+     */
+    public $alipayRootCertSn;
+
+    /**
+     * __construct.
+     *
+     * @param \Yurun\PaySDK\AlipayApp\Params\PublicParams $publicParams
+     */
+    public function __construct($publicParams)
+    {
+        parent::__construct($publicParams);
+        if ($publicParams->usePublicKeyCert)
+        {
+            $this->alipayCertSn = CertUtil::getCertSN($publicParams->alipayCertPath);
+            $this->appCertSn = CertUtil::getCertSN($publicParams->merchantCertPath);
+            $this->alipayRootCertSn = CertUtil::getRootCertSN($publicParams->alipayRootCertPath);
+        }
+    }
+
+    /**
+     * 处理执行接口的数据.
+     *
+     * @param $params
+     * @param &$data 数据数组
+     * @param &$requestData 请求用的数据,格式化后的
+     * @param &$url 请求地址
+     *
+     * @return array
+     */
+    public function __parseExecuteData($params, &$data, &$requestData, &$url)
+    {
+        $data = array_merge(ObjectToArray::parse($this->publicParams), ObjectToArray::parse($params));
+        unset($data['apiDomain'], $data['appID'], $data['businessParams'], $data['appPrivateKey'], $data['appPrivateKeyFile'], $data['appPublicKey'], $data['appPublicKeyFile'], $data['_syncResponseName'], $data['_method'], $data['_isSyncVerify'], $data['aesKey'], $data['isUseAES'], $data['alipayCertPath'], $data['alipayRootCertPath'], $data['merchantCertPath'], $data['usePublicKeyCert'], $data['_contentType']);
+        $data['app_id'] = $this->publicParams->appID;
+        $data['biz_content'] = $params->businessParams->toString();
+        if ($this->publicParams->isUseAES)
+        {
+            $data['biz_content'] = AES::encrypt($data['biz_content'], base64_decode($this->publicParams->aesKey));
+        }
+        // 公钥证书参数
+        if ($this->publicParams->usePublicKeyCert)
+        {
+            $data['app_cert_sn'] = $this->appCertSn;
+            $data['alipay_root_cert_sn'] = $this->alipayRootCertSn;
+        }
+        $data['timestamp'] = date('Y-m-d H:i:s');
+        $data['sign'] = $this->sign($data);
+        $requestData = $data;
+        $url = $this->publicParams->apiDomain;
+    }
+
+    /**
+     * 签名.
+     *
+     * @param $data
+     *
+     * @return string
+     */
+    public function sign($data)
+    {
+        $content = $this->parseSignData($data);
+        if (empty($this->publicParams->appPrivateKeyFile))
+        {
+            $key = $this->publicParams->appPrivateKey;
+            $method = 'signPrivate';
+        }
+        else
+        {
+            $key = $this->publicParams->appPrivateKeyFile;
+            $method = 'signPrivateFromFile';
+        }
+        switch ($this->publicParams->sign_type)
+        {
+            case 'RSA':
+                $result = \Yurun\PaySDK\Lib\Encrypt\RSA::$method($content, $key);
+                break;
+            case 'RSA2':
+                $result = \Yurun\PaySDK\Lib\Encrypt\RSA2::$method($content, $key);
+                break;
+            default:
+                throw new \Exception('未知的加密方式:' . $this->publicParams->sign_type);
+        }
+
+        return base64_encode($result);
+    }
+
+    /**
+     * 验证回调通知是否合法.
+     *
+     * @param $data
+     *
+     * @return bool
+     */
+    public function verifyCallback($data)
+    {
+        if (!isset($data['sign'], $data['sign_type']))
+        {
+            return false;
+        }
+        $signType = $data['sign_type'];
+        unset($data['sign_type']);
+        $content = $this->parseSignData($data);
+        if (empty($this->publicParams->appPublicKeyFile))
+        {
+            $key = $this->publicParams->appPublicKey;
+            $method = 'verifyPublic';
+        }
+        else
+        {
+            $key = $this->publicParams->appPublicKeyFile;
+            $method = 'verifyPublicFromFile';
+        }
+        switch ($signType)
+        {
+            case 'RSA':
+                return \Yurun\PaySDK\Lib\Encrypt\RSA::$method($content, $key, base64_decode($data['sign']));
+            case 'RSA2':
+                return \Yurun\PaySDK\Lib\Encrypt\RSA2::$method($content, $key, base64_decode($data['sign']));
+            default:
+                throw new \Exception('未知的加密方式:' . $signType);
+        }
+    }
+
+    /**
+     * 验证同步返回内容.
+     *
+     * @param AlipayRequestBase                        $params
+     * @param array                                    $data
+     * @param \Yurun\Util\YurunHttp\Http\Response|null $response
+     *
+     * @return bool
+     */
+    public function verifySync($params, $data, $response = null)
+    {
+        if (!isset($data['sign']))
+        {
+            return true;
+        }
+        // 公钥证书验证
+        if ($this->publicParams->usePublicKeyCert && $this->alipayCertSn !== (isset($data['alipay_cert_sn']) ? $data['alipay_cert_sn'] : null))
+        {
+            return false;
+        }
+        $content = json_encode($data[$params->_syncResponseName], \JSON_UNESCAPED_UNICODE);
+        if (empty($this->publicParams->appPublicKeyFile))
+        {
+            $key = $this->publicParams->appPublicKey;
+            $method = 'verifyPublic';
+        }
+        else
+        {
+            $key = $this->publicParams->appPublicKeyFile;
+            $method = 'verifyPublicFromFile';
+        }
+        switch ($this->publicParams->sign_type)
+        {
+            case 'RSA':
+                return \Yurun\PaySDK\Lib\Encrypt\RSA::$method($content, $key, base64_decode($data['sign']));
+            case 'RSA2':
+                return \Yurun\PaySDK\Lib\Encrypt\RSA2::$method($content, $key, base64_decode($data['sign']));
+            default:
+                throw new \Exception('未知的加密方式:' . $this->publicParams->sign_type);
+        }
+    }
+
+    public function parseSignData($data)
+    {
+        unset($data['sign']);
+        ksort($data);
+        $content = '';
+        foreach ($data as $k => $v)
+        {
+            if ('' !== $v && null !== $v && !\is_array($v))
+            {
+                $content .= $k . '=' . $v . '&';
+            }
+        }
+
+        return trim($content, '&');
+    }
+
+    /**
+     * 调用执行接口.
+     *
+     * @param mixed  $params
+     * @param string $method
+     *
+     * @return mixed
+     */
+    public function execute($params, $format = 'JSON')
+    {
+        $result = parent::execute($params, $format);
+        if ($this->publicParams->isUseAES && isset($result[$params->_syncResponseName]))
+        {
+            $result[$params->_syncResponseName] = json_decode(AES::decrypt($result[$params->_syncResponseName], base64_decode($this->publicParams->aesKey)), true);
+        }
+
+        return $result;
+    }
+
+    /**
+     * 检查是否执行成功
+     *
+     * @param array $result
+     *
+     * @return bool
+     */
+    protected function __checkResult($result)
+    {
+        if (!\is_array($result))
+        {
+            return false;
+        }
+        $result = reset($result);
+
+        return isset($result['code']) && 10000 == $result['code'] && !isset($result['sub_code']);
+    }
+
+    /**
+     * 获取错误信息.
+     *
+     * @param array $result
+     *
+     * @return string
+     */
+    protected function __getError($result)
+    {
+        if (!\is_array($result))
+        {
+            return '';
+        }
+        $result = reset($result);
+        if (isset($result['sub_code']))
+        {
+            return $result['sub_msg'];
+        }
+        if (isset($result['code']) && 10000 != $result['code'])
+        {
+            return $result['msg'];
+        }
+
+        return '';
+    }
+
+    /**
+     * 获取错误代码
+     *
+     * @param array $result
+     *
+     * @return string
+     */
+    protected function __getErrorCode($result)
+    {
+        if (!\is_array($result))
+        {
+            return '';
+        }
+        $result = reset($result);
+        if (isset($result['sub_code']))
+        {
+            return $result['sub_code'];
+        }
+        if (isset($result['code']) && 10000 != $result['code'])
+        {
+            return $result['code'];
+        }
+
+        return '';
+    }
+}

+ 158 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Wap/Params/Pay/BusinessParams.php

@@ -0,0 +1,158 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Wap\Params\Pay;
+
+/**
+ * 支付宝手机支付下单业务参数类.
+ */
+class BusinessParams
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 销售产品码,与支付宝签约的产品码名称。 注:目前仅支持QUICK_WAP_WAY.
+     *
+     * @var string
+     */
+    public $product_code = 'QUICK_WAP_WAY';
+
+    /**
+     * 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000].
+     *
+     * @var float
+     */
+    public $total_amount = 0;
+
+    /**
+     * 订单标题.
+     *
+     * @var string
+     */
+    public $subject = '';
+
+    /**
+     * 订单描述.
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 公用回传参数,如果请求时传递了该参数,则返回给商户时会回传该参数。支付宝只会在异步通知时将该参数原样返回。本参数必须进行UrlEncode之后才可以发送给支付宝.
+     *
+     * @var string
+     */
+    public $passback_params;
+
+    /**
+     * 业务扩展参数,详见业务扩展参数说明.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Wap\Params\Pay\ExtendParams
+     */
+    public $extend_params;
+
+    /**
+     * 商品主类型:0—虚拟类商品,1—实物类商品(默认).
+     *
+     * @var int
+     */
+    public $goods_type = 1;
+
+    /**
+     * 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
+     * 该参数在请求到支付宝时开始计时。
+     *
+     * @var string
+     */
+    public $timeout_express;
+
+    /**
+     * 绝对超时时间,格式为yyyy-MM-dd HH:mm。 注:1)以支付宝系统时间为准;2)如果和timeout_express参数同时传入,以time_expire为准。
+     *
+     * @var string
+     */
+    public $time_expire;
+
+    /**
+     * 可用渠道,用户只能在指定渠道范围内支付
+     * 当有多个渠道时用“,”分隔
+     * 注:与disable_pay_channels互斥.
+     *
+     * @var string
+     */
+    public $enable_pay_channels;
+
+    /**
+     * 禁用渠道,用户不可用指定渠道支付
+     * 当有多个渠道时用“,”分隔
+     * 注:与enable_pay_channels互斥.
+     *
+     * @var string
+     */
+    public $disable_pay_channels;
+
+    /**
+     * 获取用户授权信息,可实现如免登功能。获取方法请查阅:用户信息授权.
+     *
+     * @var string
+     */
+    public $auth_token;
+
+    /**
+     * 商户门店编号。该参数用于请求参数中以区分各门店,非必传项。
+     *
+     * @var string
+     */
+    public $store_id;
+
+    /**
+     * 添加该参数后在h5支付收银台会出现返回按钮,可用于用户付款中途退出并返回到该参数指定的商户网站地址。
+     * 注:该参数对支付宝钱包标准收银台下的跳转不生效。
+     *
+     * @var string
+     */
+    public $quit_url;
+
+    /**
+     * 优惠参数
+     * 注:仅与支付宝协商后可用.
+     *
+     * @var string
+     */
+    public $promo_params;
+
+    public function __construct()
+    {
+        $this->extend_params = new ExtendParams();
+    }
+
+    public function toString()
+    {
+        $obj = (array) $this;
+        $result = $obj['extend_params']->toArray();
+        if (null === $result)
+        {
+            unset($obj['extend_params']);
+        }
+        else
+        {
+            $obj['extend_params'] = $result;
+        }
+        foreach ($obj as $key => $value)
+        {
+            if (null === $value)
+            {
+                unset($obj[$key]);
+            }
+        }
+
+        return json_encode($obj);
+    }
+}

+ 57 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Wap/Params/Pay/ExtendParams.php

@@ -0,0 +1,57 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Wap\Params\Pay;
+
+/**
+ * 支付宝手机支付下单扩展参数类.
+ */
+class ExtendParams
+{
+    /**
+     * 系统商编号,该参数作为系统商返佣数据提取的依据,请填写系统商签约协议的PID.
+     *
+     * @var string
+     */
+    public $sys_service_provider_id;
+
+    /**
+     * 是否发起实名校验
+     * T:发起
+     * F:不发起.
+     *
+     * @var string
+     */
+    public $needBuyerRealnamed;
+
+    /**
+     * 账务备注
+     * 注:该字段显示在离线账单的账务备注中.
+     *
+     * @var string
+     */
+    public $TRANS_MEMO;
+
+    /**
+     * 花呗分期数(目前仅支持3、6、12).
+     *
+     * @var string
+     */
+    public $hb_fq_num;
+
+    /**
+     * 卖家承担收费比例,商家承担手续费传入100,用户承担手续费传入0,仅支持传入100、0两种,其他比例暂不支持
+     *
+     * @var string
+     */
+    public $hb_fq_seller_percent;
+
+    public function toArray()
+    {
+        if (null === $this->sys_service_provider_id && null === $this->hb_fq_num && null === $this->hb_fq_seller_percent && null === $this->needBuyerRealnamed && null === $this->TRANS_MEMO)
+        {
+            return null;
+        }
+
+        return (array) $this;
+    }
+}

+ 46 - 0
vendor/yurunsoft/pay-sdk/src/AlipayApp/Wap/Params/Pay/Request.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayApp\Wap\Params\Pay;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝手机支付下单请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $method = 'alipay.trade.wap.pay';
+
+    /**
+     * 同步返回地址,HTTP/HTTPS开头字符串.
+     *
+     * @var string
+     */
+    public $return_url;
+
+    /**
+     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 业务请求参数
+     * 参考https://docs.open.alipay.com/203/107090/.
+     *
+     * @var \Yurun\PaySDK\AlipayApp\Wap\Params\Pay\BusinessParams
+     */
+    public $businessParams;
+
+    public function __construct()
+    {
+        $this->businessParams = new BusinessParams();
+        $this->_method = 'GET';
+    }
+}

+ 32 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Customs/Query/Request.php

@@ -0,0 +1,32 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Customs\Query;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝报关查询请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'alipay.overseas.acquire.customs.query';
+
+    /**
+     * 报关请求号
+     * 需要查询的商户端报关请求号,支持批量查询,多个值用英文半角逗号分隔,单次最多10个报关请求号;.
+     *
+     * @var string
+     */
+    public $out_request_no;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+    }
+}

+ 96 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Customs/Submit/Request.php

@@ -0,0 +1,96 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Customs\Submit;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝报关接口请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'alipay.acquire.customs';
+
+    /**
+     * 商户生成的用于唯一标识一次报关操作的业务编号。
+     * 建议生成规则:yyyymmmdd型8位日期拼接4位序列号。
+     *
+     * @var string
+     */
+    public $out_request_no;
+
+    /**
+     * 该交易在支付宝系统中的交易流水号,最长64位。
+     *
+     * @var string
+     */
+    public $trade_no;
+
+    /**
+     * 商户在海关备案的编号。
+     *
+     * @var string
+     */
+    public $merchant_customs_code;
+
+    /**
+     * 报关金额,单位为人民币“元”,精确到小数点后2位。
+     *
+     * @var string
+     */
+    public $amount;
+
+    /**
+     * 海关编号,大小写均支持。
+     *
+     * @var string
+     */
+    public $customs_place;
+
+    /**
+     * 商户海关备案名称。
+     *
+     * @var string
+     */
+    public $merchant_customs_name;
+
+    /**
+     * 商户控制本单是否拆单报关。
+     * 仅当该参数传值为T或者t时,才会触发拆单(报关海关必须支持拆单)。
+     *
+     * @var string
+     */
+    public $is_split;
+
+    /**
+     * 商户子订单号。拆单时由商户传入,且拆单时必须传入,否则会报INVALID_PARAMETER错误码。
+     *
+     * @var string
+     */
+    public $sub_out_biz_no;
+
+    /**
+     * 订购人姓名。即订购人留在商户处的姓名信息。
+     *
+     * @var string
+     */
+    public $buyer_name;
+
+    /**
+     * 订购人身份证号。即订购人留在商户处的身份证信息。
+     *
+     * @var string
+     */
+    public $buyer_id_no;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+    }
+}

+ 61 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/BarcodePay/ExtendInfo.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\BarcodePay;
+
+/**
+ * 支付宝境外到店支付-扫码支付扩展信息类.
+ */
+class ExtendInfo
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 将被记录在用户的声明中的子商家名称.
+     *
+     * @var string
+     */
+    public $secondary_merchant_name;
+
+    /**
+     * 用于区分每个特定子商户的子商户 ID.
+     *
+     * @var string
+     */
+    public $secondary_merchant_id;
+
+    /**
+     * 行业分类标识符
+     * 参考:https://global.alipay.com/help/online/81.
+     *
+     * @var string
+     */
+    public $secondary_merchant_industry;
+
+    /**
+     * 商家指定的商户店铺的唯一 id.
+     *
+     * @var string
+     */
+    public $store_id;
+
+    /**
+     * 在客户的支付宝钱包和核对文件中显示的商家商店的名称。
+     *
+     * @var string
+     */
+    public $store_name;
+
+    /**
+     * 用于提交请求的终端 ID。如果建议使用即时升级返利, 则必须传输此参数。
+     *
+     * @var string
+     */
+    public $terminal_id;
+
+    /**
+     * 技术提供商 id。此参数用于标识付款系统提供程序。
+     *
+     * @var string
+     */
+    public $sys_service_provider_id;
+}

+ 126 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/BarcodePay/Request.php

@@ -0,0 +1,126 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\BarcodePay;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外到店支付-扫码支付请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'alipay.acquire.overseas.spot.pay';
+
+    /**
+     * 同partner.
+     *
+     * @var string
+     */
+    public $alipay_seller_id = '';
+
+    /**
+     * 商品数量.
+     *
+     * @var int
+     */
+    public $quantity;
+
+    /**
+     * 将在交易记录的列表中显示的交易记录的名称。
+     *
+     * @var string
+     */
+    public $trans_name;
+
+    /**
+     * 你的内部订单号.
+     *
+     * @var string
+     */
+    public $partner_trans_id;
+
+    /**
+     * 用于标记交易价格的货币, 这也是结算货币支付宝结算给合作伙伴.
+     *
+     * @var string
+     */
+    public $currency;
+
+    /**
+     * 上述货币的交易金额;
+     * 范围: 0.01-100000000.00。小数点后两位数。
+     *
+     * @var float
+     */
+    public $trans_amount;
+
+    /**
+     * 支付宝用户付款码
+     *
+     * @var string
+     */
+    public $buyer_identity_code;
+
+    /**
+     * 付款码类型QRcode或barcode.
+     *
+     * @var string
+     */
+    public $identity_code_type;
+
+    /**
+     * 合作伙伴系统创建交易记录的时间。
+     * 格式: YYYYMMDDHHMMSS.
+     *
+     * @var string
+     */
+    public $trans_create_time;
+
+    /**
+     * 交易记录.
+     *
+     * @var string
+     */
+    public $memo;
+
+    /**
+     * 产品名称, 现在它是一个静态值, 这是强制性的.
+     *
+     * @var string
+     */
+    public $biz_product = 'OVERSEAS_MBARCODE_PAY';
+
+    /**
+     * 扩展参数.
+     *
+     * @var \Yurun\PaySDK\AlipayCrossBorder\InStore\BarcodePay\ExtendInfo
+     */
+    public $extend_info;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->extend_info = new ExtendInfo();
+    }
+
+    public function toArray()
+    {
+        $obj = (array) $this;
+        if (empty($obj['extend_info']))
+        {
+            unset($obj['extend_info']);
+        }
+        else
+        {
+            $obj['extend_info'] = json_encode($obj['extend_info']);
+        }
+
+        return $obj;
+    }
+}

+ 63 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/Cancel/Request.php

@@ -0,0 +1,63 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\Cancel;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外到店支付-取消订单请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'alipay.acquire.cancel';
+
+    /**
+     * 商户服务器发送请求的时间戳, 精确到毫秒.
+     *
+     * @var int
+     */
+    public $timestamp;
+
+    /**
+     * 终端发送请求的时间戳, 精确到毫秒。
+     *
+     * @var int
+     */
+    public $terminal_timestamp;
+
+    /**
+     * 商户网站的订单号.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 支付宝的订单号.
+     *
+     * @var string
+     */
+    public $trade_no;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+    }
+
+    public function toArray()
+    {
+        $obj = (array) $this;
+        if (empty($obj['timestamp']))
+        {
+            $obj['timestamp'] = round(microtime(true) * 1000);
+        }
+
+        return $obj;
+    }
+}

+ 174 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/CreateMerchantQR/BizData.php

@@ -0,0 +1,174 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\CreateMerchantQR;
+
+/**
+ * 支付宝境外到店支付-创建商户二维码业务数据类.
+ */
+class BizData
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 行业分类标识符
+     * 参考:https://global.alipay.com/help/online/81.
+     *
+     * @var string
+     */
+    public $secondary_merchant_industry;
+
+    /**
+     * 用于区分每个特定子商户的子商户 ID.
+     *
+     * @var string
+     */
+    public $secondary_merchant_id;
+
+    /**
+     * 将被记录在用户的声明中的子商家名称.
+     *
+     * @var string
+     */
+    public $secondary_merchant_name;
+
+    /**
+     * 商家指定的商户店铺的唯一 id.
+     *
+     * @var string
+     */
+    public $store_id;
+
+    /**
+     * 在客户的支付宝钱包和核对文件中显示的商家商店的名称。
+     *
+     * @var string
+     */
+    public $store_name;
+
+    /**
+     * 出租车操作编号.
+     *
+     * @var string
+     */
+    public $taxi_operation_id;
+
+    /**
+     * 出租车号码
+     *
+     * @var string
+     */
+    public $taxi_number;
+
+    /**
+     * 出租车司机姓名.
+     *
+     * @var string
+     */
+    public $taxi_driver_name;
+
+    /**
+     * 出租车司机手机号.
+     *
+     * @var string
+     */
+    public $taxi_driver_mobile;
+
+    /**
+     * 定价币种,货币代码
+     *
+     * @var string
+     */
+    public $trans_currency;
+
+    /**
+     * 与商人结算的货币。默认值为 CNY。如果定价币种不是 cny, 则结算币种必须是 cny 或定价币种。
+     *
+     * @var string
+     */
+    public $currency;
+
+    /**
+     * 系统服务提供程序ID.
+     *
+     * @var string
+     */
+    public $sys_service_provider_id;
+
+    /**
+     * 渠道费配置
+     * 如果在创建二维码时 channel_fee 存在, 则在修改二维码时不能删除它。
+     *
+     * @var \Yurun\PaySDK\AlipayCrossBorder\InStore\CreateMerchantQR\ChannelFee
+     */
+    public $channel_fee;
+
+    /**
+     * 国家代码。请参阅 ISO 3166-1 Uor 详细信息。国家代码由两个字母 (alpha-2 代码) 组成。
+     *
+     * @var string
+     */
+    public $country_code;
+
+    /**
+     * 创建代码的存储区的地址
+     *
+     * @var string
+     */
+    public $address;
+
+    /**
+     * 付款成功后返回给商家的响应参数。商家可以定义参数
+     * 最终会转为json格式.
+     *
+     * @var string
+     */
+    public $passback_parameters = [];
+
+    /**
+     * 合法的电话号码
+     *
+     * @var string
+     */
+    public $notify_mobile;
+
+    /**
+     * 合法的淘宝旺旺号码
+     *
+     * @var string
+     */
+    public $notify_wangwang;
+
+    /**
+     * 合法的支付宝账号.
+     *
+     * @var string
+     */
+    public $notify_alipay_account;
+
+    public function __construct()
+    {
+        $this->channel_fee = new \Yurun\PaySDK\AlipayCrossBorder\InStore\CreateMerchantQR\ChannelFee();
+    }
+
+    public function toArray()
+    {
+        $obj = (array) $this;
+        if (empty($obj['passback_parameters']))
+        {
+            unset($obj['passback_parameters']);
+        }
+        if (empty($obj['channel_fee']->type))
+        {
+            unset($obj['channel_fee']);
+        }
+        foreach ($obj as $key => $value)
+        {
+            if (null === $value)
+            {
+                unset($obj[$key]);
+            }
+        }
+
+        return $obj;
+    }
+}

+ 28 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/CreateMerchantQR/ChannelFee.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\CreateMerchantQR;
+
+/**
+ * 支付宝境外到店支付-创建商户二维码渠道费配置类.
+ */
+class ChannelFee
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 频道费用类型,
+     * FIXED: 固定金额
+     * RATE: 一定百分比.
+     *
+     * @var string
+     */
+    public $type;
+
+    /**
+     * 1. 如果渠道费用类型是固定的, 价值范围是 [0, 5% 原始的订单数额]。该值的单位与结算币种一致。对于支持的小数位数, 请参阅受支持的币种。
+     * 2. 如果通道费用类型为 "费率", 则值范围为 [0、0.05]。(在促销季节, 渠道费可以是0。
+     *
+     * @var string
+     */
+    public $value;
+}

+ 66 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/CreateMerchantQR/Request.php

@@ -0,0 +1,66 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\CreateMerchantQR;
+
+use Yurun\PaySDK\AlipayRequestBase;
+use Yurun\PaySDK\Lib\ObjectToArray;
+
+/**
+ * 支付宝境外到店支付-创建商户二维码请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'alipay.commerce.qrcode.create';
+
+    /**
+     * 调用接口的北京时间,格式为yyyy-MM-dd HH:mm:ss.
+     *
+     * @var string
+     */
+    public $timestamp;
+
+    /**
+     * 支付宝将在 HTTP Post 方法中异步通知结果。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 业务类型.
+     *
+     * @var string
+     */
+    public $biz_type = 'OVERSEASHOPQRCODE';
+
+    /**
+     * 业务数据.
+     *
+     * @var \Yurun\PaySDK\AlipayCrossBorder\InStore\CreateMerchantQR\BizData
+     */
+    public $biz_data;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->biz_data = new \Yurun\PaySDK\AlipayCrossBorder\InStore\CreateMerchantQR\BizData();
+    }
+
+    public function toArray()
+    {
+        $obj = (array) $this;
+        if (empty($obj['timestamp']))
+        {
+            $obj['timestamp'] = date('Y-m-d H:i:s');
+        }
+        $obj['biz_data'] = json_encode(ObjectToArray::parse($obj['biz_data']));
+
+        return $obj;
+    }
+}

+ 202 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/CreateQR/Request.php

@@ -0,0 +1,202 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\CreateQR;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外到店支付-创建二维码请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'alipay.acquire.create';
+
+    /**
+     * 支付宝将在 HTTP Post 方法中异步通知结果。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 签名类型。1: 证书签名 2: 其他密钥签名。如果为空, 将使用默认值2。
+     *
+     * @var string
+     */
+    public $alipay_ca_request;
+
+    /**
+     * 商户订单号.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 商品的标题/交易标题/订单标题/订单关键字等。
+     *
+     * @var string
+     */
+    public $subject;
+
+    /**
+     * 产品代码
+     *
+     * @var string
+     */
+    public $product_code = 'OVERSEAS_MBARCODE_PAY';
+
+    /**
+     * 该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。
+     *
+     * @var string
+     */
+    public $total_fee;
+
+    /**
+     * 卖家支付宝用户号.
+     *
+     * @var string
+     */
+    public $seller_id;
+
+    /**
+     * 卖家支付宝账号.
+     *
+     * @var string
+     */
+    public $seller_email;
+
+    /**
+     * 买家支付宝用户号.
+     *
+     * @var string
+     */
+    public $buyer_id;
+
+    /**
+     * 买家支付宝账号.
+     *
+     * @var string
+     */
+    public $buyer_email;
+
+    /**
+     * 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 收银台页面上,商品展示的超链接。
+     *
+     * @var string
+     */
+    public $show_url;
+
+    /**
+     * 用于标记交易价格的货币, 这也是结算货币支付宝结算给合作伙伴.
+     *
+     * @var string
+     */
+    public $currency;
+
+    /**
+     * 定价币种,货币代码
+     *
+     * @var string
+     */
+    public $trans_currency;
+
+    /**
+     * 商品单价.
+     *
+     * @var string
+     */
+    public $price;
+
+    /**
+     * 购买数量.
+     *
+     * @var string
+     */
+    public $quantity;
+
+    /**
+     * 订单包含的商品列表信息
+     * 最大允许商品数量50.
+     *
+     * @var array<\Yurun\PaySDK\AlipayCrossBorder\InStore\PreCreate\GoodsDetail>
+     */
+    public $goods_detail = [];
+
+    /**
+     * 用于传送商家的具体业务信息;如果商家和支付宝同意传输此参数并就该参数的含义达成协议, 则此参数才有效。
+     * 例如, 在可以通过声波进行付款的情况下, 存储 ID 和其他信息;此类资料应以 json 格式写成;有关详细信息, 请参阅 "4.4 业务扩展参数说明"。
+     *
+     * @var \Yurun\PaySDK\AlipayCrossBorder\InStore\PreCreate\ExtendInfo
+     */
+    public $extend_params;
+
+    /**
+     * 设置逾期不付款的交易, 贸易将自动关闭一旦时间。
+     * 值的范围: 1 m ~ 15 d。
+     * m 分钟, h 小时, d-day, 1 c-当前天 (每当贸易被创造, 它将被关闭在 0:00)。
+     * 此参数的数值 Demical 点被拒绝, 例如, 1.5h 可以 tansformed 到90m。
+     * 为了实现这一功能, 支付宝需要被建议设置关闭时间。
+     *
+     * @var string
+     */
+    public $it_b_pay;
+
+    /**
+     * 如果商家通过请求字符串传输此参数, 支付宝将通过异步通知 (参数名称: extra_common_param) 来反馈此参数。
+     *
+     * @var string
+     */
+    public $passback_parameters;
+
+    /**
+     * 商户服务器发送请求的时间戳, 精确到毫秒.
+     *
+     * @var int
+     */
+    public $timestamp;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->extend_params = new \Yurun\PaySDK\AlipayCrossBorder\InStore\PreCreate\ExtendInfo();
+    }
+
+    public function toArray()
+    {
+        $obj = (array) $this;
+        if (empty($obj['timestamp']))
+        {
+            $obj['timestamp'] = round(microtime(true) * 1000);
+        }
+        if (empty($obj['goods_detail']))
+        {
+            unset($obj['goods_detail']);
+        }
+        $obj['extend_params'] = (array) $obj['extend_params'];
+        foreach ($obj['extend_params'] as $key => $value)
+        {
+            if (null === $value)
+            {
+                unset($obj['extend_params'][$key]);
+            }
+        }
+        $obj['extend_params'] = json_encode($obj['extend_params']);
+
+        return $obj;
+    }
+}

+ 23 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/ModifyMerchantQR/Request.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\ModifyMerchantQR;
+
+/**
+ * 支付宝境外到店支付-修改商户二维码请求类.
+ */
+class Request extends \Yurun\PaySDK\AlipayCrossBorder\InStore\CreateMerchantQR\Request
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'alipay.commerce.qrcode.modify';
+
+    /**
+     * 成功生成代码后返回的二维码值
+     *
+     * @var string
+     */
+    public $qrcode;
+}

+ 73 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/ModifyStatus/Request.php

@@ -0,0 +1,73 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\ModifyStatus;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外到店支付-更新商户二维码状态请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'alipay.commerce.qrcode.modifyStatus';
+
+    /**
+     * 调用接口的北京时间,格式为yyyy-MM-dd HH:mm:ss.
+     *
+     * @var string
+     */
+    public $timestamp;
+
+    /**
+     * 支付宝将在 HTTP Post 方法中异步通知结果。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 业务类型.
+     *
+     * @var string
+     */
+    public $biz_type = 'OVERSEASHOPQRCODE';
+
+    /**
+     * 成功生成代码后返回的二维码值
+     *
+     * @var string
+     */
+    public $qrcode;
+
+    /**
+     * 状态
+     * STOP: 停止二维码。如果用户扫描停止的二维码, 将通知他二维码无效。
+     * RESTART: 二维码可以在重新启动后使用。
+     * DELETE: 删除二维码。如果用户扫描删除的二维码, 他将被通知二维码是无效的。删除后无法重新启动代码。
+     *
+     * @var string
+     */
+    public $status;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+    }
+
+    public function toArray()
+    {
+        $obj = (array) $this;
+        if (empty($obj['timestamp']))
+        {
+            $obj['timestamp'] = date('Y-m-d H:i:s');
+        }
+
+        return $obj;
+    }
+}

+ 61 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/PreCreate/ExtendInfo.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\PreCreate;
+
+/**
+ * 支付宝境外到店支付-预创建订单扩展信息类.
+ */
+class ExtendInfo
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 将被记录在用户的声明中的子商家名称.
+     *
+     * @var string
+     */
+    public $secondary_merchant_name;
+
+    /**
+     * 用于区分每个特定子商户的子商户 ID.
+     *
+     * @var string
+     */
+    public $secondary_merchant_id;
+
+    /**
+     * 行业分类标识符
+     * 参考:https://global.alipay.com/help/online/81.
+     *
+     * @var string
+     */
+    public $secondary_merchant_industry;
+
+    /**
+     * 商家指定的商户店铺的唯一 id.
+     *
+     * @var string
+     */
+    public $store_id;
+
+    /**
+     * 在客户的支付宝钱包和核对文件中显示的商家商店的名称。
+     *
+     * @var string
+     */
+    public $store_name;
+
+    /**
+     * 用于提交请求的终端 ID。如果建议使用即时升级返利, 则必须传输此参数。
+     *
+     * @var string
+     */
+    public $terminal_id;
+
+    /**
+     * 技术提供商 id。此参数用于标识付款系统提供程序。
+     *
+     * @var string
+     */
+    public $sys_service_provider_id;
+}

+ 58 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/PreCreate/GoodsDetail.php

@@ -0,0 +1,58 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\PreCreate;
+
+/**
+ * 支付宝境外到店支付-预创建订单商品详情类.
+ */
+class GoodsDetail
+{
+    /**
+     * 商品ID.
+     *
+     * @var string
+     */
+    public $goodsId;
+
+    /**
+     * 商品名称.
+     *
+     * @var string
+     */
+    public $goodsName;
+
+    /**
+     * 商品分类.
+     *
+     * @var string
+     */
+    public $goodsCategory;
+
+    /**
+     * 商品链接.
+     *
+     * @var string
+     */
+    public $showUrl;
+
+    /**
+     * 数量.
+     *
+     * @var string
+     */
+    public $quantity;
+
+    /**
+     * 商品介绍.
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 商品单价.
+     *
+     * @var string
+     */
+    public $price;
+}

+ 185 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/PreCreate/Request.php

@@ -0,0 +1,185 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\PreCreate;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外到店支付-预创建订单请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'alipay.acquire.precreate';
+
+    /**
+     * 退款通知地址,必须使用https协议.
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 商户服务器发送请求的时间戳, 精确到毫秒.
+     *
+     * @var int
+     */
+    public $timestamp;
+
+    /**
+     * 终端发送请求的时间戳, 精确到毫秒。
+     *
+     * @var int
+     */
+    public $terminal_timestamp;
+
+    /**
+     * 商户订单号.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 商品的标题/交易标题/订单标题/订单关键字等。
+     *
+     * @var string
+     */
+    public $subject;
+
+    /**
+     * 产品代码
+     *
+     * @var string
+     */
+    public $product_code = 'OVERSEAS_MBARCODE_PAY';
+
+    /**
+     * 该笔订单的资金总额,单位为RMB-Yuan。取值范围为[0.01,100000000.00],精确到小数点后两位。
+     *
+     * @var string
+     */
+    public $total_fee;
+
+    /**
+     * 卖家支付宝用户号.
+     *
+     * @var string
+     */
+    public $seller_id;
+
+    /**
+     * 卖家支付宝账号.
+     *
+     * @var string
+     */
+    public $seller_email;
+
+    /**
+     * 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 收银台页面上,商品展示的超链接。
+     *
+     * @var string
+     */
+    public $show_url;
+
+    /**
+     * 用于标记交易价格的货币, 这也是结算货币支付宝结算给合作伙伴.
+     *
+     * @var string
+     */
+    public $currency;
+
+    /**
+     * 定价币种,货币代码
+     *
+     * @var string
+     */
+    public $trans_currency;
+
+    /**
+     * 商品单价.
+     *
+     * @var string
+     */
+    public $price;
+
+    /**
+     * 购买数量.
+     *
+     * @var string
+     */
+    public $quantity;
+
+    /**
+     * 订单包含的商品列表信息
+     * 最大允许商品数量50.
+     *
+     * @var array<\Yurun\PaySDK\AlipayCrossBorder\InStore\PreCreate\GoodsDetail>
+     */
+    public $goods_detail = [];
+
+    /**
+     * 用于传送商家的具体业务信息;如果商家和支付宝同意传输此参数并就该参数的含义达成协议, 则此参数才有效。
+     * 例如, 在可以通过声波进行付款的情况下, 存储 ID 和其他信息;此类资料应以 json 格式写成;有关详细信息, 请参阅 "4.4 业务扩展参数说明"。
+     *
+     * @var \Yurun\PaySDK\AlipayCrossBorder\InStore\PreCreate\ExtendInfo
+     */
+    public $extend_params;
+
+    /**
+     * 设置逾期不付款的交易, 贸易将自动关闭一旦时间。
+     * 值的范围: 1 m ~ 15 d。
+     * m 分钟, h 小时, d-day, 1 c-当前天 (每当贸易被创造, 它将被关闭在 0:00)。
+     * 此参数的数值 Demical 点被拒绝, 例如, 1.5h 可以 tansformed 到90m。
+     * 为了实现这一功能, 支付宝需要被建议设置关闭时间。
+     *
+     * @var string
+     */
+    public $it_b_pay;
+
+    /**
+     * 如果商家通过请求字符串传输此参数, 支付宝将通过异步通知 (参数名称: extra_common_param) 来反馈此参数。
+     *
+     * @var string
+     */
+    public $passback_parameters;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+        $this->goods_detail = [];
+        $this->extend_params = new ExtendInfo();
+    }
+
+    public function toArray()
+    {
+        $obj = (array) $this;
+        if (empty($obj['timestamp']))
+        {
+            $obj['timestamp'] = round(microtime(true) * 1000);
+        }
+        if (empty($obj['goods_detail']))
+        {
+            unset($obj['goods_detail']);
+        }
+        else
+        {
+            $obj['goods_detail'] = json_encode($obj['goods_detail']);
+        }
+        $obj['extend_params'] = json_encode($obj['extend_params']);
+
+        return $obj;
+    }
+}

+ 38 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/Query/Request.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\Query;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外到店支付-订单查询请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'alipay.acquire.overseas.query';
+
+    /**
+     * 商户网站的订单号.
+     *
+     * @var string
+     */
+    public $partner_trans_id;
+
+    /**
+     * 支付宝订单号.
+     *
+     * @var string
+     */
+    public $alipay_trans_id;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+    }
+}

+ 73 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/InStore/Refund/Request.php

@@ -0,0 +1,73 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\InStore\Refund;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外到店支付-交易退款请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'alipay.acquire.overseas.spot.refund';
+
+    /**
+     * 退款通知地址,必须使用https协议.
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 商户网站的订单号.
+     *
+     * @var string
+     */
+    public $partner_trans_id;
+
+    /**
+     * 商户的退款单的订单号.
+     *
+     * @var string
+     */
+    public $partner_refund_id;
+
+    /**
+     * 退款金额.
+     *
+     * @var float
+     */
+    public $refund_amount;
+
+    /**
+     * 退款货币代码
+     *
+     * @var string
+     */
+    public $currency;
+
+    /**
+     * 退款原因.
+     *
+     * @var string
+     */
+    public $refund_reson;
+
+    /**
+     * 退款请求是同步或异步处理的。值: Y 或 N 默认值为 N, 异步处理。如果将值设置为 Y, notify_url 将变得毫无意义.
+     *
+     * @var string
+     */
+    public $is_sync;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+    }
+}

+ 37 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/DownloadCompare/Request.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Online\DownloadCompare;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外在线支付-对账单下载请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'forex_compare_file';
+
+    /**
+     * 交易的开始日期、格式为YYYYMMDD.
+     *
+     * @var string
+     */
+    public $start_date;
+
+    /**
+     * 交易的结束日期、格式为YYYYMMDD.
+     *
+     * @var string
+     */
+    public $end_date;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+    }
+}

+ 37 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/DownloadSettlement/Request.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Online\DownloadSettlement;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外在线支付-结算文件下载请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'forex_liquidation_file';
+
+    /**
+     * 交易的开始日期、格式为YYYYMMDD.
+     *
+     * @var string
+     */
+    public $start_date;
+
+    /**
+     * 交易的结束日期、格式为YYYYMMDD.
+     *
+     * @var string
+     */
+    public $end_date;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+    }
+}

+ 23 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/ExchageRate/Request.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Online\ExchageRate;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外在线支付-汇率查询请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'forex_rate_file';
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+    }
+}

+ 74 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/Notify/Base.php

@@ -0,0 +1,74 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Online\Notify;
+
+use Yurun\PaySDK\NotifyBase;
+use Yurun\Util\YurunHttp\Stream\MemoryStream;
+
+/**
+ * 支付宝境外支付通知基类.
+ */
+abstract class Base extends NotifyBase
+{
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * 返回数据.
+     *
+     * @param bool   $success
+     * @param string $message
+     *
+     * @return void
+     */
+    public function reply($success, $message = '')
+    {
+        if ($success)
+        {
+            $result = 'success';
+            if (null === $this->swooleResponse)
+            {
+                echo $result;
+            }
+            elseif ($this->swooleResponse instanceof \Swoole\Http\Response)
+            {
+                $this->swooleResponse->end($result);
+            }
+            elseif ($this->swooleResponse instanceof \Psr\Http\Message\ResponseInterface)
+            {
+                $this->swooleResponse = $this->swooleResponse->withBody(new MemoryStream($result));
+            }
+        }
+    }
+
+    /**
+     * 获取通知数据.
+     *
+     * @return array|mixed
+     */
+    public function getNotifyData()
+    {
+        if ($this->swooleRequest instanceof \Swoole\Http\Request)
+        {
+            return $this->swooleRequest->post;
+        }
+        if ($this->swooleRequest instanceof \Psr\Http\Message\ServerRequestInterface)
+        {
+            return $this->swooleRequest->getParsedBody();
+        }
+
+        return $_POST;
+    }
+
+    /**
+     * 对通知进行验证,是否是正确的通知.
+     *
+     * @return bool
+     */
+    public function notifyVerify()
+    {
+        return $this->sdk->verifyCallback($this->data);
+    }
+}

+ 22 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/Notify/Pay.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Online\Notify;
+
+/**
+ * 支付宝境外支付通知基类.
+ */
+abstract class Pay extends Base
+{
+    /**
+     * 对通知进行验证,是否是正确的通知.
+     *
+     * @return bool
+     */
+    public function notifyVerify()
+    {
+        $request = new \Yurun\PaySDK\AlipayCrossBorder\Online\NotifyVerify\Request();
+        $request->notify_id = $this->data['notify_id'];
+
+        return 'true' === $this->sdk->execute($request, '');
+    }
+}

+ 28 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/Notify/Sync.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Online\Notify;
+
+/**
+ * 支付宝境外支付同步通知类.
+ */
+abstract class Sync extends Base
+{
+    /**
+     * 获取通知数据.
+     *
+     * @return array|mixed
+     */
+    public function getNotifyData()
+    {
+        if ($this->swooleRequest instanceof \Swoole\Http\Request)
+        {
+            return $this->swooleRequest->get;
+        }
+        if ($this->swooleRequest instanceof \Psr\Http\Message\ServerRequestInterface)
+        {
+            return $this->swooleRequest->getQueryParams();
+        }
+
+        return $_GET;
+    }
+}

+ 30 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/NotifyVerify/Request.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Online\NotifyVerify;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外支付通知验证请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'notify_verify';
+
+    /**
+     * 支付宝通知流水号,境外商户可以用这个流水号询问支付宝该条通知的合法性.
+     *
+     * @var string
+     */
+    public $notify_id;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+    }
+}

+ 166 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/Pay/Request.php

@@ -0,0 +1,166 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Online\Pay;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外在线支付-电脑网站支付请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'create_forex_trade';
+
+    /**
+     * 同步返回地址,HTTP/HTTPS开头字符串.
+     *
+     * @var string
+     */
+    public $return_url;
+
+    /**
+     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 商品的标题/交易标题/订单标题/订单关键字等。
+     * 该参数最长为128个汉字。
+     *
+     * @var string
+     */
+    public $subject;
+
+    /**
+     * 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 结算币种,如美元USD.
+     *
+     * @var string
+     */
+    public $currency;
+
+    /**
+     * 商品的外币金额,范围是0.01~1000000.00.
+     *
+     * @var float
+     */
+    public $total_fee;
+
+    /**
+     * 人民币金额,范围为0.01~1000000.00
+     * 如果商户网站使用人民币进行标价就是用这个参数来替换total_fee参数,rmb_fee和total_fee不能同时使用.
+     *
+     * @var float
+     */
+    public $rmb_fee;
+
+    /**
+     * 默认12小时,最大15天。此为买家登陆到完成支付的有效时间。5m 10m 15m 30m 1h 2h 3h 5h 10h 12h 1d.
+     *
+     * @var string
+     */
+    public $timeout_rule;
+
+    /**
+     * 快捷登录返回的安全令牌。快捷登录的需要传。
+     *
+     * @var string
+     */
+    public $auth_token;
+
+    /**
+     * YYYY-MM-DD HH:MM:SS 这里请使用北京时间以便于和支付宝系统时间匹配,此参数必须要和order_valid_time参数一起使用,控制从跳转到买家登陆的有效时间.
+     *
+     * @var string
+     */
+    public $order_gmt_create;
+
+    /**
+     * 最大值为2592000,单位为秒,此参数必须要和order_gmt_create参数一起使用,控制从跳转到买家登陆的有效时间.
+     *
+     * @var int
+     */
+    public $order_valid_time;
+
+    /**
+     * 显示供货商名字.
+     *
+     * @var string
+     */
+    public $supplier;
+
+    /**
+     * 由支付机构给二级商户分配的唯一ID.
+     *
+     * @var string
+     */
+    public $secondary_merchant_id;
+
+    /**
+     * 由支付机构给二级商户分配的唯一名称.
+     *
+     * @var string
+     */
+    public $secondary_merchant_name;
+
+    /**
+     * 支付宝分配的二级商户的行业代码,参考:https://global.alipay.com/help/online/81.
+     *
+     * @var string
+     */
+    public $secondary_merchant_industry;
+
+    /**
+     * 网站支付:NEW_OVERSEAS_SELLER.
+     *
+     * @var string
+     */
+    public $product_code = 'NEW_OVERSEAS_SELLER';
+
+    /**
+     * 分账信息.
+     *
+     * @var array<\Yurun\PaySDK\AlipayCrossBorder\Params\SplitFundInfo>
+     */
+    public $split_fund_info = [];
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+    }
+
+    public function toArray()
+    {
+        $obj = (array) $this;
+        if (empty($obj['split_fund_info']))
+        {
+            unset($obj['split_fund_info']);
+        }
+        else
+        {
+            $obj['split_fund_info'] = json_encode($obj['split_fund_info']);
+        }
+
+        return $obj;
+    }
+}

+ 40 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/Query/Request.php

@@ -0,0 +1,40 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Online\Query;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外在线支付-查询请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'single_trade_query';
+
+    /**
+     * 支付宝根据商户请求,创建订单生成的支付宝交易号。
+     * 最短16位,最长64位。
+     * 建议使用支付宝交易号进行查询,用商户网站唯一订单号查询的效率比较低。
+     *
+     * @var string
+     */
+    public $trade_no;
+
+    /**
+     * 支付宝合作商户网站唯一订单号(确保在商户系统中唯一)。
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+    }
+}

+ 104 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/Refund/Request.php

@@ -0,0 +1,104 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Online\Refund;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外在线支付-退款请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'forex_refund';
+
+    /**
+     * 外部退款请求的ID.
+     *
+     * @var string
+     */
+    public $out_return_no;
+
+    /**
+     * 境外商户交易号(确保在境外商户系统中唯一).
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 外币退款金额.
+     *
+     * @var float
+     */
+    public $return_amount;
+
+    /**
+     * 外币币种.
+     *
+     * @var string
+     */
+    public $currency;
+
+    /**
+     * YYYYMMDDHHMMSS 北京时间(+8).
+     *
+     * @var string
+     */
+    public $gmt_return;
+
+    /**
+     * 人民币退款金额.
+     *
+     * @var float
+     */
+    public $return_rmb_amount;
+
+    /**
+     * 退款原因.
+     *
+     * @var string
+     */
+    public $reason;
+
+    /**
+     * 产品代码
+     * 网站支付: NEW_OVERSEAS_SELLER
+     * 手机浏览器或支付宝钱包支付: NEW_WAP_OVERSEAS_SELLER.
+     *
+     * @var string
+     */
+    public $product_code;
+
+    /**
+     * 分账信息.
+     *
+     * @var array<\Yurun\PaySDK\AlipayCrossBorder\Params\SplitFundInfo>
+     */
+    public $split_fund_info = [];
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+        $this->_isSyncVerify = true;
+    }
+
+    public function toArray()
+    {
+        $obj = (array) $this;
+        if (empty($obj['split_fund_info']))
+        {
+            unset($obj['split_fund_info']);
+        }
+        else
+        {
+            $obj['split_fund_info'] = json_encode($obj['split_fund_info']);
+        }
+
+        return $obj;
+    }
+}

+ 173 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Online/WapPay/Request.php

@@ -0,0 +1,173 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Online\WapPay;
+
+use Yurun\PaySDK\AlipayRequestBase;
+
+/**
+ * 支付宝境外在线支付-手机网站支付请求类.
+ */
+class Request extends AlipayRequestBase
+{
+    /**
+     * 接口名称.
+     *
+     * @var string
+     */
+    public $service = 'create_forex_trade_wap';
+
+    /**
+     * 同步返回地址,HTTP/HTTPS开头字符串.
+     *
+     * @var string
+     */
+    public $return_url;
+
+    /**
+     * 支付宝服务器主动通知商户服务器里指定的页面http/https路径。
+     *
+     * @var string
+     */
+    public $notify_url;
+
+    /**
+     * 商品的标题/交易标题/订单标题/订单关键字等。
+     * 该参数最长为128个汉字。
+     *
+     * @var string
+     */
+    public $subject;
+
+    /**
+     * 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
+     *
+     * @var string
+     */
+    public $body;
+
+    /**
+     * 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复.
+     *
+     * @var string
+     */
+    public $out_trade_no;
+
+    /**
+     * 结算币种,如美元USD.
+     *
+     * @var string
+     */
+    public $currency;
+
+    /**
+     * 商品的外币金额,范围是0.01~1000000.00.
+     *
+     * @var float
+     */
+    public $total_fee;
+
+    /**
+     * 人民币金额,范围为0.01~1000000.00
+     * 如果商户网站使用人民币进行标价就是用这个参数来替换total_fee参数,rmb_fee和total_fee不能同时使用.
+     *
+     * @var float
+     */
+    public $rmb_fee;
+
+    /**
+     * 默认12小时,最大15天。此为买家登陆到完成支付的有效时间。5m 10m 15m 30m 1h 2h 3h 5h 10h 12h 1d.
+     *
+     * @var string
+     */
+    public $timeout_rule;
+
+    /**
+     * 快捷登录返回的安全令牌。快捷登录的需要传。
+     *
+     * @var string
+     */
+    public $auth_token;
+
+    /**
+     * YYYY-MM-DD HH:MM:SS 这里请使用北京时间以便于和支付宝系统时间匹配,此参数必须要和order_valid_time参数一起使用,控制从跳转到买家登陆的有效时间.
+     *
+     * @var string
+     */
+    public $order_gmt_create;
+
+    /**
+     * 最大值为2592000,单位为秒,此参数必须要和order_gmt_create参数一起使用,控制从跳转到买家登陆的有效时间.
+     *
+     * @var int
+     */
+    public $order_valid_time;
+
+    /**
+     * 显示供货商名字.
+     *
+     * @var string
+     */
+    public $supplier;
+
+    /**
+     * 由支付机构给二级商户分配的唯一ID.
+     *
+     * @var string
+     */
+    public $secondary_merchant_id;
+
+    /**
+     * 由支付机构给二级商户分配的唯一名称.
+     *
+     * @var string
+     */
+    public $secondary_merchant_name;
+
+    /**
+     * 支付宝分配的二级商户的行业代码,参考:https://global.alipay.com/help/online/81.
+     *
+     * @var string
+     */
+    public $secondary_merchant_industry;
+
+    /**
+     * 网站支付:NEW_OVERSEAS_SELLER.
+     *
+     * @var string
+     */
+    public $product_code = 'NEW_WAP_OVERSEAS_SELLER';
+
+    /**
+     * 这个参数用来标记该笔支付是否唤起支付宝钱包来进行支付。如果支付宝钱包没有安装,则使用wap方式支付。
+     *
+     * @var string
+     */
+    public $app_pay = 'Y';
+
+    /**
+     * 分账信息.
+     *
+     * @var array<\Yurun\PaySDK\AlipayCrossBorder\Params\SplitFundInfo>
+     */
+    public $split_fund_info = [];
+
+    public function __construct()
+    {
+        $this->_method = 'GET';
+    }
+
+    public function toArray()
+    {
+        $obj = (array) $this;
+        if (empty($obj['split_fund_info']))
+        {
+            unset($obj['split_fund_info']);
+        }
+        else
+        {
+            $obj['split_fund_info'] = json_encode($obj['split_fund_info']);
+        }
+
+        return $obj;
+    }
+}

+ 65 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Params/PublicParams.php

@@ -0,0 +1,65 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Params;
+
+use Yurun\PaySDK\PublicBase;
+
+/**
+ * 支付宝境外支付公共参数类.
+ */
+class PublicParams extends PublicBase
+{
+    /**
+     * 商户网站使用的编码格式,如UTF-8、GBK、GB2312等。
+     *
+     * @var string
+     */
+    public $_input_charset = 'UTF-8';
+
+    /**
+     * DSA、RSA、MD5三个值可选,必须大写。
+     *
+     * @var string
+     */
+    public $sign_type = 'MD5';
+
+    /**
+     * 私有证书文件内容.
+     *
+     * @var string
+     */
+    public $appPrivateKey;
+
+    /**
+     * 私有证书文件地址,不为空时优先使用文件地址
+     *
+     * @var string
+     */
+    public $appPrivateKeyFile;
+
+    /**
+     * 公有证书文件内容.
+     *
+     * @var string
+     */
+    public $appPublicKey;
+
+    /**
+     * 公有证书文件地址,不为空时优先使用文件地址
+     *
+     * @var string
+     */
+    public $appPublicKeyFile;
+
+    /**
+     * MD5密钥,安全检验码,由数字和字母组成的32位字符串.
+     *
+     * @var string
+     */
+    public $md5Key;
+
+    public function __construct()
+    {
+        $this->apiDomain = 'https://mapi.alipay.com/gateway.do';
+    }
+}

+ 39 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/Params/SplitFundInfo.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder\Params;
+
+/**
+ * 支付宝境外支付-分账明细类.
+ */
+class SplitFundInfo
+{
+    use \Yurun\PaySDK\Traits\JSONParams;
+
+    /**
+     * 接受分账资金的支付宝账户ID。以2088开头的纯16位数字。
+     *
+     * @var string
+     */
+    public $transIn;
+
+    /**
+     * 分账的金额。格式必须符合相应币种的要求,比如:日元为整数,人民币最多2位小数。当分账币种是CNY时,此金额代表的是人民币;如果分账币种是外币时,此金额则是外币。但分账商户实际收到的金额始终是人民币,如果分账明细中是外币,分账商户得到的人民币实际是通过汇率进行计算得到的。数值(小数点后最多2位).
+     *
+     * @var float
+     */
+    public $amount;
+
+    /**
+     * 分账币种。如果total_fee不为空,则分账币种必须是外币,且与结算币种一致;如果rmb_fee不为空,则分账币种必须是人民币。人民币填写“CNY”,外币请参见“币种列表”。
+     *
+     * @var string
+     */
+    public $currency;
+
+    /**
+     * 分账描述信息.
+     *
+     * @var string
+     */
+    public $desc;
+}

+ 290 - 0
vendor/yurunsoft/pay-sdk/src/AlipayCrossBorder/SDK.php

@@ -0,0 +1,290 @@
+<?php
+
+namespace Yurun\PaySDK\AlipayCrossBorder;
+
+use Yurun\PaySDK\Base;
+use Yurun\PaySDK\Lib\ObjectToArray;
+
+/**
+ * 支付宝境外支付SDK类.
+ */
+class SDK extends Base
+{
+    /**
+     * 公共参数.
+     *
+     * @var \Yurun\PaySDK\AlipayCrossBorder\Params\PublicParams
+     */
+    public $publicParams;
+
+    /**
+     * 处理执行接口的数据.
+     *
+     * @param $params
+     * @param &$data 数据数组
+     * @param &$requestData 请求用的数据,格式化后的
+     * @param &$url 请求地址
+     *
+     * @return array
+     */
+    public function __parseExecuteData($params, &$data, &$requestData, &$url)
+    {
+        $data = array_merge(ObjectToArray::parse($this->publicParams), ObjectToArray::parse($params));
+        unset($data['apiDomain'], $data['appID'], $data['appPrivateKey'], $data['appPrivateKeyFile'], $data['md5Key'], $data['appPublicKey'], $data['appPublicKeyFile'], $data['_syncResponseName'], $data['_method'], $data['_isSyncVerify'], $data['_contentType']);
+        $data['partner'] = $this->publicParams->appID;
+        foreach ($data as $key => $value)
+        {
+            if ('' == $value)
+            {
+                unset($data[$key]);
+            }
+        }
+        $data['sign'] = $this->sign($data);
+        $requestData = $data;
+        $url = $this->publicParams->apiDomain;
+    }
+
+    public function sign($data)
+    {
+        $content = $this->parseSignData($data);
+        if (empty($this->publicParams->appPrivateKeyFile))
+        {
+            $key = $this->publicParams->appPrivateKey;
+            $method = 'signPrivate';
+        }
+        else
+        {
+            $key = $this->publicParams->appPrivateKeyFile;
+            $method = 'signPrivateFromFile';
+        }
+        switch ($this->publicParams->sign_type)
+        {
+            case 'DSA':
+                $result = \Yurun\PaySDK\Lib\Encrypt\DSA::$method($content, $key);
+                break;
+            case 'RSA':
+                $result = \Yurun\PaySDK\Lib\Encrypt\RSA::$method($content, $key);
+                break;
+            case 'RSA2':
+                $result = \Yurun\PaySDK\Lib\Encrypt\RSA2::$method($content, $key);
+                break;
+            case 'MD5':
+                return md5($content . $this->publicParams->md5Key);
+            default:
+                throw new \Exception('未知的加密方式:' . $this->publicParams->sign_type);
+        }
+
+        return base64_encode($result);
+    }
+
+    /**
+     * 验证回调通知是否合法.
+     *
+     * @param $data
+     *
+     * @return bool
+     */
+    public function verifyCallback($data)
+    {
+        if (!isset($data['sign'], $data['sign_type']))
+        {
+            return false;
+        }
+        $content = $this->parseSignData($data);
+        if (empty($this->publicParams->appPublicKeyFile))
+        {
+            $key = $this->publicParams->appPublicKey;
+            $method = 'verifyPublic';
+        }
+        else
+        {
+            $key = $this->publicParams->appPublicKeyFile;
+            $method = 'verifyPublicFromFile';
+        }
+        switch ($data['sign_type'])
+        {
+            case 'DSA':
+                return \Yurun\PaySDK\Lib\Encrypt\DSA::$method($content, $key, base64_decode($data['sign']));
+            case 'RSA':
+                return \Yurun\PaySDK\Lib\Encrypt\RSA::$method($content, $key, base64_decode($data['sign']));
+            case 'MD5':
+                return $data['sign'] === md5($content . $this->publicParams->md5Key);
+            default:
+                throw new \Exception('未知的加密方式:' . $data['sign_type']);
+        }
+    }
+
+    /**
+     * 验证同步返回内容.
+     *
+     * @param AlipayRequestBase                        $params
+     * @param array                                    $data
+     * @param \Yurun\Util\YurunHttp\Http\Response|null $response
+     *
+     * @return bool
+     */
+    public function verifySync($params, $data, $response = null)
+    {
+        if (!isset($data['sign'], $data['sign_type'], $data['response']))
+        {
+            return true;
+        }
+        $response = (array) $data['response'];
+        $content = $this->parseSignData((array) reset($response));
+        if (empty($this->publicParams->appPublicKeyFile))
+        {
+            $key = $this->publicParams->appPublicKey;
+            $method = 'verifyPublic';
+        }
+        else
+        {
+            $key = $this->publicParams->appPublicKeyFile;
+            $method = 'verifyPublicFromFile';
+        }
+        switch ($data['sign_type'])
+        {
+            case 'DSA':
+                return \Yurun\PaySDK\Lib\Encrypt\DSA::$method($content, $key, base64_decode($data['sign']));
+            case 'RSA':
+                return \Yurun\PaySDK\Lib\Encrypt\RSA::$method($content, $key, base64_decode($data['sign']));
+            case 'MD5':
+                return $data['sign'] === md5($content . $this->publicParams->md5Key);
+            default:
+                throw new \Exception('未知的加密方式:' . $data['sign_type']);
+        }
+    }
+
+    public function parseSignData($data)
+    {
+        unset($data['sign_type'], $data['sign']);
+        ksort($data);
+        $content = '';
+        foreach ($data as $k => $v)
+        {
+            if ('' !== $v && null !== $v && !\is_array($v))
+            {
+                $content .= $k . '=' . $v . '&';
+            }
+        }
+
+        return trim($content, '&');
+    }
+
+    /**
+     * 调用执行接口.
+     *
+     * @param mixed  $params
+     * @param string $method
+     *
+     * @return mixed
+     */
+    public function execute($params, $format = 'XML')
+    {
+        return parent::execute($params, $format);
+    }
+
+    /**
+     * 检查是否执行成功
+     *
+     * @param array $result
+     *
+     * @return bool
+     */
+    protected function __checkResult($result)
+    {
+        if (isset($result['is_success']) && 'T' === $result['is_success'])
+        {
+            if (isset($result['response']))
+            {
+                $response = (array) $result['response'];
+                $item = reset($response);
+
+                return !isset($item->result_code) || 'SUCCESS' === (string) $item->result_code;
+            }
+            else
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * 获取错误信息.
+     *
+     * @param array $result
+     *
+     * @return string
+     */
+    protected function __getError($result)
+    {
+        if (isset($result['is_success']))
+        {
+            if ('T' === $result['is_success'])
+            {
+                if (isset($result['response']))
+                {
+                    $response = (array) $result['response'];
+                    $item = reset($response);
+                    if (isset($item->result_code) && 'SUCCESS' !== (string) $item->result_code)
+                    {
+                        if (isset($item->error))
+                        {
+                            return (string) $item->error;
+                        }
+                        else
+                        {
+                            return (string) $item->detail_error_des;
+                        }
+                    }
+                }
+            }
+            else
+            {
+                return $result['error'];
+            }
+        }
+
+        return '';
+    }
+
+    /**
+     * 获取错误代码
+     *
+     * @param array $result
+     *
+     * @return string
+     */
+    protected function __getErrorCode($result)
+    {
+        if (isset($result['is_success']))
+        {
+            if ('T' === $result['is_success'])
+            {
+                if (isset($result['response']))
+                {
+                    $response = (array) $result['response'];
+                    $item = reset($response);
+                    if (isset($item->result_code) && 'SUCCESS' !== (string) $item->result_code)
+                    {
+                        if (isset($item->result_code))
+                        {
+                            return (string) $item->result_code;
+                        }
+                        else
+                        {
+                            return (string) $item->detail_error_code;
+                        }
+                    }
+                }
+            }
+            else
+            {
+                return $result['error'];
+            }
+        }
+
+        return '';
+    }
+}

+ 16 - 0
vendor/yurunsoft/pay-sdk/src/AlipayRequestBase.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace Yurun\PaySDK;
+
+/**
+ * 支付宝请求基类.
+ */
+abstract class AlipayRequestBase extends RequestBase
+{
+    /**
+     * 支付宝返回的json中xxx_response的名字.
+     *
+     * @var string
+     */
+    public $_syncResponseName = '';
+}

+ 316 - 0
vendor/yurunsoft/pay-sdk/src/Base.php

@@ -0,0 +1,316 @@
+<?php
+
+namespace Yurun\PaySDK;
+
+use Yurun\PaySDK\Lib\XML;
+use Yurun\Util\HttpRequest;
+
+/**
+ * SDK类基类.
+ */
+abstract class Base
+{
+    /**
+     * HttpRequest.
+     *
+     * @var \Yurun\Util\HttpRequest
+     */
+    public $http;
+
+    /**
+     * 接口请求的返回结果.
+     *
+     * @var \Yurun\Util\YurunHttp\Http\Response
+     */
+    public $response;
+
+    /**
+     * 请求数据.
+     *
+     * @var array
+     */
+    public $requestData;
+
+    /**
+     * 公共参数.
+     *
+     * @var mixed
+     */
+    public $publicParams;
+
+    /**
+     * 最后请求的url地址
+     *
+     * @var string
+     */
+    public $url;
+
+    /**
+     * 最后请求的结果.
+     *
+     * @var mixed
+     */
+    public $result;
+
+    /**
+     * swoole 请求类,或支持 PSR-7 标准的对象
+     *
+     * @var \Swoole\Http\Request|\Psr\Http\Message\ServerRequestInterface
+     */
+    public $swooleRequest;
+
+    /**
+     * swoole 响应类,或支持 PSR-7 标准的对象
+     *
+     * @var \Swoole\Http\Response|\Psr\Http\Message\ResponseInterface
+     */
+    public $swooleResponse;
+
+    public function __construct($publicParams)
+    {
+        $this->publicParams = $publicParams;
+        $this->http = new HttpRequest();
+    }
+
+    /**
+     * 调用执行接口.
+     *
+     * @param RequestBase $params
+     * @param string      $method
+     *
+     * @return mixed
+     */
+    public function execute($params, $format = 'JSON')
+    {
+        if ($params->__onExecute($this, $format))
+        {
+            return $this->result;
+        }
+        $this->prepareExecute($params, $url, $data);
+        $this->url = $url;
+        $this->response = $this->http->send($url, $this->requestData, $params->_method, $params->_contentType);
+        if (!$this->response->success)
+        {
+            throw new \RuntimeException(sprintf('Request error: [%s] %s', $this->response->errno(), $this->response->error()));
+        }
+        switch ($format)
+        {
+            case 'JSON':
+                $this->result = $this->response->json(true);
+                break;
+            case 'XML':
+                $this->result = XML::fromString($this->response->body());
+                break;
+            default:
+                $this->result = $this->response->body();
+        }
+        if (!$this->checkResult($this->result))
+        {
+            throw new \Exception(sprintf('Error: [%s] %s', $this->getErrorCode($this->result), $this->getError($this->result)));
+        }
+        if ($params->_isSyncVerify && !$this->verifySync($params, $this->result, $this->response))
+        {
+            throw new \Exception('同步返回数据验证失败');
+        }
+        else
+        {
+            return $this->result;
+        }
+    }
+
+    /**
+     * 调用执行接口,将结果保存至文件.
+     *
+     * @param mixed  $params
+     * @param string $saveFilename
+     *
+     * @return void
+     */
+    public function executeDownload($params, $saveFilename)
+    {
+        $this->prepareExecute($params, $url, $data);
+        $this->url = $url;
+        $this->http->saveFile($saveFilename)->send($url, $this->requestData, $params->_method);
+    }
+
+    /**
+     * 签名.
+     *
+     * @param array $data
+     *
+     * @return string
+     */
+    abstract public function sign($data);
+
+    /**
+     * 处理执行接口的数据.
+     *
+     * @param $params
+     * @param &$data 数据数组
+     * @param &$requestData 请求用的数据,格式化后的
+     * @param &$url 请求地址
+     *
+     * @return array
+     */
+    abstract public function __parseExecuteData($params, &$data, &$requestData, &$url);
+
+    /**
+     * 验证回调通知是否合法.
+     *
+     * @param $data
+     *
+     * @return bool
+     */
+    abstract public function verifyCallback($data);
+
+    /**
+     * 验证同步返回内容.
+     *
+     * @param mixed                                    $params
+     * @param array                                    $data
+     * @param \Yurun\Util\YurunHttp\Http\Response|null $response
+     *
+     * @return bool
+     */
+    abstract public function verifySync($params, $data, $response = null);
+
+    /**
+     * 检查是否执行成功
+     *
+     * @param array $result
+     *
+     * @return bool
+     */
+    abstract protected function __checkResult($result);
+
+    /**
+     * 获取错误信息.
+     *
+     * @param array $result
+     *
+     * @return string
+     */
+    abstract protected function __getError($result);
+
+    /**
+     * 获取错误代码
+     *
+     * @param array $result
+     *
+     * @return string
+     */
+    abstract protected function __getErrorCode($result);
+
+    /**
+     * 检查是否执行成功
+     *
+     * @param array $result
+     *
+     * @return bool
+     */
+    public function checkResult($result = null)
+    {
+        return $this->__checkResult(null === $result ? $this->result : $result);
+    }
+
+    /**
+     * 获取错误信息.
+     *
+     * @param array $result
+     *
+     * @return string
+     */
+    public function getError($result = null)
+    {
+        return $this->__getError(null === $result ? $this->result : $result);
+    }
+
+    /**
+     * 获取错误代码
+     *
+     * @param array $result
+     *
+     * @return string
+     */
+    public function getErrorCode($result = null)
+    {
+        return $this->__getErrorCode(null === $result ? $this->result : $result);
+    }
+
+    /**
+     * 使用跳转的方式处理.
+     *
+     * @param array $params
+     *
+     * @return void
+     */
+    public function redirectExecute($params)
+    {
+        $this->__parseExecuteData($params, $data, $requestData, $url);
+        if (false === strpos($url, '?'))
+        {
+            $url .= '?';
+        }
+        else
+        {
+            $url .= '&';
+        }
+        $this->requestData = $data;
+        $url .= http_build_query($data, '', '&');
+        if (null === $this->swooleResponse)
+        {
+            header('HTTP/1.1 302 Temporarily Moved');
+            header('Status: 302 Temporarily Moved');
+            header('Location: ' . $url);
+            exit;
+        }
+        elseif ($this->swooleResponse instanceof \Swoole\Http\Response)
+        {
+            $this->swooleResponse->redirect($url, 302);
+        }
+        elseif ($this->swooleResponse instanceof \Psr\Http\Message\ResponseInterface)
+        {
+            $this->swooleResponse = $this->swooleResponse->withStatus(302)->withHeader('Location', $url);
+        }
+    }
+
+    /**
+     * 准备处理数据.
+     *
+     * @param $params
+     * @param string $url
+     * @param array  $data
+     *
+     * @return void
+     */
+    public function prepareExecute($params, &$url = null, &$data = null)
+    {
+        $this->__parseExecuteData($params, $data, $requestData, $url);
+        $this->requestData = $requestData;
+        if ('GET' === $params->_method)
+        {
+            if (false === strpos($url, '?'))
+            {
+                $url .= '?';
+            }
+            else
+            {
+                $url .= '&';
+            }
+            $url .= http_build_query($data, '', '&');
+        }
+    }
+
+    /**
+     * 处理异步通知.
+     *
+     * @param \Yurun\PaySDK\NotifyBase $notifyHandler
+     *
+     * @return void
+     */
+    public function notify($notifyHandler)
+    {
+        $notifyHandler->sdk = $this;
+        $notifyHandler->exec();
+    }
+}

+ 102 - 0
vendor/yurunsoft/pay-sdk/src/Lib/CertUtil.php

@@ -0,0 +1,102 @@
+<?php
+
+namespace Yurun\PaySDK\Lib;
+
+/**
+ * 证书工具类.
+ *
+ * @source https://github.com/alipay/alipay-easysdk/blob/master/php/src/Kernel/Util/AntCertificationUtil.php 算法代码来自支付宝官方sdk
+ */
+class CertUtil
+{
+    /**
+     * 从证书中提取序列号.
+     *
+     * @param $certPath
+     *
+     * @return string
+     */
+    public static function getCertSN($certPath)
+    {
+        $cert = file_get_contents($certPath);
+        $ssl = openssl_x509_parse($cert);
+        $SN = md5(static::array2string(array_reverse($ssl['issuer'])) . $ssl['serialNumber']);
+
+        return $SN;
+    }
+
+    /**
+     * 提取根证书序列号.
+     *
+     * @param $certPath  string 根证书
+     *
+     * @return string|null
+     */
+    public static function getRootCertSN($certPath)
+    {
+        $cert = file_get_contents($certPath);
+        $array = explode('-----END CERTIFICATE-----', $cert);
+        $SN = null;
+        for ($i = 0; $i < \count($array) - 1; ++$i)
+        {
+            $ssl[$i] = openssl_x509_parse($array[$i] . '-----END CERTIFICATE-----');
+            if (0 === strpos($ssl[$i]['serialNumber'], '0x'))
+            {
+                $ssl[$i]['serialNumber'] = static::hex2dec($ssl[$i]['serialNumber']);
+            }
+            if ('sha1WithRSAEncryption' == $ssl[$i]['signatureTypeLN'] || 'sha256WithRSAEncryption' == $ssl[$i]['signatureTypeLN'])
+            {
+                if (null == $SN)
+                {
+                    $SN = md5(static::array2string(array_reverse($ssl[$i]['issuer'])) . $ssl[$i]['serialNumber']);
+                }
+                else
+                {
+                    $SN = $SN . '_' . md5(static::array2string(array_reverse($ssl[$i]['issuer'])) . $ssl[$i]['serialNumber']);
+                }
+            }
+        }
+
+        return $SN;
+    }
+
+    /**
+     * 数组转字符串.
+     *
+     * @param array $array
+     *
+     * @return string
+     */
+    public static function array2string($array)
+    {
+        $string = [];
+        if ($array && \is_array($array))
+        {
+            foreach ($array as $key => $value)
+            {
+                $string[] = $key . '=' . $value;
+            }
+        }
+
+        return implode(',', $string);
+    }
+
+    /**
+     * 0x转高精度数字.
+     *
+     * @param $hex
+     *
+     * @return int|string
+     */
+    public static function hex2dec($hex)
+    {
+        $dec = 0;
+        $len = \strlen($hex);
+        for ($i = 3; $i <= $len; ++$i)
+        {
+            $dec = bcadd($dec, bcmul((string) (hexdec($hex[$i - 1])), bcpow('16', (string) ($len - $i))));
+        }
+
+        return $dec;
+    }
+}

+ 26 - 0
vendor/yurunsoft/pay-sdk/src/Lib/Encrypt/AES.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace Yurun\PaySDK\Lib\Encrypt;
+
+class AES extends Base
+{
+    public static function encrypt($data, $key)
+    {
+        return openssl_encrypt($data, 'AES-128-CBC', $key, 0, str_repeat(\chr(0), openssl_cipher_iv_length('AES-128-CBC')));
+    }
+
+    public static function decrypt($data, $key)
+    {
+        return openssl_decrypt($data, 'AES-128-CBC', $key, 0, str_repeat(\chr(0), openssl_cipher_iv_length('AES-128-CBC')));
+    }
+
+    public static function encrypt256($data, $key)
+    {
+        return openssl_encrypt($data, 'AES-256-ECB', $key, 0, str_repeat(\chr(0), openssl_cipher_iv_length('AES-256-ECB')));
+    }
+
+    public static function decrypt256($data, $key, $options = 0)
+    {
+        return openssl_decrypt($data, 'AES-256-ECB', $key, $options, str_repeat(\chr(0), openssl_cipher_iv_length('AES-256-ECB')));
+    }
+}

Some files were not shown because too many files changed in this diff