Kirin hai 2 meses
pai
achega
6933e94010
Modificáronse 100 ficheiros con 13939 adicións e 7 borrados
  1. 2 1
      composer.json
  2. 112 1
      composer.lock
  3. 5 5
      qiniu/basic/BaseModel.php
  4. 12 0
      vendor/alibabacloud/tea-fileform/.gitignore
  5. 65 0
      vendor/alibabacloud/tea-fileform/.php_cs.dist
  6. 31 0
      vendor/alibabacloud/tea-fileform/README-CN.md
  7. 31 0
      vendor/alibabacloud/tea-fileform/README.md
  8. 44 0
      vendor/alibabacloud/tea-fileform/composer.json
  9. 32 0
      vendor/alibabacloud/tea-fileform/phpunit.xml
  10. 16 0
      vendor/alibabacloud/tea-fileform/src/FileForm.php
  11. 22 0
      vendor/alibabacloud/tea-fileform/src/FileForm/FileField.php
  12. 321 0
      vendor/alibabacloud/tea-fileform/src/FileFormStream.php
  13. 81 0
      vendor/alibabacloud/tea-fileform/tests/FileFormTest.php
  14. 3 0
      vendor/alibabacloud/tea-fileform/tests/bootstrap.php
  15. 1 0
      vendor/alipaysdk/easysdk/.gitattributes
  16. 16 0
      vendor/alipaysdk/easysdk/.gitignore
  17. 822 0
      vendor/alipaysdk/easysdk/APIDoc.md
  18. 182 0
      vendor/alipaysdk/easysdk/CHANGELOG
  19. 21 0
      vendor/alipaysdk/easysdk/LICENSE
  20. 203 0
      vendor/alipaysdk/easysdk/README.md
  21. 49 0
      vendor/alipaysdk/easysdk/composer.json
  22. 23 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK.sln
  23. 32 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/AlipayEasySDK.csproj
  24. 324 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Image/Client.cs
  25. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Image/Models/AlipayOfflineMaterialImageUploadResponse.cs
  26. 528 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/OAuth/Client.cs
  27. 57 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/OAuth/Models/AlipaySystemOauthTokenResponse.cs
  28. 318 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Qrcode/Client.cs
  29. 41 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Qrcode/Models/AlipayOpenAppQrcodeCreateResponse.cs
  30. 324 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Video/Client.cs
  31. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Video/Models/AlipayOfflineMaterialImageUploadResponse.cs
  32. 244 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Factory/Factory.cs
  33. 1832 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Client.cs
  34. 37 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicLifeMsgRecallResponse.cs
  35. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageContentCreateResponse.cs
  36. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageContentModifyResponse.cs
  37. 37 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageSingleSendResponse.cs
  38. 41 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageTotalSendResponse.cs
  39. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicSettingCategoryQueryResponse.cs
  40. 37 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicTemplateMessageIndustryModifyResponse.cs
  41. 34 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Article.cs
  42. 42 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Context.cs
  43. 22 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Keyword.cs
  44. 22 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Template.cs
  45. 22 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Text.cs
  46. 964 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Client.cs
  47. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassInstanceAddResponse.cs
  48. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassInstanceUpdateResponse.cs
  49. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassTemplateAddResponse.cs
  50. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassTemplateUpdateResponse.cs
  51. 322 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/TemplateMessage/Client.cs
  52. 37 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/TemplateMessage/Models/AlipayOpenAppMiniTemplatemessageSendResponse.cs
  53. 562 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Client.cs
  54. 21 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/AlipayUserCertifyOpenCertifyResponse.cs
  55. 41 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/AlipayUserCertifyOpenInitializeResponse.cs
  56. 49 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/AlipayUserCertifyOpenQueryResponse.cs
  57. 30 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/IdentityParam.cs
  58. 18 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/MerchantConfig.cs
  59. 135 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/App/Client.cs
  60. 21 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/App/Models/AlipayTradeAppPayResponse.cs
  61. 1598 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Client.cs
  62. 41 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayDataDataserviceBillDownloadurlQueryResponse.cs
  63. 61 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeCancelResponse.cs
  64. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeCloseResponse.cs
  65. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeCreateResponse.cs
  66. 109 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeFastpayRefundQueryResponse.cs
  67. 177 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeQueryResponse.cs
  68. 97 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeRefundResponse.cs
  69. 22 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/PresetPayToolInfo.cs
  70. 42 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/RefundRoyaltyResult.cs
  71. 34 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/TradeFundBill.cs
  72. 38 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/TradeSettleDetail.cs
  73. 18 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/TradeSettleInfo.cs
  74. 536 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Client.cs
  75. 165 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/AlipayTradePayResponse.cs
  76. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/AlipayTradePrecreateResponse.cs
  77. 30 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/TradeFundBill.cs
  78. 58 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/VoucherDetail.cs
  79. 324 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Huabei/Client.cs
  80. 45 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Huabei/Models/AlipayTradeCreateResponse.cs
  81. 22 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Huabei/Models/HuabeiConfig.cs
  82. 139 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Page/Client.cs
  83. 21 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Page/Models/AlipayTradePagePayResponse.cs
  84. 140 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Wap/Client.cs
  85. 21 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Wap/Models/AlipayTradeWapPayResponse.cs
  86. 314 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Security/TextRisk/Client.cs
  87. 49 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Security/TextRisk/Models/AlipaySecurityRiskContentDetectResponse.cs
  88. 114 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Util/AES/Client.cs
  89. 304 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Util/Generic/Client.cs
  90. 37 0
      vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Util/Generic/Models/AlipayOpenApiGenericResponse.cs
  91. 248 0
      vendor/alipaysdk/easysdk/csharp/README.md
  92. 32 0
      vendor/alipaysdk/easysdk/csharp/UnitTest/Base/Image/ClientTest.cs
  93. 42 0
      vendor/alipaysdk/easysdk/csharp/UnitTest/Base/OAuth/ClientTest.cs
  94. 31 0
      vendor/alipaysdk/easysdk/csharp/UnitTest/Base/Qrcode/ClientTest.cs
  95. 32 0
      vendor/alipaysdk/easysdk/csharp/UnitTest/Base/Video/ClientTest.cs
  96. 33 0
      vendor/alipaysdk/easysdk/csharp/UnitTest/Factory/FactoryTest.cs
  97. 22 0
      vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/alipayCertPublicKey_RSA2.crt
  98. 88 0
      vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/alipayRootCert.crt
  99. 23 0
      vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/appCertPublicKey_2019051064521003.crt
  100. 4 0
      vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/privateKey.json

+ 2 - 1
composer.json

@@ -50,7 +50,8 @@
     "ext-iconv": "*",
     "ext-openssl": "*",
     "overtrue/wechat": "^5.30",
-    "joypack/tencent-map": "^1.0"
+    "joypack/tencent-map": "^1.0",
+    "alipaysdk/easysdk": "^2.2"
   },
   "require-dev": {
     "symfony/var-dumper": "^4.2",

+ 112 - 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": "3c25113d4e7779b07a99a823888cd33c",
+    "content-hash": "42efa29f92d7a957b961fb1185458530",
     "packages": [
         {
             "name": "adbario/php-dot-notation",
@@ -468,6 +468,56 @@
             },
             "time": "2023-05-16T06:43:41+00:00"
         },
+        {
+            "name": "alibabacloud/tea-fileform",
+            "version": "0.3.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/alibabacloud-sdk-php/tea-fileform.git",
+                "reference": "4bf0c75a045c8115aa8cb1a394bd08d8bb833181"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/alibabacloud-sdk-php/tea-fileform/zipball/4bf0c75a045c8115aa8cb1a394bd08d8bb833181",
+                "reference": "4bf0c75a045c8115aa8cb1a394bd08d8bb833181",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "alibabacloud/tea": "^3.0",
+                "php": ">5.5"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^4.8.35|^5.4.3"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "AlibabaCloud\\Tea\\FileForm\\": "src"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "Alibaba Cloud SDK",
+                    "email": "sdk-team@alibabacloud.com"
+                }
+            ],
+            "description": "Alibaba Cloud Tea File Library for PHP",
+            "support": {
+                "issues": "https://github.com/alibabacloud-sdk-php/tea-fileform/issues",
+                "source": "https://github.com/alibabacloud-sdk-php/tea-fileform/tree/0.3.4"
+            },
+            "time": "2020-12-01T07:24:35+00:00"
+        },
         {
             "name": "alibabacloud/tea-utils",
             "version": "0.2.21",
@@ -564,6 +614,67 @@
             },
             "time": "2022-08-02T04:12:58+00:00"
         },
+        {
+            "name": "alipaysdk/easysdk",
+            "version": "2.2.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/alipay/alipay-easysdk.git",
+                "reference": "c6008839a22a5fca08e9f8536730f7abfed522d5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/alipay/alipay-easysdk/zipball/c6008839a22a5fca08e9f8536730f7abfed522d5",
+                "reference": "c6008839a22a5fca08e9f8536730f7abfed522d5",
+                "shasum": "",
+                "mirrors": [
+                    {
+                        "url": "https://mirrors.aliyun.com/composer/dists/%package%/%reference%.%type%",
+                        "preferred": true
+                    }
+                ]
+            },
+            "require": {
+                "alibabacloud/tea": "^3.1",
+                "alibabacloud/tea-fileform": "^0.3.2",
+                "ext-ctype": "*",
+                "ext-curl": "*",
+                "ext-dom": "*",
+                "ext-fileinfo": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-openssl": "*",
+                "ext-simplexml": "*",
+                "ext-xmlwriter": "*",
+                "guzzlehttp/guzzle": ">=6.3",
+                "php": ">=7.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^7.5"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Alipay\\EasySDK\\": "php/src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "Apache-2.0"
+            ],
+            "authors": [
+                {
+                    "name": "junying.wjy",
+                    "email": "junying.wjy@antfin.com"
+                }
+            ],
+            "description": "支付宝官方 Alipay Easy SDK",
+            "support": {
+                "source": "https://github.com/alipay/alipay-easysdk/tree/v2.2.3"
+            },
+            "time": "2022-11-28T14:04:57+00:00"
+        },
         {
             "name": "aliyuncs/oss-sdk-php",
             "version": "v2.7.2",

+ 5 - 5
qiniu/basic/BaseModel.php

@@ -132,10 +132,10 @@ abstract class BaseModel extends Model
             $query->with($with);
         })->when($page && $limit, function ($query) use ($page, $limit) {
             $query->page($page, $limit);
-        })->where($order != '', function ($query) use ($order) {
+        })->when($order != '', function ($query) use ($order) {
             $query->order($order);
-        })->where($order == '', function ($query) use ($where) {
-            if ($this->order) {
+        })->when($order == '', function ($query) {
+            if ($this->order != '') {
                 $query->order($this->order);
             } else {
                 $query->order($this->getPk(), 'desc');
@@ -147,9 +147,9 @@ abstract class BaseModel extends Model
     {
         return $this->search($where)->field($field)->when(count($with), function ($query) use ($with) {
             $query->with($with);
-        })->where($order != '', function ($query) use ($order) {
+        })->when($order != '', function ($query) use ($order) {
             $query->order($order);
-        })->where($order == '', function ($query) use ($where) {
+        })->when($order == '', function ($query) {
             if ($this->order) {
                 $query->order($this->order);
             } else {

+ 12 - 0
vendor/alibabacloud/tea-fileform/.gitignore

@@ -0,0 +1,12 @@
+composer.phar
+/vendor/
+
+# Commit your application's lock file https://getcomposer.org/doc/01-basic-usage.md#commit-your-composer-lock-file-to-version-control
+# You may choose to ignore a library lock file http://getcomposer.org/doc/02-libraries.md#lock-file
+composer.lock
+
+.idea
+.DS_Store
+
+cache/
+*.cache

+ 65 - 0
vendor/alibabacloud/tea-fileform/.php_cs.dist

@@ -0,0 +1,65 @@
+<?php
+/*
+ * This document has been generated with
+ * https://mlocati.github.io/php-cs-fixer-configurator/#version:2.15|configurator
+ * you can change this configuration by importing this file.
+ */
+
+return PhpCsFixer\Config::create()
+    ->setRiskyAllowed(true)
+    ->setIndent('    ')
+    ->setRules([
+        '@PSR2'                                       => true,
+        '@PhpCsFixer'                                 => true,
+        '@Symfony:risky'                              => true,
+        'concat_space'                                => ['spacing' => 'one'],
+        'array_syntax'                                => ['syntax' => 'short'],
+        'array_indentation'                           => true,
+        'combine_consecutive_unsets'                  => true,
+        'method_separation'                           => true,
+        'single_quote'                                => true,
+        'declare_equal_normalize'                     => true,
+        'function_typehint_space'                     => true,
+        'hash_to_slash_comment'                       => true,
+        'include'                                     => true,
+        'lowercase_cast'                              => true,
+        'no_multiline_whitespace_before_semicolons'   => true,
+        'no_leading_import_slash'                     => true,
+        'no_multiline_whitespace_around_double_arrow' => true,
+        'no_spaces_around_offset'                     => true,
+        'no_unneeded_control_parentheses'             => true,
+        'no_unused_imports'                           => true,
+        'no_whitespace_before_comma_in_array'         => true,
+        'no_whitespace_in_blank_line'                 => true,
+        'object_operator_without_whitespace'          => true,
+        'single_blank_line_before_namespace'          => true,
+        'single_class_element_per_statement'          => true,
+        'space_after_semicolon'                       => true,
+        'standardize_not_equals'                      => true,
+        'ternary_operator_spaces'                     => true,
+        'trailing_comma_in_multiline_array'           => true,
+        'trim_array_spaces'                           => true,
+        'unary_operator_spaces'                       => true,
+        'whitespace_after_comma_in_array'             => true,
+        'no_extra_consecutive_blank_lines'            => [
+            'curly_brace_block',
+            'extra',
+            'parenthesis_brace_block',
+            'square_brace_block',
+            'throw',
+            'use',
+        ],
+        'binary_operator_spaces'       => [
+            'align_double_arrow' => true,
+            'align_equals'       => true,
+        ],
+        'braces'                                    => [
+            'allow_single_line_closure' => true,
+        ],
+    ])
+    ->setFinder(
+        PhpCsFixer\Finder::create()
+            ->exclude('vendor')
+            ->exclude('tests')
+            ->in(__DIR__)
+  );

+ 31 - 0
vendor/alibabacloud/tea-fileform/README-CN.md

@@ -0,0 +1,31 @@
+English | [简体中文](README-CN.md)
+
+![](https://aliyunsdk-pages.alicdn.com/icons/AlibabaCloud.svg)
+
+## Alibaba Cloud Tea File Library for PHP
+
+## Installation
+
+### Composer
+
+```bash
+composer require alibabacloud/tea-fileform
+```
+
+## Issues
+
+[Opening an Issue](https://github.com/aliyun/tea-fileform/issues/new), Issues not conforming to the guidelines may be closed immediately.
+
+## Changelog
+
+Detailed changes for each release are documented in the [release notes](./ChangeLog.txt).
+
+## References
+
+* [Latest Release](https://github.com/aliyun/tea-fileform)
+
+## License
+
+[Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)
+
+Copyright (c) 2009-present, Alibaba Cloud All rights reserved.

+ 31 - 0
vendor/alibabacloud/tea-fileform/README.md

@@ -0,0 +1,31 @@
+[English](README.md) | 简体中文
+
+![](https://aliyunsdk-pages.alicdn.com/icons/AlibabaCloud.svg)
+
+## Alibaba Cloud Tea File Library for PHP
+
+## 安装
+
+### Composer
+
+```bash
+composer require alibabacloud/tea-fileform
+```
+
+## 问题
+
+[提交 Issue](https://github.com/aliyun/tea-fileform/issues/new),不符合指南的问题可能会立即关闭。
+
+## 发行说明
+
+每个版本的详细更改记录在[发行说明](./ChangeLog.txt)中。
+
+## 相关
+
+* [最新源码](https://github.com/aliyun/tea-fileform)
+
+## 许可证
+
+[Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0)
+
+Copyright (c) 2009-present, Alibaba Cloud All rights reserved.

+ 44 - 0
vendor/alibabacloud/tea-fileform/composer.json

@@ -0,0 +1,44 @@
+{
+  "name": "alibabacloud/tea-fileform",
+  "description": "Alibaba Cloud Tea File Library for PHP",
+  "type": "library",
+  "license": "Apache-2.0",
+  "authors": [
+    {
+      "name": "Alibaba Cloud SDK",
+      "email": "sdk-team@alibabacloud.com"
+    }
+  ],
+  "require": {
+    "php": ">5.5",
+    "alibabacloud/tea": "^3.0"
+  },
+  "require-dev": {
+    "phpunit/phpunit": "^4.8.35|^5.4.3"
+  },
+  "autoload": {
+    "psr-4": {
+      "AlibabaCloud\\Tea\\FileForm\\": "src"
+    }
+  },
+  "autoload-dev": {
+    "psr-4": {
+      "AlibabaCloud\\Tea\\FileForm\\Tests\\": "tests"
+    }
+  },
+  "scripts": {
+    "fixer": "php-cs-fixer fix ./",
+    "test": [
+      "@clearCache",
+      "phpunit --colors=always"
+    ],
+    "clearCache": "rm -rf cache/*"
+  },
+  "config": {
+    "sort-packages": true,
+    "preferred-install": "dist",
+    "optimize-autoloader": true
+  },
+  "prefer-stable": true,
+  "minimum-stability": "dev"
+}

+ 32 - 0
vendor/alibabacloud/tea-fileform/phpunit.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit bootstrap="./tests/bootstrap.php" colors="true" processIsolation="false" stopOnFailure="false"
+         convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true"
+         testSuiteLoaderFile="phpunit/src/Runner/StandardTestSuiteLoader.php">
+
+    <testsuites>
+        <testsuite name="All">
+            <directory>tests</directory>
+        </testsuite>
+        <testsuite name="Unit">
+            <directory suffix="Test.php">./tests/Unit</directory>
+        </testsuite>
+    </testsuites>
+
+    <groups>
+        <exclude>
+            <group>integration</group>
+        </exclude>
+    </groups>
+
+    <logging>
+        <log type="coverage-html" target="cache/coverage" lowUpperBound="35" highLowerBound="70"/>
+        <log type="coverage-clover" target="cache/coverage.clover"/>
+    </logging>
+
+
+    <filter>
+        <whitelist processUncoveredFilesFromWhitelist="true">
+            <directory suffix=".php">./src</directory>
+        </whitelist>
+    </filter>
+</phpunit>

+ 16 - 0
vendor/alibabacloud/tea-fileform/src/FileForm.php

@@ -0,0 +1,16 @@
+<?php
+
+namespace AlibabaCloud\Tea\FileForm;
+
+class FileForm
+{
+    public static function getBoundary()
+    {
+        return (string) (mt_rand(10000000000000, 99999999999999));
+    }
+
+    public static function toFileForm($map, $boundary)
+    {
+        return new FileFormStream($map, $boundary);
+    }
+}

+ 22 - 0
vendor/alibabacloud/tea-fileform/src/FileForm/FileField.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace AlibabaCloud\Tea\FileForm\FileForm;
+
+use AlibabaCloud\Tea\Model;
+
+class FileField extends Model
+{
+    public $filename;
+    public $contentType;
+    public $content;
+
+    public function __construct($config = [])
+    {
+        $this->_required = [
+            'filename'    => true,
+            'contentType' => true,
+            'content'     => true,
+        ];
+        parent::__construct($config);
+    }
+}

+ 321 - 0
vendor/alibabacloud/tea-fileform/src/FileFormStream.php

@@ -0,0 +1,321 @@
+<?php
+
+namespace AlibabaCloud\Tea\FileForm;
+
+use AlibabaCloud\Tea\FileForm\FileForm\FileField;
+use GuzzleHttp\Psr7\Stream;
+use Psr\Http\Message\StreamInterface;
+
+/**
+ * @internal
+ * @coversNothing
+ */
+class FileFormStream implements StreamInterface
+{
+    /**
+     * @var resource
+     */
+    private $stream;
+    private $index     = 0;
+    private $form      = [];
+    private $boundary  = '';
+    private $streaming = false;
+    private $keys      = [];
+
+    /**
+     * @var Stream
+     */
+    private $currStream;
+
+    private $size;
+    private $uri;
+    private $seekable;
+    private $readable = true;
+    private $writable = true;
+
+    public function __construct($map, $boundary)
+    {
+        $this->stream   = fopen('php://memory', 'a+');
+        $this->form     = $map;
+        $this->boundary = $boundary;
+        $this->keys     = array_keys($map);
+        do {
+            $read = $this->readForm(1024);
+        } while (null !== $read);
+        $meta           = stream_get_meta_data($this->stream);
+        $this->seekable = $meta['seekable'];
+        $this->uri      = $this->getMetadata('uri');
+        $this->seek(0);
+        $this->seek(0);
+    }
+
+    /**
+     * Closes the stream when the destructed.
+     */
+    public function __destruct()
+    {
+        $this->close();
+    }
+
+    public function __toString()
+    {
+        try {
+            $this->seek(0);
+
+            return (string) stream_get_contents($this->stream);
+        } catch (\Exception $e) {
+            return '';
+        }
+    }
+
+    /**
+     * @param int $length
+     *
+     * @return false|int|string
+     */
+    public function readForm($length)
+    {
+        if ($this->streaming) {
+            if (null !== $this->currStream) {
+                // @var string $content
+                $content = $this->currStream->read($length);
+                if (false !== $content && '' !== $content) {
+                    fwrite($this->stream, $content);
+
+                    return $content;
+                }
+
+                return $this->next("\r\n");
+            }
+
+            return $this->next();
+        }
+        $keysCount = \count($this->keys);
+        if ($this->index > $keysCount) {
+            return null;
+        }
+        if ($keysCount > 0) {
+            if ($this->index < $keysCount) {
+                $this->streaming = true;
+
+                $name  = $this->keys[$this->index];
+                $field = $this->form[$name];
+                if (!empty($field) && $field instanceof FileField) {
+                    if (!empty($field->content)) {
+                        $this->currStream = $field->content;
+
+                        $str = '--' . $this->boundary . "\r\n" .
+                            'Content-Disposition: form-data; name="' . $name . '"; filename="' . $field->filename . "\"\r\n" .
+                            'Content-Type: ' . $field->contentType . "\r\n\r\n";
+                        $this->write($str);
+
+                        return $str;
+                    }
+
+                    return $this->next();
+                }
+                $val = $field;
+                $str = '--' . $this->boundary . "\r\n" .
+                    'Content-Disposition: form-data; name="' . $name . "\"\r\n\r\n" .
+                    $val . "\r\n";
+                fwrite($this->stream, $str);
+
+                return $str;
+            }
+            if ($this->index == $keysCount) {
+                return $this->next('--' . $this->boundary . "--\r\n");
+            }
+
+            return null;
+        }
+
+        return null;
+    }
+
+    public function getContents()
+    {
+        if (!isset($this->stream)) {
+            throw new \RuntimeException('Stream is detached');
+        }
+
+        $contents = stream_get_contents($this->stream);
+
+        if (false === $contents) {
+            throw new \RuntimeException('Unable to read stream contents');
+        }
+
+        return $contents;
+    }
+
+    public function close()
+    {
+        if (isset($this->stream)) {
+            if (\is_resource($this->stream)) {
+                fclose($this->stream);
+            }
+            $this->detach();
+        }
+    }
+
+    public function detach()
+    {
+        if (!isset($this->stream)) {
+            return null;
+        }
+
+        $result = $this->stream;
+        unset($this->stream);
+        $this->size = $this->uri = null;
+
+        return $result;
+    }
+
+    public function getSize()
+    {
+        if (null !== $this->size) {
+            return $this->size;
+        }
+
+        if (!isset($this->stream)) {
+            return null;
+        }
+
+        // Clear the stat cache if the stream has a URI
+        if ($this->uri) {
+            clearstatcache(true, $this->uri);
+        }
+
+        $stats = fstat($this->stream);
+        if (isset($stats['size'])) {
+            $this->size = $stats['size'];
+
+            return $this->size;
+        }
+
+        return null;
+    }
+
+    public function isReadable()
+    {
+        return $this->readable;
+    }
+
+    public function isWritable()
+    {
+        return $this->writable;
+    }
+
+    public function isSeekable()
+    {
+        return $this->seekable;
+    }
+
+    public function eof()
+    {
+        if (!isset($this->stream)) {
+            throw new \RuntimeException('Stream is detached');
+        }
+
+        return feof($this->stream);
+    }
+
+    public function tell()
+    {
+        if (!isset($this->stream)) {
+            throw new \RuntimeException('Stream is detached');
+        }
+
+        $result = ftell($this->stream);
+
+        if (false === $result) {
+            throw new \RuntimeException('Unable to determine stream position');
+        }
+
+        return $result;
+    }
+
+    public function rewind()
+    {
+        $this->seek(0);
+    }
+
+    public function seek($offset, $whence = SEEK_SET)
+    {
+        $whence = (int) $whence;
+
+        if (!isset($this->stream)) {
+            throw new \RuntimeException('Stream is detached');
+        }
+        if (!$this->seekable) {
+            throw new \RuntimeException('Stream is not seekable');
+        }
+        if (-1 === fseek($this->stream, $offset, $whence)) {
+            throw new \RuntimeException('Unable to seek to stream position ' . $offset . ' with whence ' . var_export($whence, true));
+        }
+    }
+
+    public function read($length)
+    {
+        if (!isset($this->stream)) {
+            throw new \RuntimeException('Stream is detached');
+        }
+        if (!$this->readable) {
+            throw new \RuntimeException('Cannot read from non-readable stream');
+        }
+        if ($length < 0) {
+            throw new \RuntimeException('Length parameter cannot be negative');
+        }
+
+        if (0 === $length) {
+            return '';
+        }
+
+        $string = fread($this->stream, $length);
+        if (false === $string) {
+            throw new \RuntimeException('Unable to read from stream');
+        }
+
+        return $string;
+    }
+
+    public function write($string)
+    {
+        if (!isset($this->stream)) {
+            throw new \RuntimeException('Stream is detached');
+        }
+        if (!$this->writable) {
+            throw new \RuntimeException('Cannot write to a non-writable stream');
+        }
+
+        // We can't know the size after writing anything
+        $this->size = null;
+        $result     = fwrite($this->stream, $string);
+
+        if (false === $result) {
+            throw new \RuntimeException('Unable to write to stream');
+        }
+
+        return $result;
+    }
+
+    public function getMetadata($key = null)
+    {
+        if (!isset($this->stream)) {
+            return $key ? null : [];
+        }
+
+        $meta = stream_get_meta_data($this->stream);
+
+        return isset($meta[$key]) ? $meta[$key] : null;
+    }
+
+    private function next($endStr = '')
+    {
+        $this->streaming = false;
+        ++$this->index;
+        $this->write($endStr);
+        $this->currStream = null;
+
+        return $endStr;
+    }
+}

+ 81 - 0
vendor/alibabacloud/tea-fileform/tests/FileFormTest.php

@@ -0,0 +1,81 @@
+<?php
+
+namespace AlibabaCloud\Tea\FileForm\Tests;
+
+use AlibabaCloud\Tea\FileForm\FileForm;
+use AlibabaCloud\Tea\FileForm\FileForm\FileField;
+use AlibabaCloud\Tea\FileForm\FileFormStream;
+use GuzzleHttp\Psr7\Stream;
+use PHPUnit\Framework\TestCase;
+
+/**
+ * @internal
+ * @coversNothing
+ */
+class FileFormTest extends TestCase
+{
+    public function testFileFromStream()
+    {
+        $boundary = FileForm::getBoundary();
+        $stream   = FileForm::toFileForm([], $boundary);
+        $this->assertTrue($stream instanceof FileFormStream);
+        $stream->write($boundary);
+        $this->assertTrue(\strlen($boundary) === $stream->getSize());
+    }
+
+    public function testSet()
+    {
+        $fileField = new FileField([
+            'filename'    => 'fake filename',
+            'contentType' => 'content type',
+            'content'     => null,
+        ]);
+
+        $this->assertEquals('fake filename', $fileField->filename);
+        $this->assertEquals('content type', $fileField->contentType);
+    }
+
+    public function testRead()
+    {
+        $fileField              = new FileField();
+        $fileField->filename    = 'haveContent';
+        $fileField->contentType = 'contentType';
+        $fileField->content     = new Stream(fopen('data://text/plain;base64,' . base64_encode('This is file test. This sentence must be long'), 'r'));
+
+        $fileFieldNoContent              = new FileField();
+        $fileFieldNoContent->filename    = 'noContent';
+        $fileFieldNoContent->contentType = 'contentType';
+        $fileFieldNoContent->content     = null;
+
+        $map = [
+            'key'      => 'value',
+            'testKey'  => 'testValue',
+            'haveFile' => $fileField,
+            'noFile'   => $fileFieldNoContent,
+        ];
+
+        $stream = FileForm::toFileForm($map, 'testBoundary');
+
+        $result = $stream->getContents();
+        $target = "--testBoundary\r\nContent-Disposition: form-data; name=\"key\"\r\n\r\nvalue\r\n--testBoundary\r\nContent-Disposition: form-data; name=\"testKey\"\r\n\r\ntestValue\r\n--testBoundary\r\nContent-Disposition: form-data; name=\"haveFile\"; filename=\"haveContent\"\r\nContent-Type: contentType\r\n\r\nThis is file test. This sentence must be long\r\n--testBoundary--\r\n";
+
+        $this->assertEquals($target, $result);
+    }
+
+    public function testReadFile()
+    {
+        $fileField              = new FileField();
+        $fileField->filename    = 'composer.json';
+        $fileField->contentType = 'application/json';
+        $fileField->content     = new Stream(fopen(__DIR__ . '/../composer.json', 'r'));
+        $map                    = [
+            'name'      => 'json_file',
+            'type'      => 'application/json',
+            'json_file' => $fileField,
+        ];
+
+        $boundary   = FileForm::getBoundary();
+        $fileStream = FileForm::toFileForm($map, $boundary);
+        $this->assertTrue(false !== strpos($fileStream->getContents(), 'json_file'));
+    }
+}

+ 3 - 0
vendor/alibabacloud/tea-fileform/tests/bootstrap.php

@@ -0,0 +1,3 @@
+<?php
+
+require dirname(__DIR__) . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';

+ 1 - 0
vendor/alipaysdk/easysdk/.gitattributes

@@ -0,0 +1 @@
+*.* linguist-language=java

+ 16 - 0
vendor/alipaysdk/easysdk/.gitignore

@@ -0,0 +1,16 @@
+.DS_Store
+node_modules
+logs
+.libraries.json
+libraries
+
+.idea
+*.iml
+target
+dependency-reduced-pom.xml
+
+bin
+obj
+.vs
+
+publish/alipay-easysdk

+ 822 - 0
vendor/alipaysdk/easysdk/APIDoc.md

@@ -0,0 +1,822 @@
+# 基础能力 Base
+## 用户授权 OAuth
+### 获取授权访问令牌
+* API声明
+
+getToken(code: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| code | string | 是  |  授权码,用户对应用授权后得到  |
+
+* 出参说明
+
+可前往[alipay.system.oauth.token](https://docs.open.alipay.com/api_9/alipay.system.oauth.token)查看更加详细的参数说明。
+
+### 刷新授权访问令牌
+* API声明
+
+refreshToken(refreshToken: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| refreshToken | string | 是  |  刷新令牌,上次换取访问令牌时得到,见出参的refresh_token字段  |
+
+* 出参说明
+
+可前往[alipay.system.oauth.token](https://docs.open.alipay.com/api_9/alipay.system.oauth.token)查看更加详细的参数说明。
+
+---
+
+## 小程序二维码 Qrcode
+### 创建小程序二维码
+* API声明
+
+create(urlParam: string, queryParam: string, describe: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| urlParam | string | 是  |  小程序中能访问到的页面路径,例如:page/component/component-pages/view/view  |
+| queryParam | string | 是  |  小程序的启动参数,打开小程序的query ,在小程序 onLaunch的方法中获取  |
+| describe | string | 是  |  二维码描述  |
+
+* 出参说明
+
+可前往[alipay.open.app.qrcode.create](https://docs.open.alipay.com/api_5/alipay.open.app.qrcode.create)查看更加详细的参数说明。
+
+---
+
+## 图片 Image
+### 上传图片
+* API声明
+
+upload(imageName: string, imageFilePath: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| imageName | string | 是  |  图片名称  |
+| imageFilePath | string | 是  |  待上传的本地图片文件路径 |
+
+* 出参说明
+
+可前往[alipay.offline.material.image.upload](https://docs.open.alipay.com/api_3/alipay.offline.material.image.upload)查看更加详细的参数说明。
+
+---
+
+## 视频 Video
+### 上传视频
+* API声明
+
+upload(videoName: string, videoFilePath: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| videoName | string | 是  |  视频名称  |
+| videoFilePath | string | 是  |  待上传的本地视频文件路径 |
+
+* 出参说明
+
+可前往[alipay.offline.material.image.upload](https://docs.open.alipay.com/api_3/alipay.offline.material.image.upload)查看更加详细的参数说明。
+
+---
+
+# 营销能力 Marketing
+## 生活号 OpenLife
+### 创建图文消息内容
+* API声明
+
+createImageTextContent(title: string, cover: string, content: string, contentComment: string, ctype: string, benefit: string, extTags: string, loginIds: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| title | string | 是  |  标题  |
+| cover | string | 是  | 封面图URL, 尺寸为996*450,最大不超过3M,支持.jpg、.png格式,请先调用上传图片接口获得图片URL  |
+| content | string | 是  |  消息正文(支持富文本)  |
+| contentComment | string | 否  |  是否允许评论,T:允许,F:不允许,默认不允许  |
+| ctype | string | 否  |  图文类型:填activity表示活动图文,不填默认普通图文  |
+| benefit | string | 否  |  活动利益点,图文类型ctype为activity类型时才需要传,最多10个字符  |
+| extTags | string | 否  |  关键词列表,英文逗号分隔,最多不超过5个  |
+| loginIds | string | 否  |  可预览支付宝账号列表,需要预览时才填写, 英文逗号分隔,最多不超过10个  |
+
+* 出参说明
+
+可前往[alipay.open.public.message.content.create](https://docs.open.alipay.com/api_6/alipay.open.public.message.content.create)查看更加详细的参数说明。
+
+### 更新图文消息内容
+* API声明
+
+modifyImageTextContent(contentId: string, title: string, cover: string, content: string, couldComment: string, ctype: string, benefit: string, extTags: string, loginIds: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| contentId | string | 是  |  内容ID,通过创建图文内容消息接口返回  |
+| title | string | 是  |  标题  |
+| cover | string | 是  | 封面图URL, 尺寸为996*450,最大不超过3M,支持.jpg、.png格式,请先调用上传图片接口获得图片URL  |
+| content | string | 是  |  消息正文(支持富文本)  |
+| contentComment | string | 否  |  是否允许评论,T:允许,F:不允许,默认不允许  |
+| ctype | string | 否  |  图文类型:填activity表示活动图文,不填默认普通图文  |
+| benefit | string | 否  |  活动利益点,图文类型ctype为activity类型时才需要传,最多10个字符  |
+| extTags | string | 否  |  关键词列表,英文逗号分隔,最多不超过5个  |
+| loginIds | string | 否  |  可预览支付宝账号列表,需要预览时才填写, 英文逗号分隔,最多不超过10个  |
+
+* 出参说明
+
+可前往[alipay.open.public.message.content.modify](https://docs.open.alipay.com/api_6/alipay.open.public.message.content.modify)查看更加详细的参数说明。
+
+### 群发本文消息
+* API声明
+
+sendText(text: string)
+			
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| text | string | 是  |  文本消息内容  |
+
+* 出参说明
+
+可前往[alipay.open.public.message.total.send](https://docs.open.alipay.com/api_6/alipay.open.public.message.total.send)查看更加详细的参数说明。
+
+### 群发图文消息
+* API声明
+
+sendImageText(articles: [ Article ])
+			
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| articles | Article数组 | 是  |  图文消息内容  |
+
+Article对象说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| title | string | 否  |   图文消息标题 |
+| desc | string | 是  |  图文消息描述   |
+| imageUrl | string | 特殊可选  |  图片链接,对于多条图文消息的第一条消息,该字段不能为空,请先调用上传图片接口获得图片URL  |
+| url | string | 是  |  点击图文消息跳转的链接  |
+| actionName | string | 否  |  链接文字   |
+
+* 出参说明
+
+可前往[alipay.open.public.message.total.send](https://docs.open.alipay.com/api_6/alipay.open.public.message.total.send)查看更加详细的参数说明。
+
+### 单发模板消息
+* API声明
+
+sendSingleMessage(toUserId: string, template: Template)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| toUserId | string | 是  |  消息接收用户的UserId  |
+| template | Template | 是  |  消息接收用户的UserId  |
+
+Template对象说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| templateId | string | 是  |  消息模板ID |
+| context | Context | 是  |  消息模板上下文,即模板中定义的参数及参数值 |
+
+Context对象说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| headColor | string | 是  |  顶部色条的色值,比如#85be53 |
+| url | string | 是  |  点击消息后承接页的地址 |
+| actionName | string | 是 |  底部链接描述文字,如:“查看详情”,最多能传8个汉字或16个英文字符 |
+| keyword1 | Keyword | 否  |  模板中占位符的值及文字颜色 |
+| keyword2 | Keyword | 否  |  模板中占位符的值及文字颜色 |
+| first | Keyword | 否  |  模板中占位符的值及文字颜色  |
+| remark | Keyword | 否  |  模板中占位符的值及文字颜色 |
+
+Keyword对象说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| color | string | 是  | 当前文字颜色,比如#85be53 |
+| value | string | 是  |  模板中占位符的值  |
+
+* 出参说明
+
+可前往[alipay.open.public.message.single.send](https://docs.open.alipay.com/api_6/alipay.open.public.message.single.send)查看更加详细的参数说明。
+
+### 生活号消息撤回
+* API声明
+
+recallMessage(messageId: string)
+			
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| messageId | string | 是  |  消息ID  |
+
+* 出参说明
+
+可前往[alipay.open.public.life.msg.recall](https://docs.open.alipay.com/api_6/alipay.open.public.life.msg.recall)查看更加详细的参数说明。
+
+### 模板消息行业设置
+* API声明
+
+setIndustry(primaryIndustryCode: string, primaryIndustryName: string, secondaryIndustryCode: string, secondaryIndustryName: string)
+			
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| primaryIndustryCode | string | 是  |  服务窗消息模板所属主行业一级编码,查看[行业信息](https://alipay.open.taobao.com/doc2/detail?treeId=197&docType=1&articleId=105043)  |
+| primaryIndustryName | string | 是  |  服务窗消息模板所属主行业一级名称  |
+| secondaryIndustryCode | string | 是  |  服务窗消息模板所属主行业二级编码 |
+| secondaryIndustryName | string | 是  |  服务窗消息模板所属主行业二级名称  |
+
+* 出参说明
+
+可前往[alipay.open.public.template.message.industry.modify](https://docs.open.alipay.com/api_6/alipay.open.public.template.message.industry.modify)查看更加详细的参数说明。
+
+### 生活号查询行业设置
+* API声明
+
+getIndustry()
+			
+* 入参说明
+
+无
+
+* 出参说明
+
+可前往[alipay.open.public.setting.category.query](https://docs.open.alipay.com/api_6/alipay.open.public.setting.category.query)查看更加详细的参数说明。
+
+---
+
+
+## 支付宝卡包 Pass
+### 卡券模板创建
+* API声明
+
+createTemplate(uniqueId: string, tplContent: string)
+			
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| uniqueId | string | 是  |  商户用于控制模版的唯一性(可以使用时间戳保证唯一性)  |
+| tplContent | string | 是  |  模板内容信息,遵循JSON规范,详情参见tpl_content[参数说明](https://doc.open.alipay.com/doc2/detail.htm?treeId=193&articleId=105249&docType=1#tpl_content)   |
+
+* 出参说明
+
+可前往[alipay.pass.template.add](https://docs.open.alipay.com/api_24/alipay.pass.template.add)查看更加详细的参数说明。
+
+### 卡券模板更新
+* API声明
+
+updateTemplate(uniqueId: string, tplContent: string)
+			
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| uniqueId | string | 是  |  商户用于控制模版的唯一性(可以使用时间戳保证唯一性)  |
+| tplContent | string | 是  |  模板内容信息,遵循JSON规范,详情参见tpl_content[参数说明](https://doc.open.alipay.com/doc2/detail.htm?treeId=193&articleId=105249&docType=1#tpl_content)   |
+
+* 出参说明
+
+可前往[alipay.pass.template.update](https://docs.open.alipay.com/api_24/alipay.pass.template.update)查看更加详细的参数说明。
+
+### 卡券实例发放
+* API声明
+
+addInstance(tplId: string, tplParams: string, recognitionType: string, recognitionInfo: string)
+			
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| tplId | string | 是  |  支付宝pass模版ID,即调用模板创建接口时返回的tpl_id  |
+| tplParams | string | 是  |  模版动态参数信息,对应模板中$变量名$的动态参数,见模板创建接口返回值中的tpl_params字段。示例:  |
+| recognitionType | string | 是  |  Alipass添加对象识别类型,填写“1”表示订单信息  |
+| recognitionInfo | string | 是  |  支付宝用户识别信息,参见[UID发券组件对接文档](https://docs.open.alipay.com/199/sy3hs4 ) |
+
+* 出参说明
+
+可前往[alipay.pass.instance.add](https://docs.open.alipay.com/api_24/alipay.pass.instance.add)查看更加详细的参数说明。
+
+### 卡券实例更新
+* API声明
+
+updateInstance(serialNumber: string, channelId: string, tplParams: string, status: string, verifyCode: string, verifyType: string)
+			
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| serialNumber | string | 是  |  商户指定卡券唯一值,卡券JSON模板中fileInfo->serialNumber字段对应的值  |
+| channelId | string | 是  |  代理商代替商户发放卡券后,再代替商户更新卡券时,此值为商户的PID/AppID  |
+| tplParams | string | 否  |  Alipass添加对象识别类型,填写“1”表示订单信息  |
+| status | string | 否  |  券状态,支持更新为USED、CLOSED两种状态 |
+| verifyCode | string | 否  |  核销码串值(当状态变更为USED时,建议传),该值正常为模板中核销区域(Operation)对应的message值 |
+| verifyType | string | 否  |  核销方式,该值正常为模板中核销区域(Operation)对应的format值,verifyCode和verifyType需同时传入 |
+
+* 出参说明
+
+可前往[alipay.pass.instance.update](https://docs.open.alipay.com/api_24/alipay.pass.instance.update)查看更加详细的参数说明。
+
+---
+
+
+## 小程序模板消息 TemplateMessage
+### 发送模板消息
+* API声明
+
+send(toUserId: string, formId: string, userTemplateId: string, page: string, data: string)
+			
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| toUserId | string | 是  |  发送消息的支付宝账号  |
+| formId | string | 是  |  用户发生的交易行为的交易号,或者用户在小程序产生表单提交的表单号,用于信息发送的校验  |
+| userTemplateId | string | 是  |  用户申请的模板id号,固定的模板id会发送固定的消息  |
+| page | string | 是  |  小程序的跳转页面,用于消息中心用户点击之后详细跳转的小程序页面,例如:page/component/index |
+| data | string | 是  |  开发者需要发送模板消息中的自定义部分来替换模板的占位符,例如:{"keyword1": {"value" : "12:00"},"keyword2": {"value" : "20180808"},"keyword3": {"value" : "支付宝"}}  |
+
+* 出参说明
+
+可前往[alipay.open.app.mini.templatemessage.send](https://docs.open.alipay.com/api_5/alipay.open.app.mini.templatemessage.send)查看更加详细的参数说明。
+
+---
+
+
+# 会员能力 Member
+## 支付宝身份认证 Identification
+### 身份认证初始化
+* API声明
+
+init(outerOrderNo: string, bizCode: string, identityParam: IdentityParam, merchantConfig: MerchantConfig)
+			
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| outerOrderNo | string | 是  |  商户请求的唯一标识,商户要保证其唯一性,值为32位长度的字母数字组合,建议前面几位字符是商户自定义的简称,中间可以使用一段时间,后段可以使用一个随机或递增序列  |
+| bizCode | string | 是  |  认证场景码,入参支持的认证场景码和商户签约的认证场景相关,可选值有如下,FACE:多因子人脸认证;CERT_PHOTO:多因子证照认证;CERT_PHOTO_FACE:多因子证照和人脸认证;SMART_FACE:多因子快捷认证  |
+| identityParam | IdentityParam | 是  |   需要验证的身份信息参数  |
+| merchantConfig | MerchantConfig | 是  |  商户个性化配置  |
+
+IdentityParam对象说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| identityType | string | 是  |  身份信息参数类型,必须传入CERT_INFO  |
+| certType | string | 是  |  证件类型,当前支持身份证,必须传入IDENTITY_CARD  |
+| certName | string | 是  |  真实姓名 |
+| certNo | string | 是  |  证件号码  |
+
+MerchantConfig对象说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| returnUrl | string | 是  |  需要回跳的目标URL地址,一般指定为商户业务页面  |
+
+* 出参说明
+
+可前往[alipay.user.certify.open.initialize](https://docs.open.alipay.com/api_2/alipay.user.certify.open.initialize)查看更加详细的参数说明。
+
+### 生成认证链接
+* API声明
+
+certify(certifyId: string)
+			
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| certifyId | string | 是  |  本次申请操作的唯一标识,由身份认证初始化接口调用后生成,后续的操作都需要用到  |
+
+* 出参说明
+
+可前往[alipay.user.certify.open.certify](https://docs.open.alipay.com/api_2/alipay.user.certify.open.certify)查看更加详细的参数说明。
+
+### 身份认证记录查询
+* API声明
+
+query(certifyId: string)
+			
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| certifyId | string | 是  |  身份认证操作的唯一标识,由身份认证初始化接口调用后生成  |
+
+* 出参说明
+
+可前往[alipay.user.certify.open.query](https://docs.open.alipay.com/api_2/alipay.user.certify.open.query)查看更加详细的参数说明。
+
+---
+
+
+# 支付能力 Payment
+## 通用接口 Common
+### 创建交易
+* API声明
+
+create(subject: string, outTradeNo: string, totalAmount: string, buyerId: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| subject | string | 是  |  订单标题  |
+| outTradeNo | string | 是  | 商户订单号,64个字符以内,可包含字母、数字、下划线,需保证在商户端不重复  |
+| totalAmount | string | 是  | 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]  |
+| buyerId | string | 是 | 买家的支付宝唯一用户号(2088开头的16位纯数字)  |
+
+* 出参说明
+
+可前往[alipay.trade.create](https://docs.open.alipay.com/api_1/alipay.trade.create)查看更加详细的参数说明。
+
+### 查询交易
+* API声明
+
+query(outTradeNo: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| outTradeNo | string | 是  |  交易创建时传入的商户订单号  |
+
+* 出参说明
+
+可前往[alipay.trade.query](https://docs.open.alipay.com/api_1/alipay.trade.query)查看更加详细的参数说明。
+
+### 交易退款
+* API声明
+
+refund(outTradeNo: string, refundAmount: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| outTradeNo | string | 是  |  交易创建时传入的商户订单号  |
+| refundAmount | string | 是  |  需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数  |
+
+* 出参说明
+
+可前往[alipay.trade.refund](https://docs.open.alipay.com/api_1/alipay.trade.refund)查看更加详细的参数说明。
+
+### 关闭交易
+* API声明
+
+close(outTradeNo: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| outTradeNo | string | 是  |  交易创建时传入的商户订单号  |
+
+* 出参说明
+
+可前往[alipay.trade.close](https://docs.open.alipay.com/api_1/alipay.trade.close)查看更加详细的参数说明。
+
+### 撤销交易
+* API声明
+
+cancel(outTradeNo: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| outTradeNo | string | 是  |  交易创建时传入的商户订单号  |
+
+* 出参说明
+
+可前往[alipay.trade.cancel](https://docs.open.alipay.com/api_1/alipay.trade.cancel)查看更加详细的参数说明。
+
+### 交易退款查询
+* API声明
+
+queryRefund(outTradeNo: string, outRequestNo: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| outTradeNo | string | 是  |  交易创建时传入的商户订单号  |
+| outRequestNo | string | 是  |  请求退款接口时,传入的退款请求号,如果在退款请求时未传入,则该值为创建交易时的外部交易号  |
+
+* 出参说明
+
+可前往[alipay.trade.fastpay.refund.query](https://opendocs.alipay.com/apis/api_1/alipay.trade.fastpay.refund.query)查看更加详细的参数说明。
+
+
+### 查询对账单下载地址
+* API声明
+
+downloadBill(billType: string, billDate: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| billType | string | 是  |  账单类型,商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型:trade、signcustomer;trade指商户基于支付宝交易收单的业务账单;signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单  |
+| billDate | string | 是  |  账单时间:日账单格式为yyyy-MM-dd,最早可下载2016年1月1日开始的日账单;月账单格式为yyyy-MM,最早可下载2016年1月开始的月账单  |
+
+* 出参说明
+
+可前往[alipay.data.dataservice.bill.downloadurl.query](https://opendocs.alipay.com/apis/api_15/alipay.data.dataservice.bill.downloadurl.query)查看更加详细的参数说明。
+
+
+### 异步通知验签
+* API声明
+
+verifyNotify(parameters: map[string]string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| parameters | map[string]string | 是  |  异步通知中收到的待验签的所有参数 |
+
+---
+
+## 花呗分期 Huabei
+### 创建花呗分期交易
+* API声明
+
+create(subject: string, outTradeNo: string, totalAmount: string, buyerId: string, extendParams: HuabeiConfig)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| subject | string | 是  |  订单标题  |
+| outTradeNo | string | 是  | 商户订单号,64个字符以内,可包含字母、数字、下划线,需保证在商户端不重复  |
+| totalAmount | string | 是  | 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]  |
+| buyerId | string | 是 | 买家的支付宝用户ID,如果为空,会从传入的码值信息中获取买家ID  |
+| extendParams | HuabeiConfig | 是  |  花呗交易扩展参数  |
+
+HuabeiConfig对象说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| hbFqNum | string | 是  | 花呗分期数,仅支持传入3、6、12  |
+| hbFqSellerPercent | string | 是  | 代表卖家承担收费比例,商家承担手续费传入100,用户承担手续费传入0,仅支持传入100、0两种  |
+
+
+* 出参说明
+
+可前往[alipay.trade.create](https://docs.open.alipay.com/api_1/alipay.trade.create)查看更加详细的参数说明。
+
+--- 
+
+<a name="faceToFace"/>
+
+## 当面付 FaceToFace
+### 当面付交易付款
+* API声明
+
+pay(subject: string, outTradeNo: string, totalAmount: string, authCode: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| subject | string | 是  |  订单标题  |
+| outTradeNo | string | 是  |  交易创建时传入的商户订单号  |
+| totalAmount | string | 是  |  订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]  |
+| authCode | string | 是  |  支付授权码,即买家的付款码数字  |
+
+* 出参说明
+
+可前往[alipay.trade.pay](https://docs.open.alipay.com/api_1/alipay.trade.pay)查看更加详细的参数说明。
+
+* 返佣说明
+
+ISV对接当面付产品需涉及返佣时,请先阅读[政策详情](https://opendocs.alipay.com/p/00fc2g)与[合作攻略](https://opendocs.alipay.com/open/300/taphxd)。
+
+
+**对接时必须在支付接口的extend_params参数中设置sys_service_provider_id返佣参数 ,参数值为签约返佣协议的PID**,示例代码如下(Java为例):
+
+```java
+Map<String, String> extendParams = new HashMap<>();
+extendParams.put("sys_service_provider_id", "<--请填写ISV签约协议的PID,比如:2088511833207846-->");
+AlipayTradePayResponse response = Factory.Payment.FaceToFace()
+	.agent("<--请填写商户应用授权后获取到的app_auth_token,比如:ca34ea491e7146cc87d25fca24c4cD11-->")
+	.optional("extend_params", extendParams)
+	.pay("iPhone6 16G", "64628156-f784-4572-9540-485b7c91b850", "0.01", "289821051157962364");
+```
+
+--- 
+### 交易预创建,生成正扫二维码
+* API声明
+
+precreate(subject: string, outTradeNo: string, totalAmount: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| subject | string | 是  |  订单标题  |
+| outTradeNo | string | 是  |  交易创建时传入的商户订单号  |
+| totalAmount | string | 是  |  订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]  |
+
+* 出参说明
+
+可前往[alipay.trade.precreate](https://docs.open.alipay.com/api_1/alipay.trade.precreate)查看更加详细的参数说明。
+
+* 返佣说明
+
+ISV对接当面付产品需涉及返佣时,请先阅读[政策详情](https://opendocs.alipay.com/p/00fc2g)与[合作攻略](https://opendocs.alipay.com/open/300/taphxd)。
+
+
+**对接时必须在支付接口的extend_params参数中设置sys_service_provider_id返佣参数 ,参数值为签约返佣协议的PID**,示例代码如下(Java为例):
+
+```java
+Map<String, String> extendParams = new HashMap<>();
+extendParams.put("sys_service_provider_id", "<--请填写ISV签约协议的PID,比如:2088511833207846-->");
+AlipayTradePrecreateResponse response = Payment.FaceToFace()
+	.agent("<--请填写商户应用授权后获取到的app_auth_token,比如:ca34ea491e7146cc87d25fca24c4cD11-->")
+	.optional("extend_params", extendParams)
+	.preCreate("iPhone6 16G", "64628156-f784-4572-9540-485b7c91b850", "0.01");
+```
+
+--- 
+## 电脑网站 Page
+### 电脑网站支付
+* API声明
+
+pay(subject: string, outTradeNo: string, totalAmount: string, returnUrl: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| subject | string | 是  |  订单标题  |
+| outTradeNo | string | 是  |  交易创建时传入的商户订单号  |
+| totalAmount | string | 是  |  订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]  |
+| returnUrl | string | 否  |  支付成功后同步跳转的页面,是一个http/https开头的字符串  |
+
+* 出参说明
+
+可前往[alipay.trade.page.pay](https://docs.open.alipay.com/api_1/alipay.trade.page.pay)查看更加详细的参数说明。
+
+--- 
+
+## 手机网站 Wap
+### 手机网站支付
+* API声明
+
+pay(subject: string, outTradeNo: string, totalAmount: string, quitUrl: string, returnUrl: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| subject | string | 是  |  订单标题  |
+| outTradeNo | string | 是  |  交易创建时传入的商户订单号  |
+| totalAmount | string | 是  |  订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]  |
+| quitUrl | string | 是  |  用户付款中途退出返回商户网站的地址  |
+| returnUrl | string | 否 |  支付成功后同步跳转的页面,是一个http/https开头的字符串  |
+
+* 出参说明
+
+可前往[alipay.trade.wap.pay](https://docs.open.alipay.com/api_1/alipay.trade.wap.pay)查看更加详细的参数说明。
+
+--- 
+
+## App支付 App
+### 手机APP支付
+* API声明
+
+pay(subject: string, outTradeNo: string, totalAmount: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| subject | string | 是  |  订单标题  |
+| outTradeNo | string | 是  |  交易创建时传入的商户订单号  |
+| totalAmount | string | 是  |  订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]  |
+
+* 出参说明
+
+可前往[alipay.trade.app.pay](https://docs.open.alipay.com/api_1/alipay.trade.app.pay)查看更加详细的参数说明。
+
+---
+
+# 安全能力 Security
+## 文本风险识别 TextRisk
+### 检测内容风险
+* API声明
+
+detect(content: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| content | string | 是  |  待检测的文本内容 |
+
+* 出参说明
+
+可前往[alipay.security.risk.content.detect](https://docs.open.alipay.com/api_49/alipay.security.risk.content.detect)查看更加详细的参数说明。
+
+---
+
+# 辅助工具 Util
+
+
+## 加解密 AES
+### AES解密(常用于会员手机号解密)
+* API声明
+
+decrypt(cipherText: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| cipherText | string | 是  |  密文 |
+
+* 出参说明
+
+| 类型     |  说明 |
+|------|----|
+| string | 明文|
+
+### AES加密
+* API声明
+
+encrypt(plainText: string)
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| plainText | string | 是  |  明文 |
+
+* 出参说明
+
+| 类型     |  说明 |
+|------|----|
+| string | 密文|
+
+
+<a name="generic"/>
+
+## 通用接口 Generic
+### 执行OpenAPI调用
+* API声明
+
+execute(method: string, textParams: map[string]string, bizParams: map[string]any): AlipayOpenApiGenericResponse
+
+* 接口说明
+
+对于Alipay Easy SDK尚未支持的Open API,开发者可以通过调用此方法,通过自行拼装请求参数,完成大部分OpenAPI的调用,且调用时可按需设置所有可选参数。本接口同样会自动为您完成请求的加签和响应的验签工作。
+注:本接口不支持文件型字段的上传。
+
+* 入参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| method | string | 是  |  OpenAPI的名称,例如:alipay.trade.pay |
+| textParams | map[string]string | 否  |  **没有**包装在`biz_content`下的请求参数集合,例如`app_auth_token`等参数 |
+| bizParams | map[string]any | 否  |  被包装在`biz_content`下的请求参数集合 |
+
+* 出参说明
+
+| 字段名  | 类型     | 必填 | 说明 |
+|------|--------|----|----|
+| httpBody | string | 是  |  网关返回的HTTP响应,是一个JSON格式的字符串,开发者可按需从中解析出响应参数,响应示例:{"alipay_trade_create_response":{"code":"10000","msg":"Success","out_trade_no":"4ac9eac...","trade_no":"202003..."},"sign":"AUumfYgGSe7...02MA=="} |
+| code | string | 是  |  [网关返回码](https://docs.open.alipay.com/common/105806) |
+| msg | string | 是  |  [网关返回码描述](https://docs.open.alipay.com/common/105806) |
+| subCode | string | 否  |  业务返回码,参见具体的API接口文档 |
+| subMsg | string | 否  |  业务返回码描述,参见具体的API接口文档 |
+
+---
+
+
+
+

+ 182 - 0
vendor/alipaysdk/easysdk/CHANGELOG

@@ -0,0 +1,182 @@
+最新变更
+java删除Factory.getClient方法
+php删除php中多余的composer包
+
+Java版本
+2022-05-06 Version: 2.2.2
+1. 删除Factory.getClient方法
+
+2021-09-04 Version: 2.2.1
+1. 修复Okhttp Response没有主动关闭的问题。
+
+2021-01-18 Version: 2.2.0
+1. 增加sdkExecute功能。
+2. 增加fileExecute功能。
+3. 增加MultipleFactory多实例调用。
+
+2020-12-11 Version: 2.1.2
+1. 增加可设置ignoreSSL忽略SSL校验功能。
+
+2020-09-23 Version: 2.1.0
+1. 升级Tea版本,降低对OkHttp的特性依赖,提升环境兼容性。
+2. 提供Factory.getClient方法,用于调用SDK扩展包中的方法。
+
+2020-08-18 Version: 2.0.2
+1. 取消shade打包,便于排除冲突依赖。
+
+2020-07-06 Version: 2.0.1
+1. 私钥支持阿里云KMS。
+
+2020-06-09 Version: 2.0.0
+1. 支持可选业务参数的装配。
+2. 支持ISV代调用。
+3. 提供ResponseChecker辅助工具类,帮助校验响应是否成功。
+
+2020-05-06 Version: 1.2.1
+1. 手机网站支付、电脑网站支付接口支持设置return_url同步跳转地址。
+
+2020-04-15 Version: 1.2.0
+1. 扩展支持的支付类OpenAPI接口
+Factory.Payment.Common().queryRefund 查询退款信息
+Factory.Payment.Common().downloadBill 下载对账单
+Factory.Payment.FaceToFace().preCreate 交易预创建,生成正扫二维码
+Factory.Payment.Wap().pay 手机网站支付
+Factory.Payment.Page().pay 电脑网站支付
+Factory.Payment.App().pay 手机APP支付
+2. 支持支付的异步通知及其验签
+初始化Alipay Easy SDK的Config参数中新增notifyUrl参数,用户可以统一配置自己的回调地址。
+提供如下接口,完成支付类异步通知的验签。
+Factory.Payment.Common().verifyNotify
+3. AES加解密功能
+Factory.Util.AES().decrypt 支持会员手机号AES解密
+Factory.Util.AES().encrypt AES加密
+
+2020-03-31 Version: 1.1.3
+1. 去除SDK内置的logback.xml日志配置文件,以免意外覆盖开发者项目主体工程的日志配置。
+
+2020-03-27 Version: 1.1.2
+1. 修复返回的响应中存在数组类型字段时,反序列化成Response对象可能抛异常的问题。
+
+2020-03-16 Version: 1.1.1
+1. 修复证书路径不支持从CLASS_PATH中加载的问题。
+
+2020-03-10 Version: 1.1.0
+1. 添加兜底通用接口,支持通过自行拼接请求参数完成几乎所有OpenAPI的调用。
+
+2020-02-26 Version: 1.0.0
+1. 首次发布。
+
+
+
+C#版本
+2020-12-11 Version: 2.1.3
+1. 修复OpenAPI响应对象特殊情况下可能反序列化失败的异常。 
+
+2020-12-11 Version: 2.1.2
+1. 增加可设置ignoreSSL忽略SSL校验功能。
+
+2020-12-09 Version: 2.1.1
+1. 增加httpProxy功能。
+
+2020-09-23 Version: 2.1.0
+1. 升级Tea版本。
+2. 提供Factory.getClient方法,用于调用SDK扩展包中的方法。
+
+2020-08-18 Version: 2.0.1
+1. 修复证书模式下异步验签异常的问题。
+
+2020-06-09 Version: 2.0.0
+1. 支持可选业务参数的装配。
+2. 支持ISV代调用。
+3. 提供ResponseChecker辅助工具类,帮助校验响应是否成功。
+
+2020-05-06 Version: 1.2.1
+1. 手机网站支付、电脑网站支付接口支持设置return_url同步跳转地址。
+
+2020-04-15 Version: 1.2.0
+1. 扩展支持的支付类OpenAPI接口
+Factory.Payment.Common().QueryRefund 查询退款信息
+Factory.Payment.Common().DownloadBill 下载对账单
+Factory.Payment.FaceToFace().PreCreate 交易预创建,生成正扫二维码
+Factory.Payment.Wap().Pay 手机网站支付
+Factory.Payment.Page().Pay 电脑网站支付
+Factory.Payment.App().Pay 手机APP支付
+2. 支持支付的异步通知及其验签
+初始化Alipay Easy SDK的Config参数中新增notifyUrl参数,用户可以统一配置自己的回调地址。
+提供如下接口,完成支付类异步通知的验签。
+Factory.Payment.Common().verifyNotify
+3. AES加解密功能
+Factory.Util.AES().Decrypt 支持会员手机号AES解密
+Factory.Util.AES().Encrypt AES加密
+
+2020-03-10 Version: 1.1.0
+1. 添加兜底通用接口,支持通过自行拼接请求参数完成几乎所有OpenAPI的调用。
+
+2020-02-26 Version: 1.0.0
+1. 首次发布。
+
+
+
+PHP版本
+2022-11-28 Version: 2.2.3
+1、去掉多余引号
+2、toMultipartRequestBody方法中,PHP8时 0 != $readLength 永远为true导致while产生死循环
+
+2022-05-06 Version: 2.2.2
+1. php删除php中多余的composer包
+
+2021-09-24 Version: 2.2.1
+1. 修复PHP7.4及其以上环境下,根证书解析报错的问题。
+
+2021-01-18 Version: 2.2.0
+1. 增加sdkExecute功能。
+2. 增加fileExecute功能。
+3. 增加MultipleFactory多实例调用。
+
+
+2020-12-11 Version: 2.0.3
+1. 增加可设置ignoreSSL忽略SSL校验功能。
+
+2020-12-09 Version: 2.0.2
+1. 增加httpProxy功能。
+2. 修复agent不生效问题。
+
+2020-07-06 Version: 2.0.0
+1. 支持可选业务参数的装配。
+2. 支持ISV代调用。
+3. 提供ResponseChecker辅助工具类,帮助校验响应是否成功。
+
+2020-05-06 Version: 1.2.1
+1. 手机网站支付、电脑网站支付接口支持设置return_url同步跳转地址。
+
+2020-04-15 Version: 1.2.0
+1. 扩展支持的支付类OpenAPI接口
+Factory::payment()->common()->queryRefund 查询退款信息
+Factory::payment()->common()->downloadBill 下载对账单
+Factory::payment()->faceToFace()->preCreate 交易预创建,生成正扫二维码
+Factory::payment()->wap()->pay 手机网站支付
+Factory::payment()->page()->pay 电脑网站支付
+Factory::payment()->app()->pay 手机APP支付
+2. 支持支付的异步通知及其验签
+初始化Alipay Easy SDK的Config参数中新增notifyUrl参数,用户可以统一配置自己的回调地址。
+提供如下接口,完成支付类异步通知的验签。
+Factory::payment()->common()->verifyNotify
+3. AES加解密功能
+Factory::util()->aes()->decrypt 支持会员手机号AES解密
+Factory::util()->aes()->encrypt AES加密
+4. 重构api的respone模型,返回格式与Java、Net保持一致
+
+2020-03-27 Version: 1.1.0
+1. 修复大小写路径敏感问题。
+
+2020-03-20 Version: 1.0.0
+1. 首次发布。
+
+
+PHP版本
+2021-09-24 Version: 2.0.1
+1.修复PHP7.4及其以上环境下,根证书解析报错的问题。
+
+2021-01-18 Version: 1.0.0
+1. 首次发布。
+

+ 21 - 0
vendor/alipaysdk/easysdk/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 Ant Small and Micro Financial Services Group Co., Ltd.
+
+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.

+ 203 - 0
vendor/alipaysdk/easysdk/README.md

@@ -0,0 +1,203 @@
+[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Falipay%2Falipay-easysdk.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Falipay%2Falipay-easysdk?ref=badge_shield)
+[![Maven Central](https://img.shields.io/maven-central/v/com.alipay.sdk/alipay-easysdk.svg)](https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk)
+[![NuGet](https://badge.fury.io/nu/AlipayEasySDK.svg)](https://badge.fury.io/nu/AlipayEasySDK)
+[![Packagist](https://poser.pugx.org/alipaysdk/easysdk/v/stable)](https://packagist.org/packages/alipaysdk/easysdk)
+
+欢迎使用 Alipay **Easy** SDK。
+
+打造**最好用**的支付宝开放平台**服务端SDK**,Alipay Easy SDK让您享受**极简编程**体验,快速访问支付宝开放平台开放的各项**核心能力**。
+
+## 设计理念
+不同于原有的Alipay SDK通用而全面的设计理念,Alipay Easy SDK对开放能力的API进行了更加贴近高频场景的精心设计与裁剪,简化了服务端调用方式,让调用API像使用语言内置的函数一样简便。
+
+同时,您也不必担心面向高频场景提炼的API可能无法完全契合自己的个性化场景,Alipay Easy SDK支持灵活的[动态扩展](#extension)方式,同样可以满足低频参数、低频API的使用需求。
+
+Alipay Easy SDK提供了与[能力地图](https://opendocs.alipay.com/mini/00am3f)相对应的代码组织结构,让开发者可以快速找到不同能力对应的API。
+
+Alipay Easy SDK主要目标是提升开发者在**服务端**集成支付宝开放平台开放的各类核心能力的效率。
+
+### 化繁为简
+
+| Alipay Easy SDK  | Alipay SDK                                                     |
+|------------------|----------------------------------------------------------------|
+| 极简代码风格,更贴近自然语言阅读习惯  | 传统代码风格,需要多行代码完成一个接口的调用 |
+| Factory单例全局任何地方都可直接引用 | AlipayClient实例需自行创建并在上下文中传递 |
+| API中只保留高频场景下的必备参数,同时提供低频可选参数的装配能力    | 没有区分高低频参数,单API最多可达数十个入参,对普通开发者的干扰较大 |
+
+
+* Alipay Easy SDK :smiley:
+
+```java
+Factory.Payment.Common().create("Iphone6 16G", "202003019443", "0.10", "2088002656718920");
+```
+
+* Alipay SDK :confused:
+
+```java
+AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
+
+AlipayTradeCreateModel model = new AlipayTradeCreateModel();
+model.setSubject("Iphone6 16G");
+model.setOutTradeNo("202003019443");
+model.setTotalAmount("0.10");
+model.setBuyerId("2088002656718920");
+...
+
+request.setBizModel(model);
+...
+
+alipayClient.execute(request);
+```
+
+### 如何切换
+* 无论是Alipay Easy SDK还是Alipay SDK,本质都是发送HTTP请求访问Open API网关,所以只需将原来通过Alipay SDK调用Open API的代码,替换为Alipay Easy SDK中对应API的调用即可。Alipay Easy SDK和Alipay SDK并无冲突,可以共存。
+
+* 如果您所需对接的开放平台能力,Alipay Easy SDK尚未提炼出API支持([已支持的API列表](#apiList)),您可以通过[通用接口](./APIDoc.md#generic)完成调用。
+
+* 我们会持续挖掘高频场景,不断丰富Alipay Easy SDK支持的API,让您在绝大多数常见场景下,都能享受Alipay Easy SDK带来的便捷。
+
+## 技术特点
+### 纯语言开发
+所有Alipay Easy SDK的具体编程语言的实现,均只采用纯编程语言进行开发,不引入任何重量级框架,减少潜在的框架冲突,让SDK可以自由集成进任何代码环境中。
+
+### 结构清晰
+我们按照能力类别和场景类别对API进行了归类,结构更加清晰,一目了然。
+> 更多信息请参见[API组织规范](#spec)。
+
+### 参数精简
+Alipay Easy SDK对每个API都精心打磨,剔除了`Open API`中不常用的可选参数,减少普通用户的无效选择,提升开发效率。
+
+<a name="extension"/>
+
+### 灵活扩展
+开发者可以通过Fluent风格的API链式调用,在为高频场景打造的API基础上,不断扩展自己的个性化场景需求。
+
+```java
+// 通过调用agent方法,扩展支持ISV代调用场景
+Factory.Payment.FaceToFace().agent("ca34ea491e7146cc87d25fca24c4cD11").preCreate(...)
+
+// 通过调用optional方法,扩展支持个性化可选参数
+Factory.Payment.FaceToFace().optional("extend_params", extendParams).preCreate(...)
+
+// 多种扩展可灵活搭配,不同扩展方法功能详细说明请前往各语言主页中的“快速开始-扩展调用”栏目中查看
+Factory.Payment.FaceToFace()
+	.agent(...)
+	.optionalArgs(...)
+	.auth(...)
+	.asyncNotify(...)
+	.preCreate(...)
+```
+
+### 测试/示例完备
+每个API都有对应的单元测试进行覆盖,良好的单元测试天生就是最好的示例。
+
+同时您也可以前往[API Doc](./APIDoc.md)查看每个API的详细使用说明。
+
+> 注:单元测试中使用到的私钥均进行了脱敏处理,会导致单元测试无法直接执行。您可以自行更改单元测试项目中的`TestAccout类`和`privateKey.json`文件中的相关账号与私钥配置后再执行单元测试。
+
+### 多语言
+Alipay Easy SDK基于阿里集团研发的[`Darabonba`](https://github.com/aliyun/darabonba)进行架构,通过DSL中间语言定义API模型,再基于DSL语言自动生成不同编程语言(Java、C#、PHP、TS等)实现的SDK,极大地提升了SDK能力的扩展效率和适用范围,同时也保证了相同的`Easy API`在不同语言生态中体验的一致性。
+
+API模型的DSL描述可以进入[tea](./tea)目录查看。
+
+### 快速集成
+各语言SDK均会在各自的中央仓库(Maven、NuGet、Composer、NPM etc.)中同步发布,让您使用各语言主流依赖管理工具即可一键安装集成SDK。
+
+## 语言支持情况
+Alipay Easy SDK首发暂只支持`Java`、`C#`、`PHP`编程语言,更多编程语言支持正在积极新增中,敬请期待。
+
+各语言具体的**使用说明**和**详细介绍**请点击如下链接进入各语言主目录查看。
+
+[Java](./java)
+
+[C#](./csharp)
+
+[PHP](./php)
+
+<a name="spec"/>
+
+## API组织规范
+
+在Alipay Easy SDK中,API的引用路径与能力地图的组织层次一致,遵循如下规范
+
+> Factory.能力类别.场景类别.接口方法名称( ... )
+
+比如,如果您想要使用[能力地图](https://opendocs.alipay.com/mini/00am3f)中`营销能力`下的`模板消息`场景中的`小程序发送模板消息`,只需按如下形式编写调用代码即可(不同编程语言的连接符号可能不同)。
+
+`Factory.Marketing.TemplateMessage().send( ... )`
+
+其中,接口方法名称通常是对其依赖的OpenAPI功能的一个最简概况,接口方法的出入参与OpenAPI中同名参数含义一致,可参照OpenAPI相关参数的使用说明。
+
+Alipay Easy SDK将致力于保持良好的API命名,以符合开发者的编程直觉。
+
+<a name="apiList"/>
+
+## 已支持的API列表
+
+| 能力类别      | 场景类别            | 接口方法名称                 | 调用的OpenAPI名称                                              |
+|-----------|-----------------|------------------------|-----------------------------------------------------------|
+| Base<br/>基础能力      | OAuth<br/>用户授权           | getToken<br/>获取授权访问令牌和用户user_id               | alipay\.system\.oauth\.token                              |
+| Base<br/>基础能力     | OAuth<br/>用户授权           | refreshToken<br/>刷新授权访问令牌           | alipay\.system\.oauth\.token                              |
+| Base<br/>基础能力      | Qrcode<br/>小程序二维码          | create<br/>创建小程序二维码                 | alipay\.open\.app\.qrcode\.create                         |
+| Base<br/>基础能力      | Image<br/>图片           | upload<br/>上传门店照片                 | alipay\.offline\.material\.image\.upload                  |
+| Base<br/>基础能力      | Video<br/>视频           | upload<br/>上传门店视频                 | alipay\.offline\.material\.image\.upload                  |
+| Member<br/>会员能力    | Identification<br/>支付宝身份认证  | init<br/>身份认证初始化                   | alipay\.user\.certify\.open\.initialize                   |
+| Member<br/>会员能力    | Identification<br/>支付宝身份认证  | certify<br/>生成认证链接                | alipay\.user\.certify\.open\.certify                      |
+| Member<br/>会员能力    | Identification<br/>支付宝身份认证  | query<br/>身份认证记录查询                  | alipay\.user\.certify\.open\.query                        |
+| Payment<br/>支付能力   | Common<br/>通用          | create<br/>创建交易                 | alipay\.trade\.create                                     |
+| Payment<br/>支付能力   | Common<br/>通用          | query<br/>查询交易                  | alipay\.trade\.query                                      |
+| Payment<br/>支付能力   | Common<br/>通用          | refund<br/>交易退款                 | alipay\.trade\.refund                                     |
+| Payment<br/>支付能力   | Common<br/>通用          | close<br/>关闭交易                  | alipay\.trade\.close                                      |
+| Payment<br/>支付能力   | Common<br/>通用          | cancel<br/>撤销交易                 | alipay\.trade\.cancel                                     |
+| Payment<br/>支付能力   | Common<br/>通用          | queryRefund<br/>交易退款查询            | alipay\.trade\.fastpay\.refund\.query                     |
+| Payment<br/>支付能力   | Common<br/>通用          | downloadBill<br/>查询对账单下载地址           | alipay\.data\.dataservice\.bill\.downloadurl\.query       |
+| Payment<br/>支付能力   | Common<br/>通用          | verifyNotify<br/>异步通知验签           | -                                                         |
+| Payment<br/>支付能力   | Huabei<br/>花呗分期          | create<br/>创建花呗分期交易                 | alipay\.trade\.create                                     |
+| Payment<br/>支付能力   | FaceToFace<br/>当面付      | pay<br/>扫用户出示的付款码,完成付款                    | alipay\.trade\.pay                                        |
+| Payment<br/>支付能力   | FaceToFace<br/>当面付      | precreate<br/>生成交易付款码,待用户扫码付款              | alipay\.trade\.precreate                                  |
+| Payment<br/>支付能力   | App<br/>手机APP             | pay<br/>生成订单串,再使用客户端 SDK 凭此串唤起支付宝收银台                    | alipay\.trade\.app\.pay                                   |
+| Payment<br/>支付能力   | Page<br/>电脑网站            | pay<br/>生成交易表单,渲染后自动跳转支付宝网站引导用户完成支付                    | alipay\.trade\.page\.pay                                  |
+| Payment<br/>支付能力   | Wap<br/>手机网站             | pay<br/>生成交易表单,渲染后自动跳转支付宝网站引导用户完成支付                    | alipay\.trade\.wap\.pay                                   |
+| Security<br/>安全能力  | TextRisk<br/>文本内容安全        | detect<br/>检测内容风险                 | alipay\.security\.risk\.content\.detect                   |
+| Marketing<br/>营销能力 | Pass<br/>支付宝卡包            | createTemplate<br/>卡券模板创建         | alipay\.pass\.template\.add                               |
+| Marketing<br/>营销能力 | Pass<br/>支付宝卡包            | updateTemplate<br/>卡券模板更新         | alipay\.pass\.template\.update                            |
+| Marketing<br/>营销能力 | Pass<br/>支付宝卡包            | addInstance<br/>卡券实例发放            | alipay\.pass\.instance\.add                               |
+| Marketing<br/>营销能力 | Pass<br/>支付宝卡包            | updateInstance<br/>卡券实例更新         | alipay\.pass\.instance\.update                            |
+| Marketing<br/>营销能力 | TemplateMessage<br/>小程序模板消息 | send <br/>发送模板消息| alipay\.open\.app\.mini\.templatemessage\.send            |
+| Marketing<br/>营销能力 | OpenLife<br/>生活号        | createImageTextContent<br/>创建图文消息内容 | alipay\.open\.public\.message\.content\.create            |
+| Marketing<br/>营销能力 | OpenLife<br/>生活号        | modifyImageTextContent<br/>更新图文消息内容 | alipay\.open\.public\.message\.content\.modify            |
+| Marketing<br/>营销能力 | OpenLife<br/>生活号        | sendText<br/>群发本文消息               | alipay\.open\.public\.message\.total\.send                |
+| Marketing<br/>营销能力 | OpenLife<br/>生活号        | sendImageText<br/>群发图文消息          | alipay\.open\.public\.message\.total\.send                |
+| Marketing<br/>营销能力 | OpenLife<br/>生活号        | sendSingleMessage<br/>单发模板消息      | alipay\.open\.public\.message\.single\.send               |
+| Marketing<br/>营销能力 | OpenLife<br/>生活号        | recallMessage<br/>生活号消息撤回          | alipay\.open\.public\.life\.msg\.recall                   |
+| Marketing<br/>营销能力 | OpenLife<br/>生活号        | setIndustry<br/>模板消息行业设置            | alipay\.open\.public\.template\.message\.industry\.modify |
+| Marketing<br/>营销能力 | OpenLife<br/>生活号        | getIndustry<br/>生活号查询行业设置            | alipay\.open\.public\.setting\.category\.query            |
+| Util<br/>辅助工具      | AES<br/>加解密             | decrypt<br/>解密,常用于会员手机号解密                | -                                                         |
+| Util<br/>辅助工具      | AES<br/>加解密             | encrypt<br/>加密                | -                                                         |
+| Util<br/>辅助工具      | Generic<br/>通用接口         | execute<br/>自行拼接参数,执行OpenAPI调用                | -                                                         |
+
+> 注:更多高频场景的API持续更新中,敬请期待。
+
+您还可以前往[API Doc](./APIDoc.md)查看每个API的详细使用说明。
+
+# 变更日志
+每个版本的详细更改记录在[变更日志](./CHANGELOG)中。
+
+> 版本号最末一位修订号的增加(比如从`1.0.0`升级为`1.0.1`),意味着SDK的功能没有发生任何变化,仅仅是修复了部分Bug。该类升级可能不会记录在变更日志中。
+
+> 版本号中间一位次版本号的增加(比如从`1.0.0`升级为`1.1.0`),意味着SDK的功能发生了可向下兼容的新增或修改。
+
+> 版本号首位主版本号的增加(比如从`1.0.0`升级为`2.0.0`),意味着SDK的功能可能发生了不向下兼容的较大调整,升级主版本号后请注意做好相关的回归测试工作。
+
+# 相关
+* [支付宝开放平台](https://open.alipay.com/platform/home.htm)
+* [支付宝开放平台文档中心](https://docs.open.alipay.com/catalog)
+* [最新源码](https://github.com/alipay/alipay-easysdk)
+
+# 许可证
+[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Falipay%2Falipay-easysdk.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Falipay%2Falipay-easysdk?ref=badge_large)
+
+# 交流与技术支持
+不管您在使用Alipay Easy SDK的过程中遇到任何问题,欢迎前往 [支付宝开放社区](https://forum.alipay.com/mini-app/channel/1100001)  发帖与支付宝工作人员和其他开发者一起交流。
+
+注:为了提高开发者问题的响应时效,github本身的issue功能已关闭,支付宝开放社区中发帖的问题,通常会在2小时内响应。

+ 49 - 0
vendor/alipaysdk/easysdk/composer.json

@@ -0,0 +1,49 @@
+{
+	"name":"alipaysdk/easysdk",
+	"description":"支付宝官方 Alipay Easy SDK",
+	"type":"library",
+	"version":"2.2.3",
+	"authors":[
+		{
+			"name":"junying.wjy",
+			"email":"junying.wjy@antfin.com"
+		}
+	],
+	"autoload":{
+		"psr-4":{
+			"Alipay\\EasySDK\\":"php/src/"
+		}
+	},
+	"autoload-dev": {
+		"psr-4": {
+			"Alipay\\EasySDK\\Test\\": "php/test/"
+		}
+	},
+	"license":"Apache-2.0",
+	"minimum-stability":"dev",
+	"require":{
+		"php": ">=7.0",
+		"ext-curl":"*",
+		"ext-ctype":"*",
+		"ext-dom":"*",
+		"ext-fileinfo": "*",
+		"ext-json":"*",
+		"ext-libxml":"*",
+		"ext-simplexml":"*",
+		"ext-mbstring":"*",
+		"ext-openssl":"*",
+		"ext-xmlwriter": "*",
+		"guzzlehttp/guzzle":">=6.3",
+		"alibabacloud/tea": "^3.1",
+		"alibabacloud/tea-fileform": "^0.3.2"
+    },
+	"require-dev": {
+		"phpunit/phpunit": "^7.5"
+	},
+	"repositories":{
+		"packagist":{
+			"type":"composer",
+			"url":"https://mirrors.aliyun.com/composer/"
+		}
+	}
+}

+ 23 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK.sln

@@ -0,0 +1,23 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlipayEasySDK", "AlipayEasySDK\AlipayEasySDK.csproj", "{14B089B9-C61C-46E6-BD93-5DFBBB77E2B2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTest", "UnitTest\UnitTest.csproj", "{79DE080D-34C1-485E-996D-435A8515766D}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{14B089B9-C61C-46E6-BD93-5DFBBB77E2B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{14B089B9-C61C-46E6-BD93-5DFBBB77E2B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{14B089B9-C61C-46E6-BD93-5DFBBB77E2B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{14B089B9-C61C-46E6-BD93-5DFBBB77E2B2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{79DE080D-34C1-485E-996D-435A8515766D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{79DE080D-34C1-485E-996D-435A8515766D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{79DE080D-34C1-485E-996D-435A8515766D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{79DE080D-34C1-485E-996D-435A8515766D}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+EndGlobal

+ 32 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/AlipayEasySDK.csproj

@@ -0,0 +1,32 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFrameworks>netstandard2.0;net461</TargetFrameworks>
+    <PackOnBuild>true</PackOnBuild>
+    <PackageVersion>2.1.3</PackageVersion>
+    <Authors>antopen</Authors>
+    <NeutralLanguage>zh</NeutralLanguage>
+    <PackageLicenseUrl>https://github.com/alipay/alipay-easysdk/blob/master/LICENSE</PackageLicenseUrl>
+    <Description>Alipay Easy SDK for .NET allows you to enjoy a minimalist programming experience and quickly access the various high-frequency capabilities of the Alipay Open Platform.</Description>
+    <PackageId>AlipayEasySDK</PackageId>
+    <Owners>antopen</Owners>
+    <PackageProjectUrl>https://github.com/alipay/alipay-easysdk/tree/master/csharp</PackageProjectUrl>
+    <Summary>Alipay Easy SDK for .NET allows you to enjoy a minimalist programming experience and quickly access the various high-frequency capabilities of the Alipay Open Platform.</Summary>
+    <Title>Alipay Easy SDK</Title>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType></DebugType>
+  </PropertyGroup>
+  <ItemGroup>
+    <Compile Remove="Class1.cs" />
+  </ItemGroup>
+  <ItemGroup>
+    <Folder Include="Factory\" />
+  </ItemGroup>
+  <ItemGroup>
+    <PackageReference Include="AlipayEasySDK.Kernel" Version="1.0.6" />
+  </ItemGroup>
+</Project>

+ 324 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Image/Client.cs

@@ -0,0 +1,324 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Base.Image.Models;
+
+namespace Alipay.EasySDK.Base.Image
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipayOfflineMaterialImageUploadResponse Upload(string imageName, string imageFilePath)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 100000},
+                {"readTimeout", 100000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.offline.material.image.upload"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>(){};
+                    Dictionary<string, string> textParams = new Dictionary<string, string>
+                    {
+                        {"image_type", "jpg"},
+                        {"image_name", imageName},
+                    };
+                    Dictionary<string, string> fileParams = new Dictionary<string, string>
+                    {
+                        {"image_content", imageFilePath},
+                    };
+                    string boundary = this._kernel.GetRandomBoundary();
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", this._kernel.ConcatStr("multipart/form-data;charset=utf-8;boundary=", boundary)},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams
+                    ));
+                    request_.Body = this._kernel.ToMultipartRequestBody(textParams, fileParams, boundary);
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.offline.material.image.upload");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOfflineMaterialImageUploadResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOfflineMaterialImageUploadResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOfflineMaterialImageUploadResponse> UploadAsync(string imageName, string imageFilePath)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 100000},
+                {"readTimeout", 100000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.offline.material.image.upload"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>(){};
+                    Dictionary<string, string> textParams = new Dictionary<string, string>
+                    {
+                        {"image_type", "jpg"},
+                        {"image_name", imageName},
+                    };
+                    Dictionary<string, string> fileParams = new Dictionary<string, string>
+                    {
+                        {"image_content", imageFilePath},
+                    };
+                    string boundary = this._kernel.GetRandomBoundary();
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", this._kernel.ConcatStr("multipart/form-data;charset=utf-8;boundary=", boundary)},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams
+                    ));
+                    request_.Body = this._kernel.ToMultipartRequestBody(textParams, fileParams, boundary);
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.offline.material.image.upload");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOfflineMaterialImageUploadResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOfflineMaterialImageUploadResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Image/Models/AlipayOfflineMaterialImageUploadResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Base.Image.Models
+{
+    public class AlipayOfflineMaterialImageUploadResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("image_id")]
+        [Validation(Required=true)]
+        public string ImageId { get; set; }
+
+        [NameInMap("image_url")]
+        [Validation(Required=true)]
+        public string ImageUrl { get; set; }
+
+    }
+
+}

+ 528 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/OAuth/Client.cs

@@ -0,0 +1,528 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Base.OAuth.Models;
+
+namespace Alipay.EasySDK.Base.OAuth
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipaySystemOauthTokenResponse GetToken(string code)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.system.oauth.token"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>(){};
+                    Dictionary<string, string> textParams = new Dictionary<string, string>
+                    {
+                        {"grant_type", "authorization_code"},
+                        {"code", code},
+                    };
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.system.oauth.token");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipaySystemOauthTokenResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipaySystemOauthTokenResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipaySystemOauthTokenResponse> GetTokenAsync(string code)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.system.oauth.token"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>(){};
+                    Dictionary<string, string> textParams = new Dictionary<string, string>
+                    {
+                        {"grant_type", "authorization_code"},
+                        {"code", code},
+                    };
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.system.oauth.token");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipaySystemOauthTokenResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipaySystemOauthTokenResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipaySystemOauthTokenResponse RefreshToken(string refreshToken)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.system.oauth.token"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>(){};
+                    Dictionary<string, string> textParams = new Dictionary<string, string>
+                    {
+                        {"grant_type", "refresh_token"},
+                        {"refresh_token", refreshToken},
+                    };
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.system.oauth.token");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipaySystemOauthTokenResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipaySystemOauthTokenResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipaySystemOauthTokenResponse> RefreshTokenAsync(string refreshToken)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.system.oauth.token"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>(){};
+                    Dictionary<string, string> textParams = new Dictionary<string, string>
+                    {
+                        {"grant_type", "refresh_token"},
+                        {"refresh_token", refreshToken},
+                    };
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.system.oauth.token");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipaySystemOauthTokenResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipaySystemOauthTokenResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 57 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/OAuth/Models/AlipaySystemOauthTokenResponse.cs

@@ -0,0 +1,57 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Base.OAuth.Models
+{
+    public class AlipaySystemOauthTokenResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("user_id")]
+        [Validation(Required=true)]
+        public string UserId { get; set; }
+
+        [NameInMap("access_token")]
+        [Validation(Required=true)]
+        public string AccessToken { get; set; }
+
+        [NameInMap("expires_in")]
+        [Validation(Required=true)]
+        public long ExpiresIn { get; set; }
+
+        [NameInMap("refresh_token")]
+        [Validation(Required=true)]
+        public string RefreshToken { get; set; }
+
+        [NameInMap("re_expires_in")]
+        [Validation(Required=true)]
+        public long ReExpiresIn { get; set; }
+
+    }
+
+}

+ 318 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Qrcode/Client.cs

@@ -0,0 +1,318 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Base.Qrcode.Models;
+
+namespace Alipay.EasySDK.Base.Qrcode
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipayOpenAppQrcodeCreateResponse Create(string urlParam, string queryParam, string describe)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.app.qrcode.create"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"url_param", urlParam},
+                        {"query_param", queryParam},
+                        {"describe", describe},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.open.app.qrcode.create");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenAppQrcodeCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenAppQrcodeCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOpenAppQrcodeCreateResponse> CreateAsync(string urlParam, string queryParam, string describe)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.app.qrcode.create"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"url_param", urlParam},
+                        {"query_param", queryParam},
+                        {"describe", describe},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.open.app.qrcode.create");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenAppQrcodeCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenAppQrcodeCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 41 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Qrcode/Models/AlipayOpenAppQrcodeCreateResponse.cs

@@ -0,0 +1,41 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Base.Qrcode.Models
+{
+    public class AlipayOpenAppQrcodeCreateResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("qr_code_url")]
+        [Validation(Required=true)]
+        public string QrCodeUrl { get; set; }
+
+    }
+
+}

+ 324 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Video/Client.cs

@@ -0,0 +1,324 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Base.Video.Models;
+
+namespace Alipay.EasySDK.Base.Video
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipayOfflineMaterialImageUploadResponse Upload(string videoName, string videoFilePath)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 100000},
+                {"readTimeout", 100000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.offline.material.image.upload"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>(){};
+                    Dictionary<string, string> textParams = new Dictionary<string, string>
+                    {
+                        {"image_type", "mp4"},
+                        {"image_name", videoName},
+                    };
+                    Dictionary<string, string> fileParams = new Dictionary<string, string>
+                    {
+                        {"image_content", videoFilePath},
+                    };
+                    string boundary = this._kernel.GetRandomBoundary();
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", this._kernel.ConcatStr("multipart/form-data;charset=utf-8;boundary=", boundary)},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams
+                    ));
+                    request_.Body = this._kernel.ToMultipartRequestBody(textParams, fileParams, boundary);
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.offline.material.image.upload");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOfflineMaterialImageUploadResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOfflineMaterialImageUploadResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOfflineMaterialImageUploadResponse> UploadAsync(string videoName, string videoFilePath)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 100000},
+                {"readTimeout", 100000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.offline.material.image.upload"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>(){};
+                    Dictionary<string, string> textParams = new Dictionary<string, string>
+                    {
+                        {"image_type", "mp4"},
+                        {"image_name", videoName},
+                    };
+                    Dictionary<string, string> fileParams = new Dictionary<string, string>
+                    {
+                        {"image_content", videoFilePath},
+                    };
+                    string boundary = this._kernel.GetRandomBoundary();
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", this._kernel.ConcatStr("multipart/form-data;charset=utf-8;boundary=", boundary)},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams
+                    ));
+                    request_.Body = this._kernel.ToMultipartRequestBody(textParams, fileParams, boundary);
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.offline.material.image.upload");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOfflineMaterialImageUploadResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOfflineMaterialImageUploadResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Base/Video/Models/AlipayOfflineMaterialImageUploadResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Base.Video.Models
+{
+    public class AlipayOfflineMaterialImageUploadResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("image_id")]
+        [Validation(Required=true)]
+        public string ImageId { get; set; }
+
+        [NameInMap("image_url")]
+        [Validation(Required=true)]
+        public string ImageUrl { get; set; }
+
+    }
+
+}

+ 244 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Factory/Factory.cs

@@ -0,0 +1,244 @@
+using System;
+using Alipay.EasySDK.Kernel;
+using System.Reflection;
+
+namespace Alipay.EasySDK.Factory
+{
+    /// <summary>
+    /// 客户端工厂,用于快速配置和访问各种场景下的API Client
+    ///
+    /// 注:该Factory获取的Client不可储存重复使用,请每次均通过Factory完成调用
+    /// </summary>
+    public static class Factory
+    {
+        public const string SDK_VERSION = "alipay-easysdk-net-2.1.0";
+
+        /// <summary>
+        /// 将一些初始化耗时较多的信息缓存在上下文中
+        /// </summary>
+        private static Context context;
+
+        /// <summary>
+        /// 设置客户端参数,只需设置一次,即可反复使用各种场景下的API Client
+        /// </summary>
+        /// <param name="options">客户端参数对象</param>
+        public static void SetOptions(Config options)
+        {
+            context = new Context(options, SDK_VERSION);
+        }
+
+        /// <summary>
+        /// 获取调用OpenAPI所需的客户端实例
+        /// 本方法用于调用SDK扩展包中的API Client下的方法
+        /// 
+        /// 注:返回的实例不可重复使用,只可用于单次调用
+        /// </summary>
+        /// <typeparam name="T">泛型参数</typeparam>
+        /// <param name="client">API Client的类型对象</param>
+        /// <returns>client实例,用于发起单次调用</returns>
+        public static T GetClient<T>()
+        {
+            Type type = typeof(T);
+            ConstructorInfo constructor = type.GetConstructor(new Type[] { typeof(Client) });
+            context.SdkVersion = GetSdkVersion(type);
+            return (T)constructor.Invoke(new object[] { new Client(context) });
+        }
+
+        private static string GetSdkVersion(Type client)
+        {
+            return context.SdkVersion + "-" + client.FullName
+                    .Replace("EasySDK.", "")
+                    .Replace(".Client", "")
+                    .Replace(".", "-");
+        }
+
+        /// <summary>
+        /// 基础能力相关
+        /// </summary>
+        public static class Base
+        {
+            /// <summary>
+            /// 获取图片相关API Client
+            /// </summary>
+            /// <returns>图片相关API Client</returns>
+            public static EasySDK.Base.Image.Client Image()
+            {
+                return new EasySDK.Base.Image.Client(new Client(context));
+            }
+
+            /// <summary>
+            /// 获取视频相关API Client
+            /// </summary>
+            /// <returns>视频相关API Client</returns>
+            public static EasySDK.Base.Video.Client Video()
+            {
+                return new EasySDK.Base.Video.Client(new Client(context));
+            }
+
+            /// <summary>
+            /// 获取OAuth认证相关API Client
+            /// </summary>
+            /// <returns>OAuth认证相关API Client</returns>
+            public static EasySDK.Base.OAuth.Client OAuth()
+            {
+                return new EasySDK.Base.OAuth.Client(new Client(context));
+            }
+
+            /// <summary>
+            /// 获取小程序二维码相关API Client
+            /// </summary>
+            /// <returns>小程序二维码相关API Client</returns>
+            public static EasySDK.Base.Qrcode.Client Qrcode()
+            {
+                return new EasySDK.Base.Qrcode.Client(new Client(context));
+            }
+        }
+
+        /// <summary>
+        /// 营销能力相关
+        /// </summary>
+        public static class Marketing
+        {
+            /// <summary>
+            /// 获取生活号相关API Client
+            /// </summary>
+            /// <returns>生活号相关API Client</returns>
+            public static EasySDK.Marketing.OpenLife.Client OpenLife()
+            {
+                return new EasySDK.Marketing.OpenLife.Client(new Client(context));
+            }
+
+            /// <summary>
+            /// 获取支付宝卡包相关API Client
+            /// </summary>
+            /// <returns>支付宝卡包相关API Client</returns>
+            public static EasySDK.Marketing.Pass.Client Pass()
+            {
+                return new EasySDK.Marketing.Pass.Client(new Client(context));
+            }
+
+            /// <summary>
+            /// 获取小程序模板消息相关API Client
+            /// </summary>
+            /// <returns>小程序模板消息相关API Client</returns>
+            public static EasySDK.Marketing.TemplateMessage.Client TemplateMessage()
+            {
+                return new EasySDK.Marketing.TemplateMessage.Client(new Client(context));
+            }
+        }
+
+        /// <summary>
+        /// 会员能力相关
+        /// </summary>
+        public static class Member
+        {
+            /// <summary>
+            /// 获取支付宝身份认证相关API Client
+            /// </summary>
+            /// <returns>支付宝身份认证相关API Client</returns>
+            public static EasySDK.Member.Identification.Client Identification()
+            {
+                return new EasySDK.Member.Identification.Client(new Client(context));
+            }
+        }
+
+        /// <summary>
+        /// 支付能力相关
+        /// </summary>
+        public static class Payment
+        {
+            /// <summary>
+            /// 获取支付通用API Client
+            /// </summary>
+            /// <returns>支付通用API Client</returns>
+            public static EasySDK.Payment.Common.Client Common()
+            {
+                return new EasySDK.Payment.Common.Client(new Client(context));
+            }
+
+            /// <summary>
+            /// 获取当面付API Client
+            /// </summary>
+            /// <returns>当面付API Client</returns>
+            public static EasySDK.Payment.FaceToFace.Client FaceToFace()
+            {
+                return new EasySDK.Payment.FaceToFace.Client(new Client(context));
+            }
+
+            /// <summary>
+            /// 获取花呗API Client
+            /// </summary>
+            /// <returns>花呗API Client</returns>
+            public static EasySDK.Payment.Huabei.Client Huabei()
+            {
+                return new EasySDK.Payment.Huabei.Client(new Client(context));
+            }
+
+            /// <summary>
+            /// 获取手机APP支付API Client
+            /// </summary>
+            /// <returns>手机APP支付API Client</returns>
+            public static EasySDK.Payment.App.Client App()
+            {
+                return new EasySDK.Payment.App.Client(new Client(context));
+            }
+
+            /// <summary>
+            /// 获取电脑网站支付API Client
+            /// </summary>
+            /// <returns>电脑网站支付API</returns>
+            public static EasySDK.Payment.Page.Client Page()
+            {
+                return new EasySDK.Payment.Page.Client(new Client(context));
+            }
+
+            /// <summary>
+            /// 获取手机网站支付API Client
+            /// </summary>
+            /// <returns>手机网站支付API</returns>
+            public static EasySDK.Payment.Wap.Client Wap()
+            {
+                return new EasySDK.Payment.Wap.Client(new Client(context));
+            }
+        }
+
+        /// <summary>
+        /// 安全能力相关
+        /// </summary>
+        public static class Security
+        {
+            /// <summary>
+            /// 获取文本风险识别相关API Client
+            /// </summary>
+            /// <returns>文本风险识别相关API Client</returns>
+            public static EasySDK.Security.TextRisk.Client TextRisk()
+            {
+                return new EasySDK.Security.TextRisk.Client(new Client(context));
+            }
+        }
+
+        /// <summary>
+        /// 辅助工具
+        /// </summary>
+        public static class Util
+        {
+            /// <summary>
+            /// 获取OpenAPI通用接口,可通过自行拼装参数,调用几乎所有OpenAPI
+            /// </summary>
+            /// <returns>OpenAPI通用接口</returns>
+            public static EasySDK.Util.Generic.Client Generic()
+            {
+                return new EasySDK.Util.Generic.Client(new Client(context));
+            }
+
+            /// <summary>
+            /// 获取AES128加解密相关API Client,常用于会员手机号的解密
+            /// </summary>
+            /// <returns>AES128加解密相关API Client</returns>
+            public static EasySDK.Util.AES.Client AES()
+            {
+                return new EasySDK.Util.AES.Client(new Client(context));
+            }
+        }
+    }
+}

+ 1832 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Client.cs

@@ -0,0 +1,1832 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Marketing.OpenLife.Models;
+
+namespace Alipay.EasySDK.Marketing.OpenLife
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipayOpenPublicMessageContentCreateResponse CreateImageTextContent(string title, string cover, string content, string contentComment, string ctype, string benefit, string extTags, string loginIds)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.message.content.create"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"title", title},
+                        {"cover", cover},
+                        {"content", content},
+                        {"could_comment", contentComment},
+                        {"ctype", ctype},
+                        {"benefit", benefit},
+                        {"ext_tags", extTags},
+                        {"login_ids", loginIds},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.open.public.message.content.create");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageContentCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageContentCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOpenPublicMessageContentCreateResponse> CreateImageTextContentAsync(string title, string cover, string content, string contentComment, string ctype, string benefit, string extTags, string loginIds)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.message.content.create"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"title", title},
+                        {"cover", cover},
+                        {"content", content},
+                        {"could_comment", contentComment},
+                        {"ctype", ctype},
+                        {"benefit", benefit},
+                        {"ext_tags", extTags},
+                        {"login_ids", loginIds},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.open.public.message.content.create");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageContentCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageContentCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayOpenPublicMessageContentModifyResponse ModifyImageTextContent(string contentId, string title, string cover, string content, string couldComment, string ctype, string benefit, string extTags, string loginIds)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.message.content.modify"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"content_id", contentId},
+                        {"title", title},
+                        {"cover", cover},
+                        {"content", content},
+                        {"could_comment", couldComment},
+                        {"ctype", ctype},
+                        {"benefit", benefit},
+                        {"ext_tags", extTags},
+                        {"login_ids", loginIds},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.open.public.message.content.modify");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageContentModifyResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageContentModifyResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOpenPublicMessageContentModifyResponse> ModifyImageTextContentAsync(string contentId, string title, string cover, string content, string couldComment, string ctype, string benefit, string extTags, string loginIds)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.message.content.modify"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"content_id", contentId},
+                        {"title", title},
+                        {"cover", cover},
+                        {"content", content},
+                        {"could_comment", couldComment},
+                        {"ctype", ctype},
+                        {"benefit", benefit},
+                        {"ext_tags", extTags},
+                        {"login_ids", loginIds},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.open.public.message.content.modify");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageContentModifyResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageContentModifyResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayOpenPublicMessageTotalSendResponse SendText(string text)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.message.total.send"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Text textObj = new Text
+                    {
+                        Title = "",
+                        Content = text,
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"msg_type", "text"},
+                        {"text", textObj},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.open.public.message.total.send");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageTotalSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageTotalSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOpenPublicMessageTotalSendResponse> SendTextAsync(string text)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.message.total.send"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Text textObj = new Text
+                    {
+                        Title = "",
+                        Content = text,
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"msg_type", "text"},
+                        {"text", textObj},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.open.public.message.total.send");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageTotalSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageTotalSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayOpenPublicMessageTotalSendResponse SendImageText(List<Article> articles)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.message.total.send"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"msg_type", "image-text"},
+                        {"articles", articles},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.open.public.message.total.send");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageTotalSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageTotalSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOpenPublicMessageTotalSendResponse> SendImageTextAsync(List<Article> articles)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.message.total.send"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"msg_type", "image-text"},
+                        {"articles", articles},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.open.public.message.total.send");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageTotalSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageTotalSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayOpenPublicMessageSingleSendResponse SendSingleMessage(string toUserId, Template template)
+        {
+            template.Validate();
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.message.single.send"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"to_user_id", toUserId},
+                        {"template", template},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.open.public.message.single.send");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageSingleSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageSingleSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOpenPublicMessageSingleSendResponse> SendSingleMessageAsync(string toUserId, Template template)
+        {
+            template.Validate();
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.message.single.send"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"to_user_id", toUserId},
+                        {"template", template},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.open.public.message.single.send");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageSingleSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicMessageSingleSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayOpenPublicLifeMsgRecallResponse RecallMessage(string messageId)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.life.msg.recall"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"message_id", messageId},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.open.public.life.msg.recall");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicLifeMsgRecallResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicLifeMsgRecallResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOpenPublicLifeMsgRecallResponse> RecallMessageAsync(string messageId)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.life.msg.recall"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"message_id", messageId},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.open.public.life.msg.recall");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicLifeMsgRecallResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicLifeMsgRecallResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayOpenPublicTemplateMessageIndustryModifyResponse SetIndustry(string primaryIndustryCode, string primaryIndustryName, string secondaryIndustryCode, string secondaryIndustryName)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.template.message.industry.modify"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"primary_industry_code", primaryIndustryCode},
+                        {"primary_industry_name", primaryIndustryName},
+                        {"secondary_industry_code", secondaryIndustryCode},
+                        {"secondary_industry_name", secondaryIndustryName},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.open.public.template.message.industry.modify");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicTemplateMessageIndustryModifyResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicTemplateMessageIndustryModifyResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOpenPublicTemplateMessageIndustryModifyResponse> SetIndustryAsync(string primaryIndustryCode, string primaryIndustryName, string secondaryIndustryCode, string secondaryIndustryName)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.template.message.industry.modify"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"primary_industry_code", primaryIndustryCode},
+                        {"primary_industry_name", primaryIndustryName},
+                        {"secondary_industry_code", secondaryIndustryCode},
+                        {"secondary_industry_name", secondaryIndustryName},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.open.public.template.message.industry.modify");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicTemplateMessageIndustryModifyResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicTemplateMessageIndustryModifyResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayOpenPublicSettingCategoryQueryResponse GetIndustry()
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.setting.category.query"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>(){};
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.open.public.setting.category.query");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicSettingCategoryQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicSettingCategoryQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOpenPublicSettingCategoryQueryResponse> GetIndustryAsync()
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.public.setting.category.query"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>(){};
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.open.public.setting.category.query");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicSettingCategoryQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenPublicSettingCategoryQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 37 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicLifeMsgRecallResponse.cs

@@ -0,0 +1,37 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.OpenLife.Models
+{
+    public class AlipayOpenPublicLifeMsgRecallResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+    }
+
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageContentCreateResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.OpenLife.Models
+{
+    public class AlipayOpenPublicMessageContentCreateResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("content_id")]
+        [Validation(Required=true)]
+        public string ContentId { get; set; }
+
+        [NameInMap("content_url")]
+        [Validation(Required=true)]
+        public string ContentUrl { get; set; }
+
+    }
+
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageContentModifyResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.OpenLife.Models
+{
+    public class AlipayOpenPublicMessageContentModifyResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("content_id")]
+        [Validation(Required=true)]
+        public string ContentId { get; set; }
+
+        [NameInMap("content_url")]
+        [Validation(Required=true)]
+        public string ContentUrl { get; set; }
+
+    }
+
+}

+ 37 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageSingleSendResponse.cs

@@ -0,0 +1,37 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.OpenLife.Models
+{
+    public class AlipayOpenPublicMessageSingleSendResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+    }
+
+}

+ 41 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicMessageTotalSendResponse.cs

@@ -0,0 +1,41 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.OpenLife.Models
+{
+    public class AlipayOpenPublicMessageTotalSendResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("message_id")]
+        [Validation(Required=true)]
+        public string MessageId { get; set; }
+
+    }
+
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicSettingCategoryQueryResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.OpenLife.Models
+{
+    public class AlipayOpenPublicSettingCategoryQueryResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("primary_category")]
+        [Validation(Required=true)]
+        public string PrimaryCategory { get; set; }
+
+        [NameInMap("secondary_category")]
+        [Validation(Required=true)]
+        public string SecondaryCategory { get; set; }
+
+    }
+
+}

+ 37 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/AlipayOpenPublicTemplateMessageIndustryModifyResponse.cs

@@ -0,0 +1,37 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.OpenLife.Models
+{
+    public class AlipayOpenPublicTemplateMessageIndustryModifyResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+    }
+
+}

+ 34 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Article.cs

@@ -0,0 +1,34 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.OpenLife.Models
+{
+    public class Article : TeaModel {
+        [NameInMap("title")]
+        [Validation(Required=false)]
+        public string Title { get; set; }
+
+        [NameInMap("desc")]
+        [Validation(Required=true)]
+        public string Desc { get; set; }
+
+        [NameInMap("image_url")]
+        [Validation(Required=false)]
+        public string ImageUrl { get; set; }
+
+        [NameInMap("url")]
+        [Validation(Required=true)]
+        public string Url { get; set; }
+
+        [NameInMap("action_name")]
+        [Validation(Required=false)]
+        public string ActionName { get; set; }
+
+    }
+
+}

+ 42 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Context.cs

@@ -0,0 +1,42 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.OpenLife.Models
+{
+    public class Context : TeaModel {
+        [NameInMap("head_color")]
+        [Validation(Required=true)]
+        public string HeadColor { get; set; }
+
+        [NameInMap("url")]
+        [Validation(Required=true)]
+        public string Url { get; set; }
+
+        [NameInMap("action_name")]
+        [Validation(Required=true)]
+        public string ActionName { get; set; }
+
+        [NameInMap("keyword1")]
+        [Validation(Required=false)]
+        public Keyword Keyword1 { get; set; }
+
+        [NameInMap("keyword2")]
+        [Validation(Required=false)]
+        public Keyword Keyword2 { get; set; }
+
+        [NameInMap("first")]
+        [Validation(Required=false)]
+        public Keyword First { get; set; }
+
+        [NameInMap("remark")]
+        [Validation(Required=false)]
+        public Keyword Remark { get; set; }
+
+    }
+
+}

+ 22 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Keyword.cs

@@ -0,0 +1,22 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.OpenLife.Models
+{
+    public class Keyword : TeaModel {
+        [NameInMap("color")]
+        [Validation(Required=true)]
+        public string Color { get; set; }
+
+        [NameInMap("value")]
+        [Validation(Required=true)]
+        public string Value { get; set; }
+
+    }
+
+}

+ 22 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Template.cs

@@ -0,0 +1,22 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.OpenLife.Models
+{
+    public class Template : TeaModel {
+        [NameInMap("template_id")]
+        [Validation(Required=true)]
+        public string TemplateId { get; set; }
+
+        [NameInMap("context")]
+        [Validation(Required=true)]
+        public Context Context { get; set; }
+
+    }
+
+}

+ 22 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/OpenLife/Models/Text.cs

@@ -0,0 +1,22 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.OpenLife.Models
+{
+    public class Text : TeaModel {
+        [NameInMap("title")]
+        [Validation(Required=true)]
+        public string Title { get; set; }
+
+        [NameInMap("content")]
+        [Validation(Required=true)]
+        public string Content { get; set; }
+
+    }
+
+}

+ 964 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Client.cs

@@ -0,0 +1,964 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Marketing.Pass.Models;
+
+namespace Alipay.EasySDK.Marketing.Pass
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipayPassTemplateAddResponse CreateTemplate(string uniqueId, string tplContent)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.pass.template.add"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"unique_id", uniqueId},
+                        {"tpl_content", tplContent},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.pass.template.add");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayPassTemplateAddResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayPassTemplateAddResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayPassTemplateAddResponse> CreateTemplateAsync(string uniqueId, string tplContent)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.pass.template.add"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"unique_id", uniqueId},
+                        {"tpl_content", tplContent},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.pass.template.add");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayPassTemplateAddResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayPassTemplateAddResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayPassTemplateUpdateResponse UpdateTemplate(string tplId, string tplContent)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.pass.template.update"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"tpl_id", tplId},
+                        {"tpl_content", tplContent},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.pass.template.update");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayPassTemplateUpdateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayPassTemplateUpdateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayPassTemplateUpdateResponse> UpdateTemplateAsync(string tplId, string tplContent)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.pass.template.update"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"tpl_id", tplId},
+                        {"tpl_content", tplContent},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.pass.template.update");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayPassTemplateUpdateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayPassTemplateUpdateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayPassInstanceAddResponse AddInstance(string tplId, string tplParams, string recognitionType, string recognitionInfo)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.pass.instance.add"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"tpl_id", tplId},
+                        {"tpl_params", tplParams},
+                        {"recognition_type", recognitionType},
+                        {"recognition_info", recognitionInfo},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.pass.instance.add");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayPassInstanceAddResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayPassInstanceAddResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayPassInstanceAddResponse> AddInstanceAsync(string tplId, string tplParams, string recognitionType, string recognitionInfo)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.pass.instance.add"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"tpl_id", tplId},
+                        {"tpl_params", tplParams},
+                        {"recognition_type", recognitionType},
+                        {"recognition_info", recognitionInfo},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.pass.instance.add");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayPassInstanceAddResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayPassInstanceAddResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayPassInstanceUpdateResponse UpdateInstance(string serialNumber, string channelId, string tplParams, string status, string verifyCode, string verifyType)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.pass.instance.update"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"serial_number", serialNumber},
+                        {"channel_id", channelId},
+                        {"tpl_params", tplParams},
+                        {"status", status},
+                        {"verify_code", verifyCode},
+                        {"verify_type", verifyType},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.pass.instance.update");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayPassInstanceUpdateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayPassInstanceUpdateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayPassInstanceUpdateResponse> UpdateInstanceAsync(string serialNumber, string channelId, string tplParams, string status, string verifyCode, string verifyType)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.pass.instance.update"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"serial_number", serialNumber},
+                        {"channel_id", channelId},
+                        {"tpl_params", tplParams},
+                        {"status", status},
+                        {"verify_code", verifyCode},
+                        {"verify_type", verifyType},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.pass.instance.update");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayPassInstanceUpdateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayPassInstanceUpdateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassInstanceAddResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.Pass.Models
+{
+    public class AlipayPassInstanceAddResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("success")]
+        [Validation(Required=true)]
+        public bool? Success { get; set; }
+
+        [NameInMap("result")]
+        [Validation(Required=true)]
+        public string Result { get; set; }
+
+    }
+
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassInstanceUpdateResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.Pass.Models
+{
+    public class AlipayPassInstanceUpdateResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("success")]
+        [Validation(Required=true)]
+        public bool? Success { get; set; }
+
+        [NameInMap("result")]
+        [Validation(Required=true)]
+        public string Result { get; set; }
+
+    }
+
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassTemplateAddResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.Pass.Models
+{
+    public class AlipayPassTemplateAddResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("success")]
+        [Validation(Required=true)]
+        public bool? Success { get; set; }
+
+        [NameInMap("result")]
+        [Validation(Required=true)]
+        public string Result { get; set; }
+
+    }
+
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/Pass/Models/AlipayPassTemplateUpdateResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.Pass.Models
+{
+    public class AlipayPassTemplateUpdateResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("success")]
+        [Validation(Required=true)]
+        public bool? Success { get; set; }
+
+        [NameInMap("result")]
+        [Validation(Required=true)]
+        public string Result { get; set; }
+
+    }
+
+}

+ 322 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/TemplateMessage/Client.cs

@@ -0,0 +1,322 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Marketing.TemplateMessage.Models;
+
+namespace Alipay.EasySDK.Marketing.TemplateMessage
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipayOpenAppMiniTemplatemessageSendResponse Send(string toUserId, string formId, string userTemplateId, string page, string data)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.app.mini.templatemessage.send"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"to_user_id", toUserId},
+                        {"form_id", formId},
+                        {"user_template_id", userTemplateId},
+                        {"page", page},
+                        {"data", data},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.open.app.mini.templatemessage.send");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenAppMiniTemplatemessageSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenAppMiniTemplatemessageSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOpenAppMiniTemplatemessageSendResponse> SendAsync(string toUserId, string formId, string userTemplateId, string page, string data)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.open.app.mini.templatemessage.send"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"to_user_id", toUserId},
+                        {"form_id", formId},
+                        {"user_template_id", userTemplateId},
+                        {"page", page},
+                        {"data", data},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.open.app.mini.templatemessage.send");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenAppMiniTemplatemessageSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenAppMiniTemplatemessageSendResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 37 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Marketing/TemplateMessage/Models/AlipayOpenAppMiniTemplatemessageSendResponse.cs

@@ -0,0 +1,37 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Marketing.TemplateMessage.Models
+{
+    public class AlipayOpenAppMiniTemplatemessageSendResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+    }
+
+}

+ 562 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Client.cs

@@ -0,0 +1,562 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Member.Identification.Models;
+
+namespace Alipay.EasySDK.Member.Identification
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipayUserCertifyOpenInitializeResponse Init(string outerOrderNo, string bizCode, IdentityParam identityParam, MerchantConfig merchantConfig)
+        {
+            identityParam.Validate();
+            merchantConfig.Validate();
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.user.certify.open.initialize"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"outer_order_no", outerOrderNo},
+                        {"biz_code", bizCode},
+                        {"identity_param", identityParam},
+                        {"merchant_config", merchantConfig},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.user.certify.open.initialize");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayUserCertifyOpenInitializeResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayUserCertifyOpenInitializeResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayUserCertifyOpenInitializeResponse> InitAsync(string outerOrderNo, string bizCode, IdentityParam identityParam, MerchantConfig merchantConfig)
+        {
+            identityParam.Validate();
+            merchantConfig.Validate();
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.user.certify.open.initialize"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"outer_order_no", outerOrderNo},
+                        {"biz_code", bizCode},
+                        {"identity_param", identityParam},
+                        {"merchant_config", merchantConfig},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.user.certify.open.initialize");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayUserCertifyOpenInitializeResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayUserCertifyOpenInitializeResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayUserCertifyOpenQueryResponse Query(string certifyId)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.user.certify.open.query"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"certify_id", certifyId},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.user.certify.open.query");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayUserCertifyOpenQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayUserCertifyOpenQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayUserCertifyOpenQueryResponse> QueryAsync(string certifyId)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.user.certify.open.query"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"certify_id", certifyId},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.user.certify.open.query");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayUserCertifyOpenQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayUserCertifyOpenQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayUserCertifyOpenCertifyResponse Certify(string certifyId)
+        {
+            Dictionary<string, string> systemParams = new Dictionary<string, string>
+            {
+                {"method", "alipay.user.certify.open.certify"},
+                {"app_id", this._kernel.GetConfig("appId")},
+                {"timestamp", this._kernel.GetTimestamp()},
+                {"format", "json"},
+                {"version", "1.0"},
+                {"alipay_sdk", this._kernel.GetSdkVersion()},
+                {"charset", "UTF-8"},
+                {"sign_type", this._kernel.GetConfig("signType")},
+                {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+            };
+            Dictionary<string, object> bizParams = new Dictionary<string, object>
+            {
+                {"certify_id", certifyId},
+            };
+            Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+            string sign = this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"));
+            Dictionary<string, string> response = new Dictionary<string, string>
+            {
+                {"body", this._kernel.GeneratePage("GET", systemParams, bizParams, textParams, sign)},
+            };
+            return TeaModel.ToObject<AlipayUserCertifyOpenCertifyResponse>(response);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 21 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/AlipayUserCertifyOpenCertifyResponse.cs

@@ -0,0 +1,21 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Member.Identification.Models
+{
+    public class AlipayUserCertifyOpenCertifyResponse : TeaModel {
+        /// <summary>
+        /// 认证服务请求地址
+        /// </summary>
+        [NameInMap("body")]
+        [Validation(Required=true)]
+        public string Body { get; set; }
+
+    }
+
+}

+ 41 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/AlipayUserCertifyOpenInitializeResponse.cs

@@ -0,0 +1,41 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Member.Identification.Models
+{
+    public class AlipayUserCertifyOpenInitializeResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("certify_id")]
+        [Validation(Required=true)]
+        public string CertifyId { get; set; }
+
+    }
+
+}

+ 49 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/AlipayUserCertifyOpenQueryResponse.cs

@@ -0,0 +1,49 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Member.Identification.Models
+{
+    public class AlipayUserCertifyOpenQueryResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("passed")]
+        [Validation(Required=true)]
+        public string Passed { get; set; }
+
+        [NameInMap("identity_info")]
+        [Validation(Required=true)]
+        public string IdentityInfo { get; set; }
+
+        [NameInMap("material_info")]
+        [Validation(Required=true)]
+        public string MaterialInfo { get; set; }
+
+    }
+
+}

+ 30 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/IdentityParam.cs

@@ -0,0 +1,30 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Member.Identification.Models
+{
+    public class IdentityParam : TeaModel {
+        [NameInMap("identity_type")]
+        [Validation(Required=true)]
+        public string IdentityType { get; set; }
+
+        [NameInMap("cert_type")]
+        [Validation(Required=true)]
+        public string CertType { get; set; }
+
+        [NameInMap("cert_name")]
+        [Validation(Required=true)]
+        public string CertName { get; set; }
+
+        [NameInMap("cert_no")]
+        [Validation(Required=true)]
+        public string CertNo { get; set; }
+
+    }
+
+}

+ 18 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Member/Identification/Models/MerchantConfig.cs

@@ -0,0 +1,18 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Member.Identification.Models
+{
+    public class MerchantConfig : TeaModel {
+        [NameInMap("return_url")]
+        [Validation(Required=true)]
+        public string ReturnUrl { get; set; }
+
+    }
+
+}

+ 135 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/App/Client.cs

@@ -0,0 +1,135 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Payment.App.Models;
+
+namespace Alipay.EasySDK.Payment.App
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+
+        public AlipayTradeAppPayResponse Pay(string subject, string outTradeNo, string totalAmount)
+        {
+            Dictionary<string, string> systemParams = new Dictionary<string, string>
+            {
+                {"method", "alipay.trade.app.pay"},
+                {"app_id", this._kernel.GetConfig("appId")},
+                {"timestamp", this._kernel.GetTimestamp()},
+                {"format", "json"},
+                {"version", "1.0"},
+                {"alipay_sdk", this._kernel.GetSdkVersion()},
+                {"charset", "UTF-8"},
+                {"sign_type", this._kernel.GetConfig("signType")},
+                {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+            };
+            Dictionary<string, object> bizParams = new Dictionary<string, object>
+            {
+                {"subject", subject},
+                {"out_trade_no", outTradeNo},
+                {"total_amount", totalAmount},
+            };
+            Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+            string sign = this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"));
+            Dictionary<string, string> response = new Dictionary<string, string>
+            {
+                {"body", this._kernel.GenerateOrderString(systemParams, bizParams, textParams, sign)},
+            };
+            return TeaModel.ToObject<AlipayTradeAppPayResponse>(response);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 21 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/App/Models/AlipayTradeAppPayResponse.cs

@@ -0,0 +1,21 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.App.Models
+{
+    public class AlipayTradeAppPayResponse : TeaModel {
+        /// <summary>
+        /// 订单信息,字符串形式
+        /// </summary>
+        [NameInMap("body")]
+        [Validation(Required=true)]
+        public string Body { get; set; }
+
+    }
+
+}

+ 1598 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Client.cs

@@ -0,0 +1,1598 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Payment.Common.Models;
+
+namespace Alipay.EasySDK.Payment.Common
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipayTradeCreateResponse Create(string subject, string outTradeNo, string totalAmount, string buyerId)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.create"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"subject", subject},
+                        {"out_trade_no", outTradeNo},
+                        {"total_amount", totalAmount},
+                        {"buyer_id", buyerId},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.trade.create");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayTradeCreateResponse> CreateAsync(string subject, string outTradeNo, string totalAmount, string buyerId)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.create"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"subject", subject},
+                        {"out_trade_no", outTradeNo},
+                        {"total_amount", totalAmount},
+                        {"buyer_id", buyerId},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.trade.create");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayTradeQueryResponse Query(string outTradeNo)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.query"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"out_trade_no", outTradeNo},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.trade.query");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayTradeQueryResponse> QueryAsync(string outTradeNo)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.query"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"out_trade_no", outTradeNo},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.trade.query");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayTradeRefundResponse Refund(string outTradeNo, string refundAmount)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.refund"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"out_trade_no", outTradeNo},
+                        {"refund_amount", refundAmount},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.trade.refund");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeRefundResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeRefundResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayTradeRefundResponse> RefundAsync(string outTradeNo, string refundAmount)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.refund"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"out_trade_no", outTradeNo},
+                        {"refund_amount", refundAmount},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.trade.refund");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeRefundResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeRefundResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayTradeCloseResponse Close(string outTradeNo)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.close"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"out_trade_no", outTradeNo},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.trade.close");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCloseResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCloseResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayTradeCloseResponse> CloseAsync(string outTradeNo)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.close"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"out_trade_no", outTradeNo},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.trade.close");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCloseResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCloseResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayTradeCancelResponse Cancel(string outTradeNo)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.cancel"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"out_trade_no", outTradeNo},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.trade.cancel");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCancelResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCancelResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayTradeCancelResponse> CancelAsync(string outTradeNo)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.cancel"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"out_trade_no", outTradeNo},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.trade.cancel");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCancelResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCancelResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayTradeFastpayRefundQueryResponse QueryRefund(string outTradeNo, string outRequestNo)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.fastpay.refund.query"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"out_trade_no", outTradeNo},
+                        {"out_request_no", outRequestNo},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.trade.fastpay.refund.query");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeFastpayRefundQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeFastpayRefundQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayTradeFastpayRefundQueryResponse> QueryRefundAsync(string outTradeNo, string outRequestNo)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.fastpay.refund.query"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"out_trade_no", outTradeNo},
+                        {"out_request_no", outRequestNo},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.trade.fastpay.refund.query");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeFastpayRefundQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeFastpayRefundQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayDataDataserviceBillDownloadurlQueryResponse DownloadBill(string billType, string billDate)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.data.dataservice.bill.downloadurl.query"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"bill_type", billType},
+                        {"bill_date", billDate},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.data.dataservice.bill.downloadurl.query");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayDataDataserviceBillDownloadurlQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayDataDataserviceBillDownloadurlQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayDataDataserviceBillDownloadurlQueryResponse> DownloadBillAsync(string billType, string billDate)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.data.dataservice.bill.downloadurl.query"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"bill_type", billType},
+                        {"bill_date", billDate},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.data.dataservice.bill.downloadurl.query");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayDataDataserviceBillDownloadurlQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayDataDataserviceBillDownloadurlQueryResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public bool? VerifyNotify(Dictionary<string, string> parameters)
+        {
+            if (this._kernel.IsCertMode())
+            {
+                return this._kernel.VerifyParams(parameters, this._kernel.ExtractAlipayPublicKey(""));
+            }
+            else
+            {
+                return this._kernel.VerifyParams(parameters, this._kernel.GetConfig("alipayPublicKey"));
+            }
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 41 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayDataDataserviceBillDownloadurlQueryResponse.cs

@@ -0,0 +1,41 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Common.Models
+{
+    public class AlipayDataDataserviceBillDownloadurlQueryResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("bill_download_url")]
+        [Validation(Required=true)]
+        public string BillDownloadUrl { get; set; }
+
+    }
+
+}

+ 61 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeCancelResponse.cs

@@ -0,0 +1,61 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Common.Models
+{
+    public class AlipayTradeCancelResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("trade_no")]
+        [Validation(Required=true)]
+        public string TradeNo { get; set; }
+
+        [NameInMap("out_trade_no")]
+        [Validation(Required=true)]
+        public string OutTradeNo { get; set; }
+
+        [NameInMap("retry_flag")]
+        [Validation(Required=true)]
+        public string RetryFlag { get; set; }
+
+        [NameInMap("action")]
+        [Validation(Required=true)]
+        public string Action { get; set; }
+
+        [NameInMap("gmt_refund_pay")]
+        [Validation(Required=true)]
+        public string GmtRefundPay { get; set; }
+
+        [NameInMap("refund_settlement_id")]
+        [Validation(Required=true)]
+        public string RefundSettlementId { get; set; }
+
+    }
+
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeCloseResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Common.Models
+{
+    public class AlipayTradeCloseResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("trade_no")]
+        [Validation(Required=true)]
+        public string TradeNo { get; set; }
+
+        [NameInMap("out_trade_no")]
+        [Validation(Required=true)]
+        public string OutTradeNo { get; set; }
+
+    }
+
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeCreateResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Common.Models
+{
+    public class AlipayTradeCreateResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("out_trade_no")]
+        [Validation(Required=true)]
+        public string OutTradeNo { get; set; }
+
+        [NameInMap("trade_no")]
+        [Validation(Required=true)]
+        public string TradeNo { get; set; }
+
+    }
+
+}

+ 109 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeFastpayRefundQueryResponse.cs

@@ -0,0 +1,109 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Common.Models
+{
+    public class AlipayTradeFastpayRefundQueryResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("error_code")]
+        [Validation(Required=true)]
+        public string ErrorCode { get; set; }
+
+        [NameInMap("gmt_refund_pay")]
+        [Validation(Required=true)]
+        public string GmtRefundPay { get; set; }
+
+        [NameInMap("industry_sepc_detail")]
+        [Validation(Required=true)]
+        public string IndustrySepcDetail { get; set; }
+
+        [NameInMap("out_request_no")]
+        [Validation(Required=true)]
+        public string OutRequestNo { get; set; }
+
+        [NameInMap("out_trade_no")]
+        [Validation(Required=true)]
+        public string OutTradeNo { get; set; }
+
+        [NameInMap("present_refund_buyer_amount")]
+        [Validation(Required=true)]
+        public string PresentRefundBuyerAmount { get; set; }
+
+        [NameInMap("present_refund_discount_amount")]
+        [Validation(Required=true)]
+        public string PresentRefundDiscountAmount { get; set; }
+
+        [NameInMap("present_refund_mdiscount_amount")]
+        [Validation(Required=true)]
+        public string PresentRefundMdiscountAmount { get; set; }
+
+        [NameInMap("refund_amount")]
+        [Validation(Required=true)]
+        public string RefundAmount { get; set; }
+
+        [NameInMap("refund_charge_amount")]
+        [Validation(Required=true)]
+        public string RefundChargeAmount { get; set; }
+
+        [NameInMap("refund_detail_item_list")]
+        [Validation(Required=true)]
+        public List<TradeFundBill> RefundDetailItemList { get; set; }
+
+        [NameInMap("refund_reason")]
+        [Validation(Required=true)]
+        public string RefundReason { get; set; }
+
+        [NameInMap("refund_royaltys")]
+        [Validation(Required=true)]
+        public List<RefundRoyaltyResult> RefundRoyaltys { get; set; }
+
+        [NameInMap("refund_settlement_id")]
+        [Validation(Required=true)]
+        public string RefundSettlementId { get; set; }
+
+        [NameInMap("refund_status")]
+        [Validation(Required=true)]
+        public string RefundStatus { get; set; }
+
+        [NameInMap("send_back_fee")]
+        [Validation(Required=true)]
+        public string SendBackFee { get; set; }
+
+        [NameInMap("total_amount")]
+        [Validation(Required=true)]
+        public string TotalAmount { get; set; }
+
+        [NameInMap("trade_no")]
+        [Validation(Required=true)]
+        public string TradeNo { get; set; }
+
+    }
+
+}

+ 177 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeQueryResponse.cs

@@ -0,0 +1,177 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Common.Models
+{
+    public class AlipayTradeQueryResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("trade_no")]
+        [Validation(Required=true)]
+        public string TradeNo { get; set; }
+
+        [NameInMap("out_trade_no")]
+        [Validation(Required=true)]
+        public string OutTradeNo { get; set; }
+
+        [NameInMap("buyer_logon_id")]
+        [Validation(Required=true)]
+        public string BuyerLogonId { get; set; }
+
+        [NameInMap("trade_status")]
+        [Validation(Required=true)]
+        public string TradeStatus { get; set; }
+
+        [NameInMap("total_amount")]
+        [Validation(Required=true)]
+        public string TotalAmount { get; set; }
+
+        [NameInMap("trans_currency")]
+        [Validation(Required=true)]
+        public string TransCurrency { get; set; }
+
+        [NameInMap("settle_currency")]
+        [Validation(Required=true)]
+        public string SettleCurrency { get; set; }
+
+        [NameInMap("settle_amount")]
+        [Validation(Required=true)]
+        public string SettleAmount { get; set; }
+
+        [NameInMap("pay_currency")]
+        [Validation(Required=true)]
+        public string PayCurrency { get; set; }
+
+        [NameInMap("pay_amount")]
+        [Validation(Required=true)]
+        public string PayAmount { get; set; }
+
+        [NameInMap("settle_trans_rate")]
+        [Validation(Required=true)]
+        public string SettleTransRate { get; set; }
+
+        [NameInMap("trans_pay_rate")]
+        [Validation(Required=true)]
+        public string TransPayRate { get; set; }
+
+        [NameInMap("buyer_pay_amount")]
+        [Validation(Required=true)]
+        public string BuyerPayAmount { get; set; }
+
+        [NameInMap("point_amount")]
+        [Validation(Required=true)]
+        public string PointAmount { get; set; }
+
+        [NameInMap("invoice_amount")]
+        [Validation(Required=true)]
+        public string InvoiceAmount { get; set; }
+
+        [NameInMap("send_pay_date")]
+        [Validation(Required=true)]
+        public string SendPayDate { get; set; }
+
+        [NameInMap("receipt_amount")]
+        [Validation(Required=true)]
+        public string ReceiptAmount { get; set; }
+
+        [NameInMap("store_id")]
+        [Validation(Required=true)]
+        public string StoreId { get; set; }
+
+        [NameInMap("terminal_id")]
+        [Validation(Required=true)]
+        public string TerminalId { get; set; }
+
+        [NameInMap("fund_bill_list")]
+        [Validation(Required=true)]
+        public List<TradeFundBill> FundBillList { get; set; }
+
+        [NameInMap("store_name")]
+        [Validation(Required=true)]
+        public string StoreName { get; set; }
+
+        [NameInMap("buyer_user_id")]
+        [Validation(Required=true)]
+        public string BuyerUserId { get; set; }
+
+        [NameInMap("charge_amount")]
+        [Validation(Required=true)]
+        public string ChargeAmount { get; set; }
+
+        [NameInMap("charge_flags")]
+        [Validation(Required=true)]
+        public string ChargeFlags { get; set; }
+
+        [NameInMap("settlement_id")]
+        [Validation(Required=true)]
+        public string SettlementId { get; set; }
+
+        [NameInMap("trade_settle_info")]
+        [Validation(Required=true)]
+        public List<TradeSettleInfo> TradeSettleInfo { get; set; }
+
+        [NameInMap("auth_trade_pay_mode")]
+        [Validation(Required=true)]
+        public string AuthTradePayMode { get; set; }
+
+        [NameInMap("buyer_user_type")]
+        [Validation(Required=true)]
+        public string BuyerUserType { get; set; }
+
+        [NameInMap("mdiscount_amount")]
+        [Validation(Required=true)]
+        public string MdiscountAmount { get; set; }
+
+        [NameInMap("discount_amount")]
+        [Validation(Required=true)]
+        public string DiscountAmount { get; set; }
+
+        [NameInMap("buyer_user_name")]
+        [Validation(Required=true)]
+        public string BuyerUserName { get; set; }
+
+        [NameInMap("subject")]
+        [Validation(Required=true)]
+        public string Subject { get; set; }
+
+        [NameInMap("body")]
+        [Validation(Required=true)]
+        public string Body { get; set; }
+
+        [NameInMap("alipay_sub_merchant_id")]
+        [Validation(Required=true)]
+        public string AlipaySubMerchantId { get; set; }
+
+        [NameInMap("ext_infos")]
+        [Validation(Required=true)]
+        public string ExtInfos { get; set; }
+
+    }
+
+}

+ 97 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/AlipayTradeRefundResponse.cs

@@ -0,0 +1,97 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Common.Models
+{
+    public class AlipayTradeRefundResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("trade_no")]
+        [Validation(Required=true)]
+        public string TradeNo { get; set; }
+
+        [NameInMap("out_trade_no")]
+        [Validation(Required=true)]
+        public string OutTradeNo { get; set; }
+
+        [NameInMap("buyer_logon_id")]
+        [Validation(Required=true)]
+        public string BuyerLogonId { get; set; }
+
+        [NameInMap("fund_change")]
+        [Validation(Required=true)]
+        public string FundChange { get; set; }
+
+        [NameInMap("refund_fee")]
+        [Validation(Required=true)]
+        public string RefundFee { get; set; }
+
+        [NameInMap("refund_currency")]
+        [Validation(Required=true)]
+        public string RefundCurrency { get; set; }
+
+        [NameInMap("gmt_refund_pay")]
+        [Validation(Required=true)]
+        public string GmtRefundPay { get; set; }
+
+        [NameInMap("refund_detail_item_list")]
+        [Validation(Required=true)]
+        public List<TradeFundBill> RefundDetailItemList { get; set; }
+
+        [NameInMap("store_name")]
+        [Validation(Required=true)]
+        public string StoreName { get; set; }
+
+        [NameInMap("buyer_user_id")]
+        [Validation(Required=true)]
+        public string BuyerUserId { get; set; }
+
+        [NameInMap("refund_preset_paytool_list")]
+        [Validation(Required=true)]
+        public List<PresetPayToolInfo> RefundPresetPaytoolList { get; set; }
+
+        [NameInMap("refund_settlement_id")]
+        [Validation(Required=true)]
+        public string RefundSettlementId { get; set; }
+
+        [NameInMap("present_refund_buyer_amount")]
+        [Validation(Required=true)]
+        public string PresentRefundBuyerAmount { get; set; }
+
+        [NameInMap("present_refund_discount_amount")]
+        [Validation(Required=true)]
+        public string PresentRefundDiscountAmount { get; set; }
+
+        [NameInMap("present_refund_mdiscount_amount")]
+        [Validation(Required=true)]
+        public string PresentRefundMdiscountAmount { get; set; }
+
+    }
+
+}

+ 22 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/PresetPayToolInfo.cs

@@ -0,0 +1,22 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Common.Models
+{
+    public class PresetPayToolInfo : TeaModel {
+        [NameInMap("amount")]
+        [Validation(Required=true)]
+        public List<string> Amount { get; set; }
+
+        [NameInMap("assert_type_code")]
+        [Validation(Required=true)]
+        public string AssertTypeCode { get; set; }
+
+    }
+
+}

+ 42 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/RefundRoyaltyResult.cs

@@ -0,0 +1,42 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Common.Models
+{
+    public class RefundRoyaltyResult : TeaModel {
+        [NameInMap("refund_amount")]
+        [Validation(Required=true)]
+        public string RefundAmount { get; set; }
+
+        [NameInMap("royalty_type")]
+        [Validation(Required=true)]
+        public string RoyaltyType { get; set; }
+
+        [NameInMap("result_code")]
+        [Validation(Required=true)]
+        public string ResultCode { get; set; }
+
+        [NameInMap("trans_out")]
+        [Validation(Required=true)]
+        public string TransOut { get; set; }
+
+        [NameInMap("trans_out_email")]
+        [Validation(Required=true)]
+        public string TransOutEmail { get; set; }
+
+        [NameInMap("trans_in")]
+        [Validation(Required=true)]
+        public string TransIn { get; set; }
+
+        [NameInMap("trans_in_email")]
+        [Validation(Required=true)]
+        public string TransInEmail { get; set; }
+
+    }
+
+}

+ 34 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/TradeFundBill.cs

@@ -0,0 +1,34 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Common.Models
+{
+    public class TradeFundBill : TeaModel {
+        [NameInMap("fund_channel")]
+        [Validation(Required=true)]
+        public string FundChannel { get; set; }
+
+        [NameInMap("bank_code")]
+        [Validation(Required=true)]
+        public string BankCode { get; set; }
+
+        [NameInMap("amount")]
+        [Validation(Required=true)]
+        public string Amount { get; set; }
+
+        [NameInMap("real_amount")]
+        [Validation(Required=true)]
+        public string RealAmount { get; set; }
+
+        [NameInMap("fund_type")]
+        [Validation(Required=true)]
+        public string FundType { get; set; }
+
+    }
+
+}

+ 38 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/TradeSettleDetail.cs

@@ -0,0 +1,38 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Common.Models
+{
+    public class TradeSettleDetail : TeaModel {
+        [NameInMap("operation_type")]
+        [Validation(Required=true)]
+        public string OperationType { get; set; }
+
+        [NameInMap("operation_serial_no")]
+        [Validation(Required=true)]
+        public string OperationSerial_no { get; set; }
+
+        [NameInMap("operation_dt")]
+        [Validation(Required=true)]
+        public string OperationDt { get; set; }
+
+        [NameInMap("trans_out")]
+        [Validation(Required=true)]
+        public string TransOut { get; set; }
+
+        [NameInMap("trans_in")]
+        [Validation(Required=true)]
+        public string TransIn { get; set; }
+
+        [NameInMap("amount")]
+        [Validation(Required=true)]
+        public string Amount { get; set; }
+
+    }
+
+}

+ 18 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Common/Models/TradeSettleInfo.cs

@@ -0,0 +1,18 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Common.Models
+{
+    public class TradeSettleInfo : TeaModel {
+        [NameInMap("trade_settle_detail_list")]
+        [Validation(Required=true)]
+        public List<TradeSettleDetail> TradeSettleDetailList { get; set; }
+
+    }
+
+}

+ 536 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Client.cs

@@ -0,0 +1,536 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Payment.FaceToFace.Models;
+
+namespace Alipay.EasySDK.Payment.FaceToFace
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipayTradePayResponse Pay(string subject, string outTradeNo, string totalAmount, string authCode)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.pay"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"subject", subject},
+                        {"out_trade_no", outTradeNo},
+                        {"total_amount", totalAmount},
+                        {"auth_code", authCode},
+                        {"scene", "bar_code"},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.trade.pay");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradePayResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradePayResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayTradePayResponse> PayAsync(string subject, string outTradeNo, string totalAmount, string authCode)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.pay"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"subject", subject},
+                        {"out_trade_no", outTradeNo},
+                        {"total_amount", totalAmount},
+                        {"auth_code", authCode},
+                        {"scene", "bar_code"},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.trade.pay");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradePayResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradePayResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public AlipayTradePrecreateResponse PreCreate(string subject, string outTradeNo, string totalAmount)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.precreate"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"subject", subject},
+                        {"out_trade_no", outTradeNo},
+                        {"total_amount", totalAmount},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.trade.precreate");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradePrecreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradePrecreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayTradePrecreateResponse> PreCreateAsync(string subject, string outTradeNo, string totalAmount)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.precreate"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"subject", subject},
+                        {"out_trade_no", outTradeNo},
+                        {"total_amount", totalAmount},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.trade.precreate");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradePrecreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradePrecreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 165 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/AlipayTradePayResponse.cs

@@ -0,0 +1,165 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.FaceToFace.Models
+{
+    public class AlipayTradePayResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("trade_no")]
+        [Validation(Required=true)]
+        public string TradeNo { get; set; }
+
+        [NameInMap("out_trade_no")]
+        [Validation(Required=true)]
+        public string OutTradeNo { get; set; }
+
+        [NameInMap("buyer_logon_id")]
+        [Validation(Required=true)]
+        public string BuyerLogonId { get; set; }
+
+        [NameInMap("settle_amount")]
+        [Validation(Required=true)]
+        public string SettleAmount { get; set; }
+
+        [NameInMap("pay_currency")]
+        [Validation(Required=true)]
+        public string PayCurrency { get; set; }
+
+        [NameInMap("pay_amount")]
+        [Validation(Required=true)]
+        public string PayAmount { get; set; }
+
+        [NameInMap("settle_trans_rate")]
+        [Validation(Required=true)]
+        public string SettleTransRate { get; set; }
+
+        [NameInMap("trans_pay_rate")]
+        [Validation(Required=true)]
+        public string TransPayRate { get; set; }
+
+        [NameInMap("total_amount")]
+        [Validation(Required=true)]
+        public string TotalAmount { get; set; }
+
+        [NameInMap("trans_currency")]
+        [Validation(Required=true)]
+        public string TransCurrency { get; set; }
+
+        [NameInMap("settle_currency")]
+        [Validation(Required=true)]
+        public string SettleCurrency { get; set; }
+
+        [NameInMap("receipt_amount")]
+        [Validation(Required=true)]
+        public string ReceiptAmount { get; set; }
+
+        [NameInMap("buyer_pay_amount")]
+        [Validation(Required=true)]
+        public string BuyerPayAmount { get; set; }
+
+        [NameInMap("point_amount")]
+        [Validation(Required=true)]
+        public string PointAmount { get; set; }
+
+        [NameInMap("invoice_amount")]
+        [Validation(Required=true)]
+        public string InvoiceAmount { get; set; }
+
+        [NameInMap("gmt_payment")]
+        [Validation(Required=true)]
+        public string GmtPayment { get; set; }
+
+        [NameInMap("fund_bill_list")]
+        [Validation(Required=true)]
+        public List<TradeFundBill> FundBillList { get; set; }
+
+        [NameInMap("card_balance")]
+        [Validation(Required=true)]
+        public string CardBalance { get; set; }
+
+        [NameInMap("store_name")]
+        [Validation(Required=true)]
+        public string StoreName { get; set; }
+
+        [NameInMap("buyer_user_id")]
+        [Validation(Required=true)]
+        public string BuyerUserId { get; set; }
+
+        [NameInMap("discount_goods_detail")]
+        [Validation(Required=true)]
+        public string DiscountGoodsDetail { get; set; }
+
+        [NameInMap("voucher_detail_list")]
+        [Validation(Required=true)]
+        public List<VoucherDetail> VoucherDetailList { get; set; }
+
+        [NameInMap("advance_amount")]
+        [Validation(Required=true)]
+        public string AdvanceAmount { get; set; }
+
+        [NameInMap("auth_trade_pay_mode")]
+        [Validation(Required=true)]
+        public string AuthTradePayMode { get; set; }
+
+        [NameInMap("charge_amount")]
+        [Validation(Required=true)]
+        public string ChargeAmount { get; set; }
+
+        [NameInMap("charge_flags")]
+        [Validation(Required=true)]
+        public string ChargeFlags { get; set; }
+
+        [NameInMap("settlement_id")]
+        [Validation(Required=true)]
+        public string SettlementId { get; set; }
+
+        [NameInMap("business_params")]
+        [Validation(Required=true)]
+        public string BusinessParams { get; set; }
+
+        [NameInMap("buyer_user_type")]
+        [Validation(Required=true)]
+        public string BuyerUserType { get; set; }
+
+        [NameInMap("mdiscount_amount")]
+        [Validation(Required=true)]
+        public string MdiscountAmount { get; set; }
+
+        [NameInMap("discount_amount")]
+        [Validation(Required=true)]
+        public string DiscountAmount { get; set; }
+
+        [NameInMap("buyer_user_name")]
+        [Validation(Required=true)]
+        public string BuyerUserName { get; set; }
+
+    }
+
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/AlipayTradePrecreateResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.FaceToFace.Models
+{
+    public class AlipayTradePrecreateResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("out_trade_no")]
+        [Validation(Required=true)]
+        public string OutTradeNo { get; set; }
+
+        [NameInMap("qr_code")]
+        [Validation(Required=true)]
+        public string QrCode { get; set; }
+
+    }
+
+}

+ 30 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/TradeFundBill.cs

@@ -0,0 +1,30 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.FaceToFace.Models
+{
+    public class TradeFundBill : TeaModel {
+        [NameInMap("fund_channel")]
+        [Validation(Required=true)]
+        public string FundChannel { get; set; }
+
+        [NameInMap("bank_code")]
+        [Validation(Required=true)]
+        public string BankCode { get; set; }
+
+        [NameInMap("amount")]
+        [Validation(Required=true)]
+        public string Amount { get; set; }
+
+        [NameInMap("real_amount")]
+        [Validation(Required=true)]
+        public string RealAmount { get; set; }
+
+    }
+
+}

+ 58 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/FaceToFace/Models/VoucherDetail.cs

@@ -0,0 +1,58 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.FaceToFace.Models
+{
+    public class VoucherDetail : TeaModel {
+        [NameInMap("id")]
+        [Validation(Required=true)]
+        public string Id { get; set; }
+
+        [NameInMap("name")]
+        [Validation(Required=true)]
+        public string Name { get; set; }
+
+        [NameInMap("type")]
+        [Validation(Required=true)]
+        public string Type { get; set; }
+
+        [NameInMap("amount")]
+        [Validation(Required=true)]
+        public string Amount { get; set; }
+
+        [NameInMap("merchant_contribute")]
+        [Validation(Required=true)]
+        public string MerchantContribute { get; set; }
+
+        [NameInMap("other_contribute")]
+        [Validation(Required=true)]
+        public string OtherContribute { get; set; }
+
+        [NameInMap("memo")]
+        [Validation(Required=true)]
+        public string Memo { get; set; }
+
+        [NameInMap("template_id")]
+        [Validation(Required=true)]
+        public string TemplateId { get; set; }
+
+        [NameInMap("purchase_buyer_contribute")]
+        [Validation(Required=true)]
+        public string PurchaseBuyerContribute { get; set; }
+
+        [NameInMap("purchase_merchant_contribute")]
+        [Validation(Required=true)]
+        public string PurchaseMerchantContribute { get; set; }
+
+        [NameInMap("purchase_ant_contribute")]
+        [Validation(Required=true)]
+        public string PurchaseAntContribute { get; set; }
+
+    }
+
+}

+ 324 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Huabei/Client.cs

@@ -0,0 +1,324 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Payment.Huabei.Models;
+
+namespace Alipay.EasySDK.Payment.Huabei
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipayTradeCreateResponse Create(string subject, string outTradeNo, string totalAmount, string buyerId, HuabeiConfig extendParams)
+        {
+            extendParams.Validate();
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.create"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"subject", subject},
+                        {"out_trade_no", outTradeNo},
+                        {"total_amount", totalAmount},
+                        {"buyer_id", buyerId},
+                        {"extend_params", extendParams},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.trade.create");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayTradeCreateResponse> CreateAsync(string subject, string outTradeNo, string totalAmount, string buyerId, HuabeiConfig extendParams)
+        {
+            extendParams.Validate();
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.trade.create"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"subject", subject},
+                        {"out_trade_no", outTradeNo},
+                        {"total_amount", totalAmount},
+                        {"buyer_id", buyerId},
+                        {"extend_params", extendParams},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.trade.create");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayTradeCreateResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 45 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Huabei/Models/AlipayTradeCreateResponse.cs

@@ -0,0 +1,45 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Huabei.Models
+{
+    public class AlipayTradeCreateResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("out_trade_no")]
+        [Validation(Required=true)]
+        public string OutTradeNo { get; set; }
+
+        [NameInMap("trade_no")]
+        [Validation(Required=true)]
+        public string TradeNo { get; set; }
+
+    }
+
+}

+ 22 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Huabei/Models/HuabeiConfig.cs

@@ -0,0 +1,22 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Huabei.Models
+{
+    public class HuabeiConfig : TeaModel {
+        [NameInMap("hb_fq_num")]
+        [Validation(Required=true)]
+        public string HbFqNum { get; set; }
+
+        [NameInMap("hb_fq_seller_percent")]
+        [Validation(Required=true)]
+        public string HbFqSellerPercent { get; set; }
+
+    }
+
+}

+ 139 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Page/Client.cs

@@ -0,0 +1,139 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Payment.Page.Models;
+
+namespace Alipay.EasySDK.Payment.Page
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+
+        public AlipayTradePagePayResponse Pay(string subject, string outTradeNo, string totalAmount, string returnUrl)
+        {
+            Dictionary<string, string> systemParams = new Dictionary<string, string>
+            {
+                {"method", "alipay.trade.page.pay"},
+                {"app_id", this._kernel.GetConfig("appId")},
+                {"timestamp", this._kernel.GetTimestamp()},
+                {"format", "json"},
+                {"version", "1.0"},
+                {"alipay_sdk", this._kernel.GetSdkVersion()},
+                {"charset", "UTF-8"},
+                {"sign_type", this._kernel.GetConfig("signType")},
+                {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+            };
+            Dictionary<string, object> bizParams = new Dictionary<string, object>
+            {
+                {"subject", subject},
+                {"out_trade_no", outTradeNo},
+                {"total_amount", totalAmount},
+                {"product_code", "FAST_INSTANT_TRADE_PAY"},
+            };
+            Dictionary<string, string> textParams = new Dictionary<string, string>
+            {
+                {"return_url", returnUrl},
+            };
+            string sign = this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"));
+            Dictionary<string, string> response = new Dictionary<string, string>
+            {
+                {"body", this._kernel.GeneratePage("POST", systemParams, bizParams, textParams, sign)},
+            };
+            return TeaModel.ToObject<AlipayTradePagePayResponse>(response);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 21 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Page/Models/AlipayTradePagePayResponse.cs

@@ -0,0 +1,21 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Page.Models
+{
+    public class AlipayTradePagePayResponse : TeaModel {
+        /// <summary>
+        /// 订单信息,Form表单形式
+        /// </summary>
+        [NameInMap("body")]
+        [Validation(Required=true)]
+        public string Body { get; set; }
+
+    }
+
+}

+ 140 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Wap/Client.cs

@@ -0,0 +1,140 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Payment.Wap.Models;
+
+namespace Alipay.EasySDK.Payment.Wap
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+
+        public AlipayTradeWapPayResponse Pay(string subject, string outTradeNo, string totalAmount, string quitUrl, string returnUrl)
+        {
+            Dictionary<string, string> systemParams = new Dictionary<string, string>
+            {
+                {"method", "alipay.trade.wap.pay"},
+                {"app_id", this._kernel.GetConfig("appId")},
+                {"timestamp", this._kernel.GetTimestamp()},
+                {"format", "json"},
+                {"version", "1.0"},
+                {"alipay_sdk", this._kernel.GetSdkVersion()},
+                {"charset", "UTF-8"},
+                {"sign_type", this._kernel.GetConfig("signType")},
+                {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+            };
+            Dictionary<string, object> bizParams = new Dictionary<string, object>
+            {
+                {"subject", subject},
+                {"out_trade_no", outTradeNo},
+                {"total_amount", totalAmount},
+                {"quit_url", quitUrl},
+                {"product_code", "QUICK_WAP_WAY"},
+            };
+            Dictionary<string, string> textParams = new Dictionary<string, string>
+            {
+                {"return_url", returnUrl},
+            };
+            string sign = this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"));
+            Dictionary<string, string> response = new Dictionary<string, string>
+            {
+                {"body", this._kernel.GeneratePage("POST", systemParams, bizParams, textParams, sign)},
+            };
+            return TeaModel.ToObject<AlipayTradeWapPayResponse>(response);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 21 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Payment/Wap/Models/AlipayTradeWapPayResponse.cs

@@ -0,0 +1,21 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Payment.Wap.Models
+{
+    public class AlipayTradeWapPayResponse : TeaModel {
+        /// <summary>
+        /// 订单信息,Form表单形式
+        /// </summary>
+        [NameInMap("body")]
+        [Validation(Required=true)]
+        public string Body { get; set; }
+
+    }
+
+}

+ 314 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Security/TextRisk/Client.cs

@@ -0,0 +1,314 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Security.TextRisk.Models;
+
+namespace Alipay.EasySDK.Security.TextRisk
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipaySecurityRiskContentDetectResponse Detect(string content)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.security.risk.content.detect"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"content", content},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, "alipay.security.risk.content.detect");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipaySecurityRiskContentDetectResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipaySecurityRiskContentDetectResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipaySecurityRiskContentDetectResponse> DetectAsync(string content)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", "alipay.security.risk.content.detect"},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    Dictionary<string, object> bizParams = new Dictionary<string, object>
+                    {
+                        {"content", content},
+                    };
+                    Dictionary<string, string> textParams = new Dictionary<string, string>(){};
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, "alipay.security.risk.content.detect");
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipaySecurityRiskContentDetectResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipaySecurityRiskContentDetectResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 49 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Security/TextRisk/Models/AlipaySecurityRiskContentDetectResponse.cs

@@ -0,0 +1,49 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Security.TextRisk.Models
+{
+    public class AlipaySecurityRiskContentDetectResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+        [NameInMap("action")]
+        [Validation(Required=true)]
+        public string Action { get; set; }
+
+        [NameInMap("keywords")]
+        [Validation(Required=true)]
+        public List<string> Keywords { get; set; }
+
+        [NameInMap("unique_id")]
+        [Validation(Required=true)]
+        public string UniqueId { get; set; }
+
+    }
+
+}

+ 114 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Util/AES/Client.cs

@@ -0,0 +1,114 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+
+namespace Alipay.EasySDK.Util.AES
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+
+        public string Decrypt(string cipherText)
+        {
+            return this._kernel.AesDecrypt(cipherText, this._kernel.GetConfig("encryptKey"));
+        }
+
+        public string Encrypt(string plainText)
+        {
+            return this._kernel.AesEncrypt(plainText, this._kernel.GetConfig("encryptKey"));
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 304 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Util/Generic/Client.cs

@@ -0,0 +1,304 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+
+using Tea;
+using Tea.Utils;
+
+using Alipay.EasySDK.Util.Generic.Models;
+
+namespace Alipay.EasySDK.Util.Generic
+{
+    public class Client 
+    {
+        protected Alipay.EasySDK.Kernel.Client _kernel;
+
+        public Client(Alipay.EasySDK.Kernel.Client kernel)
+        {
+            this._kernel = kernel;
+        }
+
+        public AlipayOpenApiGenericResponse Execute(string method, Dictionary<string, string> textParams, Dictionary<string, object> bizParams)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", method},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = TeaCore.DoAction(request_, runtime_);
+
+                    Dictionary<string, object> respMap = this._kernel.ReadAsJson(response_, method);
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenApiGenericResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenApiGenericResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        public async Task<AlipayOpenApiGenericResponse> ExecuteAsync(string method, Dictionary<string, string> textParams, Dictionary<string, object> bizParams)
+        {
+            Dictionary<string, object> runtime_ = new Dictionary<string, object>
+            {
+                {"ignoreSSL", this._kernel.GetConfig("ignoreSSL")},
+                {"httpProxy", this._kernel.GetConfig("httpProxy")},
+                {"connectTimeout", 15000},
+                {"readTimeout", 15000},
+                {"retry", new Dictionary<string, int?>
+                {
+                    {"maxAttempts", 0},
+                }},
+            };
+
+            TeaRequest _lastRequest = null;
+            Exception _lastException = null;
+            long _now = System.DateTime.Now.Millisecond;
+            int _retryTimes = 0;
+            while (TeaCore.AllowRetry((IDictionary) runtime_["retry"], _retryTimes, _now))
+            {
+                if (_retryTimes > 0)
+                {
+                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
+                    if (backoffTime > 0)
+                    {
+                        TeaCore.Sleep(backoffTime);
+                    }
+                }
+                _retryTimes = _retryTimes + 1;
+                try
+                {
+                    TeaRequest request_ = new TeaRequest();
+                    Dictionary<string, string> systemParams = new Dictionary<string, string>
+                    {
+                        {"method", method},
+                        {"app_id", this._kernel.GetConfig("appId")},
+                        {"timestamp", this._kernel.GetTimestamp()},
+                        {"format", "json"},
+                        {"version", "1.0"},
+                        {"alipay_sdk", this._kernel.GetSdkVersion()},
+                        {"charset", "UTF-8"},
+                        {"sign_type", this._kernel.GetConfig("signType")},
+                        {"app_cert_sn", this._kernel.GetMerchantCertSN()},
+                        {"alipay_root_cert_sn", this._kernel.GetAlipayRootCertSN()},
+                    };
+                    request_.Protocol = this._kernel.GetConfig("protocol");
+                    request_.Method = "POST";
+                    request_.Pathname = "/gateway.do";
+                    request_.Headers = new Dictionary<string, string>
+                    {
+                        {"host", this._kernel.GetConfig("gatewayHost")},
+                        {"content-type", "application/x-www-form-urlencoded;charset=utf-8"},
+                    };
+                    request_.Query = this._kernel.SortMap(TeaConverter.merge<string>
+                    (
+                        new Dictionary<string, string>()
+                        {
+                            {"sign", this._kernel.Sign(systemParams, bizParams, textParams, this._kernel.GetConfig("merchantPrivateKey"))},
+                        },
+                        systemParams,
+                        textParams
+                    ));
+                    request_.Body = TeaCore.BytesReadable(this._kernel.ToUrlEncodedRequestBody(bizParams));
+                    _lastRequest = request_;
+                    TeaResponse response_ = await TeaCore.DoActionAsync(request_, runtime_);
+
+                    Dictionary<string, object> respMap = await this._kernel.ReadAsJsonAsync(response_, method);
+                    if (this._kernel.IsCertMode())
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.ExtractAlipayPublicKey(this._kernel.GetAlipayCertSN(respMap))))
+                        {
+                            return TeaModel.ToObject<AlipayOpenApiGenericResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    else
+                    {
+                        if (this._kernel.Verify(respMap, this._kernel.GetConfig("alipayPublicKey")))
+                        {
+                            return TeaModel.ToObject<AlipayOpenApiGenericResponse>(this._kernel.ToRespModel(respMap));
+                        }
+                    }
+                    throw new TeaException(new Dictionary<string, string>
+                    {
+                        {"message", "验签失败,请检查支付宝公钥设置是否正确。"},
+                    });
+                }
+                catch (Exception e)
+                {
+                    if (TeaCore.IsRetryable(e))
+                    {
+                        _lastException = e;
+                        continue;
+                    }
+                    throw e;
+                }
+            }
+
+            throw new TeaUnretryableException(_lastRequest, _lastException);
+        }
+
+        
+        /// <summary>
+        /// ISV代商户代用,指定appAuthToken
+        /// </summary>
+        /// <param name="appAuthToken">代调用token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Agent(string appAuthToken)
+        {
+            _kernel.InjectTextParam("app_auth_token", appAuthToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 用户授权调用,指定authToken
+        /// </summary>
+        /// <param name="authToken">用户授权token</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Auth(string authToken)
+        {
+            _kernel.InjectTextParam("auth_token", authToken);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置异步通知回调地址,此处设置将在本调用中覆盖Config中的全局配置
+        /// </summary>
+        /// <param name="url">异步通知回调地址,例如:https://www.test.com/callback </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client AsyncNotify(string url)
+        {
+            _kernel.InjectTextParam("notify_url", url);
+            return this;
+        }
+
+        /// <summary>
+        /// 将本次调用强制路由到后端系统的测试地址上,常用于线下环境内外联调,沙箱与线上环境设置无效
+        /// </summary>
+        /// <param name="testUrl">后端系统测试地址</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Route(string testUrl)
+        {
+            _kernel.InjectTextParam("ws_service_url", testUrl);
+            return this;
+        }
+
+        /// <summary>
+        /// 设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// </summary>
+        /// <param name="key">业务请求参数名称(biz_content下的字段名,比如timeout_express)</param>
+        /// <param name="value">
+        /// 业务请求参数的值,一个可以序列化成JSON的对象
+        /// 如果该字段是一个字符串类型(String、Price、Date在SDK中都是字符串),请使用string储存
+        /// 如果该字段是一个数值型类型(比如:Number),请使用long储存
+        /// 如果该字段是一个复杂类型,请使用嵌套的Dictionary指定各下级字段的值
+        /// 如果该字段是一个数组,请使用List储存各个值
+        /// 对于更复杂的情况,也支持Dictionary和List的各种组合嵌套,比如参数是值是个List,List中的每种类型是一个复杂对象
+        /// </param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client Optional(string key, object value)
+        {
+            _kernel.InjectBizParam(key, value);
+            return this;
+        }
+
+        /// <summary>
+        /// 批量设置API入参中没有的其他可选业务请求参数(biz_content下的字段)
+        /// optional方法的批量版本
+        /// </summary>
+        /// <param name="optionalArgs">可选参数集合,每个参数由key和value组成,key和value的格式请参见optional方法的注释</param>
+        /// <returns>本客户端,便于链式调用</returns>
+        public Client BatchOptional(Dictionary<string, object> optionalArgs)
+        {
+            foreach (var pair in optionalArgs)
+            {
+                _kernel.InjectBizParam(pair.Key, pair.Value);
+            }
+            return this;
+        }
+    }
+}

+ 37 - 0
vendor/alipaysdk/easysdk/csharp/AlipayEasySDK/Util/Generic/Models/AlipayOpenApiGenericResponse.cs

@@ -0,0 +1,37 @@
+// This file is auto-generated, don't edit it. Thanks.
+
+using System;
+using System.Collections.Generic;
+using System.IO;
+
+using Tea;
+
+namespace Alipay.EasySDK.Util.Generic.Models
+{
+    public class AlipayOpenApiGenericResponse : TeaModel {
+        /// <summary>
+        /// 响应原始字符串
+        /// </summary>
+        [NameInMap("http_body")]
+        [Validation(Required=true)]
+        public string HttpBody { get; set; }
+
+        [NameInMap("code")]
+        [Validation(Required=true)]
+        public string Code { get; set; }
+
+        [NameInMap("msg")]
+        [Validation(Required=true)]
+        public string Msg { get; set; }
+
+        [NameInMap("sub_code")]
+        [Validation(Required=true)]
+        public string SubCode { get; set; }
+
+        [NameInMap("sub_msg")]
+        [Validation(Required=true)]
+        public string SubMsg { get; set; }
+
+    }
+
+}

+ 248 - 0
vendor/alipaysdk/easysdk/csharp/README.md

@@ -0,0 +1,248 @@
+[![NuGet](https://badge.fury.io/nu/AlipayEasySDK.svg)](https://badge.fury.io/nu/AlipayEasySDK)
+[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Falipay%2Falipay-easysdk.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Falipay%2Falipay-easysdk?ref=badge_shield)
+
+欢迎使用 Alipay **Easy** SDK for .NET 。
+
+Alipay Esay SDK for .NET让您不用复杂编程即可访支付宝开放平台开放的各项常用能力,SDK可以自动帮您满足能力调用过程中所需的证书校验、加签、验签、发送HTTP请求等非功能性要求。
+
+下面向您介绍Alipay Easy SDK for .NET 的基本设计理念和使用方法。
+
+## 设计理念
+不同于原有的[Alipay SDK](https://github.com/alipay/alipay-sdk-net-all)通用而全面的设计理念,Alipay Easy SDK对开放能力的API进行了更加贴近高频场景的精心设计与裁剪,简化了服务端调用方式,让调用API像使用语言内置的函数一样简便。
+
+同时,您也不必担心面向高频场景提炼的API可能无法完全契合自己的个性化场景,Alipay Easy SDK支持灵活的动态扩展方式,同样可以满足低频参数、低频API的使用需求。
+
+Alipay Easy SDK提供了与[能力地图](https://opendocs.alipay.com/mini/00am3f)相对应的代码组织结构,让开发者可以快速找到不同能力对应的API。
+
+Alipay Easy SDK主要目标是提升开发者在**服务端**集成支付宝开放平台开放的各类核心能力的效率。
+
+## 环境要求
+1. Alipay Easy SDK for .NET基于`.Net Standard 2.0`开发,支持`.Net Framework 4.6.1`、.`Net Core 2.0`及其以上版本
+
+2. 使用 Alipay Easy SDK for .NET 之前 ,您需要先前往[支付宝开发平台-开发者中心](https://openhome.alipay.com/platform/developerIndex.htm)完成开发者接入的一些准备工作,包括创建应用、为应用添加功能包、设置应用的接口加签方式等。
+
+3. 准备工作完成后,注意保存如下信息,后续将作为使用SDK的输入。
+
+* 加签模式为公钥证书模式时(推荐)
+
+`AppId`、`应用的私钥`、`应用公钥证书文件`、`支付宝公钥证书文件`、`支付宝根证书文件`
+
+* 加签模式为公钥模式时
+
+`AppId`、`应用的私钥`、`支付宝公钥`
+
+## 安装依赖
+### 通过[NuGet](https://www.nuget.org/packages/AlipayEasySDK/)程序包管理器在线安装依赖(推荐)
+* 在 `解决方案资源管理器面板` 中右击您的项目选择 `管理 NuGet 程序包` 菜单,在打开的 `NuGet 管理面板` 中点击 `浏览` 选项卡输入 `AlipayEasySDK`,在下方列表中选择 `Authors` 为 `antopen` 由官方发布的**最新稳定版**NuGet包,点击 **安装** 即可。
+
+* 或者通过 .NET CLI 工具来安装
+	> dotnet add package AlipayEasySDK
+
+### 离线安装NuGet包(适用于自己修改源码后的本地重新打包安装)
+1. 使用`Visual Studio`打开本`README.md`所在文件夹下的`AlipayEasySDK.sln`解决方案,在`生成`菜单栏下,执行`全部重新生成`。
+2. 在`AlipayEasySDK/bin/Debug`或`AlipayEasySDK/bin/Release`目录下,找到`AlipayEasySDK.[version].nupkg`文件,该文件即为本SDK的NuGet离线包。
+3. 参照[NuGet离线安装程序包使用指南](https://yq.aliyun.com/articles/689227),在您的.NET应用项目工程中引入本SDK的NuGet离线包,即可完成SDK的依赖安装。
+
+## 快速开始
+### 普通调用
+以下这段代码示例向您展示了使用Alipay Easy SDK for .NET调用一个API的3个主要步骤:
+
+1. 设置参数(全局只需设置一次)。
+2. 发起API调用。
+3. 处理响应或异常。
+
+```charp
+using System;
+using Alipay.EasySDK.Factory;
+using Alipay.EasySDK.Kernel;
+using Alipay.EasySDK.Kernel.Util;
+using Alipay.EasySDK.Payment.FaceToFace.Models;
+
+namespace SDKDemo
+{
+    class Program
+    {
+        static void Main(string[] args)
+        {
+            // 1. 设置参数(全局只需设置一次)
+            Factory.SetOptions(GetConfig());
+            try
+            {
+                // 2. 发起API调用(以创建当面付收款二维码为例)
+                AlipayTradePrecreateResponse response = Factory.Payment.FaceToFace()
+                    .PreCreate("Apple iPhone11 128G", "2234567234890", "5799.00");
+                // 3. 处理响应或异常
+                if (ResponseChecker.Success(response))
+                {
+                    Console.WriteLine("调用成功");
+                }
+                else
+                {
+                    Console.WriteLine("调用失败,原因:" + response.Msg + "," + response.SubMsg);
+                }
+            }
+            catch (Exception ex)
+            {
+                Console.WriteLine("调用遭遇异常,原因:" + ex.Message);
+                throw ex;
+            }
+        }
+
+        static private Config GetConfig()
+        {
+            return new Config()
+            {
+                Protocol = "https",
+                GatewayHost = "openapi.alipay.com",
+                SignType = "RSA2",
+
+                AppId = "<-- 请填写您的AppId,例如:2019091767145019 -->",
+
+                // 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中
+                MerchantPrivateKey = "<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->",
+
+                MerchantCertPath = "<-- 请填写您的应用公钥证书文件路径,例如:/foo/appCertPublicKey_2019051064521003.crt -->",
+                AlipayCertPath = "<-- 请填写您的支付宝公钥证书文件路径,例如:/foo/alipayCertPublicKey_RSA2.crt -->",
+                AlipayRootCertPath = "<-- 请填写您的支付宝根证书文件路径,例如:/foo/alipayRootCert.crt -->",
+
+                // 如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可
+                // AlipayPublicKey = "<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->"
+
+                //可设置异步通知接收服务地址(可选)
+                NotifyUrl = "<-- 请填写您的支付类接口异步通知接收服务地址,例如:https://www.test.com/callback -->",
+
+                //可设置AES密钥,调用AES加解密相关接口时需要(可选)
+                EncryptKey = "<-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->"
+            };
+        }
+    }
+}
+```
+
+### 扩展调用
+#### ISV代调用
+
+```csharp
+Factory.Payment.FaceToFace()
+    //调用Agent扩展方法,设置app_auth_token,完成ISV代调用
+    .Agent("ca34ea491e7146cc87d25fca24c4cD11")
+    .PreCreate("Apple iPhone11 128G", "2234567890", "5799.00");
+```
+
+#### 设置独立的异步通知地址
+
+```csharp
+Factory.Payment.FaceToFace()
+    // 调用AsyncNotify扩展方法,可以为每此API调用,设置独立的异步通知地址
+    // 此处设置的异步通知地址的优先级高于全局Config中配置的异步通知地址
+    .AsyncNotify("https://www.test.com/callback")
+    .PreCreate("Apple iPhone11 128G", "2234567890", "5799.00");
+```
+
+#### 设置可选业务参数
+
+```csharp
+List<object> goodsDetailList = new List<object>();
+Dictionary<string, object> goodsDetail = new Dictionary<string, object>
+{
+    { "goods_id", "apple-01" },
+    { "goods_name", "Apple iPhone11 128G" },
+    { "quantity", 1 },
+    { "price", "5799.00" }
+};
+goodsDetailList.Add(goodsDetail);
+
+Factory.Payment.FaceToFace()
+    // 调用Optional扩展方法,完成可选业务参数(biz_content下的可选字段)的设置
+    .Optional("seller_id", "2088102146225135")
+    .Optional("discountable_amount", "8.88")
+    .Optional("goods_detail", goodsDetailList)
+    .PreCreate("Apple iPhone11 128G", "2234567890", "5799.00");
+
+Dictionary<string, object> optionalArgs = new Dictionary<string, object>
+{
+    { "seller_id", "2088102146225135" },
+    { "discountable_amount", "8.88" },
+    { "goods_detail", goodsDetailList }
+};
+
+Factory.Payment.FaceToFace()
+    // 也可以调用BatchOptional扩展方法,批量设置可选业务参数(biz_content下的可选字段)
+    .BatchOptional(optionalArgs)
+    .PreCreate("Apple iPhone11 128G", "2234567890", "5799.00");
+```
+
+#### 多种扩展灵活组合
+
+```csharp
+// 多种扩展方式可灵活组装(对扩展方法的调用顺序没有要求)
+Factory.Payment.FaceToFace()
+    .Agent("ca34ea491e7146cc87d25fca24c4cD11")
+    .AsyncNotify("https://www.test.com/callback")
+    .Optional("seller_id", "2088102146225135")
+    .PreCreate("Apple iPhone11 128G", "2234567890", "5799.00");
+```
+
+## API组织规范
+在Alipay Easy SDK中,API的引用路径与能力地图的组织层次一致,遵循如下规则
+
+> Factory.能力名称.场景名称().接口方法名称( ... )
+
+比如,如果您想要使用[能力地图](https://opendocs.alipay.com/mini/00am3f)中`营销能力`下的`模板消息`场景中的`小程序发送模板消息`,只需按如下形式编写调用代码即可(不同编程语言的连接符号可能不同)。
+
+`Factory.Marketing.TemplateMessage().send( ... )`
+
+其中,接口方法名称通常是对其依赖的OpenAPI功能的一个最简概况,接口方法的出入参与OpenAPI中同名参数含义一致,可参照OpenAPI相关参数的使用说明。
+
+Alipay Easy SDK将致力于保持良好的API命名,以符合开发者的编程直觉。
+
+## 已支持的API列表
+
+| 能力类别      | 场景类别            | 接口方法名称                 | 调用的OpenAPI名称                                              |
+|-----------|-----------------|------------------------|-----------------------------------------------------------|
+| Base      | OAuth           | getToken               | alipay\.system\.oauth\.token                              |
+| Base      | OAuth           | refreshToken           | alipay\.system\.oauth\.token                              |
+| Base      | Qrcode          | create                 | alipay\.open\.app\.qrcode\.create                         |
+| Base      | Image           | upload                 | alipay\.offline\.material\.image\.upload                  |
+| Base      | Video           | upload                 | alipay\.offline\.material\.image\.upload                  |
+| Member    | Identification  | init                   | alipay\.user\.certify\.open\.initialize                   |
+| Member    | Identification  | certify                | alipay\.user\.certify\.open\.certify                      |
+| Member    | Identification  | query                  | alipay\.user\.certify\.open\.query                        |
+| Payment   | Common          | create                 | alipay\.trade\.create                                     |
+| Payment   | Common          | query                  | alipay\.trade\.query                                      |
+| Payment   | Common          | refund                 | alipay\.trade\.refund                                     |
+| Payment   | Common          | close                  | alipay\.trade\.close                                      |
+| Payment   | Common          | cancel                 | alipay\.trade\.cancel                                     |
+| Payment   | Common          | queryRefund            | alipay\.trade\.fastpay\.refund\.query                     |
+| Payment   | Common          | downloadBill           | alipay\.data\.dataservice\.bill\.downloadurl\.query       |
+| Payment   | Common          | verifyNotify           | -                                                         |
+| Payment   | Huabei          | create                 | alipay\.trade\.create                                     |
+| Payment   | FaceToFace      | pay                    | alipay\.trade\.pay                                        |
+| Payment   | FaceToFace      | precreate              | alipay\.trade\.precreate                                  |
+| Payment   | App             | pay                    | alipay\.trade\.app\.pay                                   |
+| Payment   | Page            | pay                    | alipay\.trade\.page\.pay                                  |
+| Payment   | Wap             | pay                    | alipay\.trade\.wap\.pay                                   |
+| Security  | TextRisk        | detect                 | alipay\.security\.risk\.content\.detect                   |
+| Marketing | Pass            | createTemplate         | alipay\.pass\.template\.add                               |
+| Marketing | Pass            | updateTemplate         | alipay\.pass\.template\.update                            |
+| Marketing | Pass            | addInstance            | alipay\.pass\.instance\.add                               |
+| Marketing | Pass            | updateInstance         | alipay\.pass\.instance\.update                            |
+| Marketing | TemplateMessage | send                   | alipay\.open\.app\.mini\.templatemessage\.send            |
+| Marketing | OpenLife        | createImageTextContent | alipay\.open\.public\.message\.content\.create            |
+| Marketing | OpenLife        | modifyImageTextContent | alipay\.open\.public\.message\.content\.modify            |
+| Marketing | OpenLife        | sendText               | alipay\.open\.public\.message\.total\.send                |
+| Marketing | OpenLife        | sendImageText          | alipay\.open\.public\.message\.total\.send                |
+| Marketing | OpenLife        | sendSingleMessage      | alipay\.open\.public\.message\.single\.send               |
+| Marketing | OpenLife        | recallMessage          | alipay\.open\.public\.life\.msg\.recall                   |
+| Marketing | OpenLife        | setIndustry            | alipay\.open\.public\.template\.message\.industry\.modify |
+| Marketing | OpenLife        | getIndustry            | alipay\.open\.public\.setting\.category\.query            |
+| Util      | AES             | decrypt                | -                                                         |
+| Util      | AES             | encrypt                | -                                                         |
+| Util      | Generic         | execute                | -                                                         |
+
+> 注:更多高频场景的API持续更新中,敬请期待。
+
+## 文档
+[API Doc](./../APIDoc.md)
+
+[Alipay Easy SDK](./../README.md)

+ 32 - 0
vendor/alipaysdk/easysdk/csharp/UnitTest/Base/Image/ClientTest.cs

@@ -0,0 +1,32 @@
+using NUnit.Framework;
+using Alipay.EasySDK.Factory;
+using Alipay.EasySDK.Base.Image.Models;
+using Alipay.EasySDK.Kernel.Util;
+
+namespace UnitTest.Base.Image
+{
+    public class ClientTest
+    {
+        [SetUp]
+        public void SetUp()
+        {
+            Factory.SetOptions(TestAccount.Mini.CONFIG);
+        }
+
+        [Test]
+        public void TestUpload()
+        {
+            AlipayOfflineMaterialImageUploadResponse response = Factory.Base.Image().Upload(
+                "测试图片", TestAccount.GetSolutionBasePath() + "/UnitTest/Fixture/sample.png");
+
+            Assert.IsTrue(ResponseChecker.Success(response));
+            Assert.AreEqual(response.Code, "10000");
+            Assert.AreEqual(response.Msg, "Success");
+            Assert.IsNull(response.SubCode);
+            Assert.IsNull(response.SubMsg);
+            Assert.NotNull(response.HttpBody);
+            Assert.NotNull(response.ImageId);
+            Assert.IsTrue(response.ImageUrl.StartsWith("https://"));
+        }
+    }
+}

+ 42 - 0
vendor/alipaysdk/easysdk/csharp/UnitTest/Base/OAuth/ClientTest.cs

@@ -0,0 +1,42 @@
+using NUnit.Framework;
+using Alipay.EasySDK.Factory;
+using Alipay.EasySDK.Base.OAuth.Models;
+using Alipay.EasySDK.Kernel.Util;
+
+namespace UnitTest.Base.OAuth
+{
+    public class ClientTest
+    {
+        [SetUp]
+        public void SetUp()
+        {
+            Factory.SetOptions(TestAccount.Mini.CONFIG);
+        }
+
+        [Test]
+        public void TestGetToken()
+        {
+            AlipaySystemOauthTokenResponse response = Factory.Base.OAuth().GetToken("1234567890");
+
+            Assert.IsFalse(ResponseChecker.Success(response));
+            Assert.AreEqual(response.Code, "40002");
+            Assert.AreEqual(response.Msg, "Invalid Arguments");
+            Assert.AreEqual(response.SubCode, "isv.code-invalid");
+            Assert.AreEqual(response.SubMsg, "授权码code无效");
+            Assert.NotNull(response.HttpBody);
+        }
+
+        [Test]
+        public void TestRefreshToken()
+        {
+            AlipaySystemOauthTokenResponse response = Factory.Base.OAuth().RefreshToken("1234567890");
+
+            Assert.IsFalse(ResponseChecker.Success(response));
+            Assert.AreEqual(response.Code, "40002");
+            Assert.AreEqual(response.Msg, "Invalid Arguments");
+            Assert.AreEqual(response.SubCode, "isv.refresh-token-invalid");
+            Assert.AreEqual(response.SubMsg, "刷新令牌refresh_token无效");
+            Assert.NotNull(response.HttpBody);
+        }
+    }
+}

+ 31 - 0
vendor/alipaysdk/easysdk/csharp/UnitTest/Base/Qrcode/ClientTest.cs

@@ -0,0 +1,31 @@
+using NUnit.Framework;
+using Alipay.EasySDK.Factory;
+using Alipay.EasySDK.Base.Qrcode.Models;
+using Alipay.EasySDK.Kernel.Util;
+
+namespace UnitTest.Base.Qrcode
+{
+    public class ClientTest
+    {
+        [SetUp]
+        public void SetUp()
+        {
+            Factory.SetOptions(TestAccount.Mini.CONFIG);
+        }
+
+        [Test]
+        public void TestCreate()
+        {
+            AlipayOpenAppQrcodeCreateResponse response = Factory.Base.Qrcode().Create(
+                "https://opendocs.alipay.com", "ageIndex=1", "文档站点");
+
+            Assert.IsTrue(ResponseChecker.Success(response));
+            Assert.AreEqual(response.Code, "10000");
+            Assert.AreEqual(response.Msg, "Success");
+            Assert.Null(response.SubCode);
+            Assert.Null(response.SubMsg);
+            Assert.NotNull(response.HttpBody);
+            Assert.NotNull(response.QrCodeUrl);
+        }
+    }
+}

+ 32 - 0
vendor/alipaysdk/easysdk/csharp/UnitTest/Base/Video/ClientTest.cs

@@ -0,0 +1,32 @@
+using NUnit.Framework;
+using Alipay.EasySDK.Factory;
+using Alipay.EasySDK.Base.Video.Models;
+using Alipay.EasySDK.Kernel.Util;
+
+namespace UnitTest.Base.Video
+{
+    public class ClientTest
+    {
+        [SetUp]
+        public void SetUp()
+        {
+            Factory.SetOptions(TestAccount.Mini.CONFIG);
+        }
+
+        [Test]
+        public void TestUpload()
+        {
+            AlipayOfflineMaterialImageUploadResponse response = Factory.Base.Video().Upload(
+                "测试视频", TestAccount.GetSolutionBasePath() + "/UnitTest/Fixture/sample.mp4");
+
+            Assert.IsTrue(ResponseChecker.Success(response));
+            Assert.AreEqual(response.Code, "10000");
+            Assert.AreEqual(response.Msg, "Success");
+            Assert.IsNull(response.SubCode);
+            Assert.IsNull(response.SubMsg);
+            Assert.NotNull(response.HttpBody);
+            Assert.NotNull(response.ImageId);
+            Assert.IsTrue(response.ImageUrl.StartsWith("https://"));
+        }
+    }
+}

+ 33 - 0
vendor/alipaysdk/easysdk/csharp/UnitTest/Factory/FactoryTest.cs

@@ -0,0 +1,33 @@
+using System;
+using NUnit.Framework;
+using Alipay.EasySDK.Payment.Common.Models;
+using Alipay.EasySDK.Factory;
+using Alipay.EasySDK.Kernel.Util;
+
+namespace UnitTest.FactoryTest
+{
+    public class FactoryTest
+    {
+        [SetUp]
+        public void SetUp()
+        {
+            Factory.SetOptions(TestAccount.Mini.CONFIG);
+        }
+
+        [Test]
+        public void TestGetClient()
+        {
+            AlipayTradeFastpayRefundQueryResponse response = Factory.GetClient<Alipay.EasySDK.Payment.Common.Client>()
+                .QueryRefund("64628156-f784-4572-9540-485b7c91b850", "64628156-f784-4572-9540-485b7c91b850");
+
+            Assert.IsTrue(ResponseChecker.Success(response));
+            Assert.AreEqual(response.Code, "10000");
+            Assert.AreEqual(response.Msg, "Success");
+            Assert.IsNull(response.SubCode);
+            Assert.IsNull(response.SubMsg);
+            Assert.NotNull(response.HttpBody);
+            Assert.AreEqual(response.RefundAmount, "0.01");
+            Assert.AreEqual(response.TotalAmount, "0.01");
+        }
+    }
+}

+ 22 - 0
vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/alipayCertPublicKey_RSA2.crt

@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDkzCCAnugAwIBAgIQIBkJAnXy/rwX3BTZaKNEzjANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
+BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
+YXNzIDIgUjEwHhcNMTkwOTAyMTI0NDIyWhcNMjEwOTAxMTI0NDIyWjB0MQswCQYDVQQGEwJDTjEP
+MA0GA1UECgwG6ZKf6ZuoMQ8wDQYDVQQLDAZBbGlwYXkxQzBBBgNVBAMMOuaUr+S7mOWunSjkuK3l
+m70p572R57uc5oqA5pyv5pyJ6ZmQ5YWs5Y+4LTIwODgwMDI2NTY3MTg5MjAwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQDQxh7MsF7bsPyQlToJWOPlmGfqUerZI2o2725LUqrabGYOaAgx
+a8OAm6sFXoq6TykRltIBEmAjYjMYudQelwxSv8NhQ1eLEFrY7o2Z3TQ+y8lvlLmvqWnEMzOqq4Fc
+UN6gzd1nissGVtzUkmx9ErB+89g6WAKV1bFCZBQHIjzfMIqcZkddUZ4SiksMKB/ncKFOJPJf2CUI
+i31URny3WlIoC44jG1SiX2sPKdbkbsSGQcDfGIpNRQBNJxlXX/8Y8D7RrFCWHtjh4ONSMT29+xjS
+8HNM0gSR2y4QKXyRupXrNY9yTTtkPhQIEjfSjsQPnuM+3b7VFd3GSDcDbvskNRNLAgMBAAGjEjAQ
+MA4GA1UdDwEB/wQEAwID+DANBgkqhkiG9w0BAQsFAAOCAQEAf8Qx2UsLFqPDTxKk9eT0np75NqJ8
+MexTuPJ/gC+Lp20YzEUyYW2rPlDFhDmFztlqk9RdynLRqyjB5dOAdWlxhgDlEqB9E6DvkVKtpIaL
+7h7zqJei9gb/STAyf5vTVWR/WTmOhp3vQhaj7+lt14JwK/ELYMdBLD2IdmFis7YdzhCsGo7Y4FPb
+BuHCV8Ngfaf2PvDlKaFOVzDg8tGnMBbAOgpe+mhxKUdhNG3eXcO0Z813rNIC15YAvWm68tNAwuZJ
+rIVgK+049WUojwUJxOwVyzewob/8Gx7o8ipIV5E/bMrduSvigsj7OmNzwQ5/iSm31dfcXi3fOXXz
+BLMb888PlA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE4jCCAsqgAwIBAgIIYsSr5bKAMl8wDQYJKoZIhvcNAQELBQAwejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMjE0MzQxNVoXDTM3MTEyNjE0MzQxNVowgYIxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1BbnQgRmluYW5jaWFsMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE5MDcGA1UEAwwwQW50IEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDbGFzcyAyIFIxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsLMfYaoRoPRbmDcAfXPCmKf43pWRN5yTXa/KJWO0l+mrgQvs89bANEvbDUxlkGwycwtwi5DgBuBgVhLliXu+R9CYgr2dXs8D8Hx/gsggDcyGPLmVrDOnL+dyeauheARZfA3du60fwEwwbGcVIpIxPa/4n3IS/ElxQa6DNgqxh8J9Xwh7qMGl0JK9+bALuxf7B541Gr4p0WENG8fhgjBV4w4ut9eQLOoa1eddOUSZcy46Z7allwowwgt7b5VFfx/P1iKJ3LzBMgkCK7GZ2kiLrL7RiqV+h482J7hkJD+ardoc6LnrHO/hIZymDxok+VH9fVeUdQa29IZKrIDVj65THQIDAQABo2MwYTAfBgNVHSMEGDAWgBRfdLQEwE8HWurlsdsio4dBspzhATAdBgNVHQ4EFgQUSqHkYINtUSAtDPnS8XoyoP9p7qEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAIQ8TzFy4bVIVb8+WhHKCkKNPcJe2EZuIcqvRoi727lZTJOfYy/JzLtckyZYfEI8J0lasZ29wkTta1IjSo+a6XdhudU4ONVBrL70U8Kzntplw/6TBNbLFpp7taRALjUgbCOk4EoBMbeCL0GiYYsTS0mw7xdySzmGQku4GTyqutIGPQwKxSj9iSFw1FCZqr4VP4tyXzMUgc52SzagA6i7AyLedd3tbS6lnR5BL+W9Kx9hwT8L7WANAxQzv/jGldeuSLN8bsTxlOYlsdjmIGu/C9OWblPYGpjQQIRyvs4Cc/mNhrh+14EQgwuemIIFDLOgcD+iISoN8CqegelNcJndFw1PDN6LkVoiHz9p7jzsge8RKay/QW6C03KNDpWZEUCgCUdfHfo8xKeR+LL1cfn24HKJmZt8L/aeRZwZ1jwePXFRVtiXELvgJuM/tJDIFj2KD337iV64fWcKQ/ydDVGqfDZAdcU4hQdsrPWENwPTQPfVPq2NNLMyIH9+WKx9Ed6/WzeZmIy5ZWpX1TtTolo6OJXQFeItMAjHxW/ZSZTok5IS3FuRhExturaInnzjYpx50a6kS34c5+c8hYq7sAtZ/CNLZmBnBCFDaMQqT8xFZJ5uolUaSeXxg7JFY1QsYp5RKvj4SjFwCGKJ2+hPPe9UyyltxOidNtxjaknOCeBHytOr
+-----END CERTIFICATE-----

+ 88 - 0
vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/alipayRootCert.crt

@@ -0,0 +1,88 @@
+-----BEGIN CERTIFICATE-----
+MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG
+EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw
+MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO
+UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE
+MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT
+V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti
+W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ
+MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b
+53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI
+pDoiVhsLwg==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE
+BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0
+MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV
+BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j
+aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk
+rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2
+xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp
+dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6
+vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl
+YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1
+Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H
+DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98
+SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG
+PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe
+9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC
+AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90
+tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy
+nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf
+tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq
+JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3
+IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW
+05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41
+T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI
+kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop
+PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N
+1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y
+jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02
+77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi
+kT9qhqn+lw==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG
+EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0
+WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE
+CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp
+YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
+IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU
+WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt
+rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ
+4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2
+zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg
+wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH
+Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF
+BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM
+E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg
+MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq
+MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp
+bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv
+b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV
+nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5
+4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg
+wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw
+WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN
+z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g
+KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA
+uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF
+MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp
+emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3
+U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I
+UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn
+DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU
+1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX
+Yf4Zr0fJsGuv
+-----END CERTIFICATE-----

+ 23 - 0
vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/appCertPublicKey_2019051064521003.crt

@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIIEkzCCA3ugAwIBAgIQICABI1M0G1IN1Hv7M5NTmjANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
+BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
+YXNzIDEgUjEwHhcNMjAwMTIzMDc0NTQ3WhcNMjIwMTIyMDc0NTQ3WjBbMQswCQYDVQQGEwJDTjEP
+MA0GA1UECgwG6ZKf6ZuoMQ8wDQYDVQQLDAZBbGlwYXkxKjAoBgNVBAMMITIwODgwMDI2NTY3MTg5
+MjAtMjAxOTA1MTA2NDUyMTAwMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIRaW3zN
+ZGJY3oOUL41KMZqcoyI9JyDWG/fyb8qShWgH9NGinO6JeGWWX2pU2b5GKCd1CB6imnbD5U3zvErR
+Z6h9Kc9pD4M22MNqnpuFontWuFXhq01MIbuolV5zTw94nrMR4aMPgTt7wX6svcQ8cKyg+v7Xz4DH
+QCQOPhtFM3aL1UHsEZhLp+F2xNENTGpphmlV7D50ahnAo3A8Jdkt9ZBIzkWk4CoMdeoYk6BlOETG
+XZ93Mc1TKR6cLNPj7LIUKb7xUh4ekaRoky2RP7k9NgBLsZLDjMkqZmzvHHhnstddmq5Er49Ger9b
+VHnKsWNMWtN0Oi+ZyWTDcwvACdCgLbcCAwEAAaOCASkwggElMB8GA1UdIwQYMBaAFHEH4gRhFuTl
+8mXrMQ/J4PQ8mtWRMB0GA1UdDgQWBBSNSXcCsxvjAa3v5QcTyVZ183CMjzBABgNVHSAEOTA3MDUG
+B2CBHAFuAQEwKjAoBggrBgEFBQcCARYcaHR0cDovL2NhLmFsaXBheS5jb20vY3BzLnBkZjAOBgNV
+HQ8BAf8EBAMCBsAwLwYDVR0fBCgwJjAkoCKgIIYeaHR0cDovL2NhLmFsaXBheS5jb20vY3JsMzcu
+Y3JsMGAGCCsGAQUFBwEBBFQwUjAoBggrBgEFBQcwAoYcaHR0cDovL2NhLmFsaXBheS5jb20vY2E2
+LmNlcjAmBggrBgEFBQcwAYYaaHR0cDovL2NhLmFsaXBheS5jb206ODM0MC8wDQYJKoZIhvcNAQEL
+BQADggEBAA0l9rTtjEl4uqE4RP4Nd+A0KgM8NmWQHLxsubDRMSeYVFMzrpSm8V9zhlxLmKdFxWP/
+OuY4SHRe8eOSA++5yJc3ihg9B7/ddK2kNTsnaB7Xtvex685kvDDR8DMZmQYeirDThGVPhUeBgPdk
+wY0R5KU6mEh2FzT3QIxDzP6t4ssSyYHhFPssZ4PXHFQ5eHzmdpJ81/85crfques67JxAm4CCfldb
+bX0DH1BUrPxcnvz4Kj5lKv1qIvBR71yUnrGFOKAVCx04VYK4dTNDI70W9lLgX1aTfLGUBTYiJe/J
+Zq/XlYhQP/T7t8HOAaCQFf2hM9tRq62EaL1UbExV2hcAP/E=
+-----END CERTIFICATE-----

+ 4 - 0
vendor/alipaysdk/easysdk/csharp/UnitTest/Fixture/privateKey.json

@@ -0,0 +1,4 @@
+{
+  "2019022663440152": "<- 已脱敏,如想要执行单元测试,请开发者自行替换TestAccount中的相关账号并在此重新配置新的APPID与私钥的关联 ->",
+  "2019051064521003": "<- 已脱敏,如想要执行单元测试,请开发者自行替换TestAccount中的相关账号并在此重新配置新的APPID与私钥的关联 ->"
+}

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio