Browse Source

1.1.0

1. 增加 银联支付(二维码支付/网关支付).
2. Security 直接添加 依赖包 "Portable.BouncyCastle"
3. 项目性能优化
4. 解决IIS 微信支付/QQ钱包证书问题
5. 增加 微信支付 资金账单下载API(WeChatPayDownloadFundFlowRequest)
Roc 7 years ago
parent
commit
49f0377112
100 changed files with 4976 additions and 202 deletions
  1. 27 21
      Payment.sln
  2. 4 3
      README.MD
  3. 4 4
      samples/WebApplicationSample/Controllers/AlipayController.cs
  4. 61 1
      samples/WebApplicationSample/Controllers/JdPayController.cs
  5. 242 11
      samples/WebApplicationSample/Controllers/NotifyController.cs
  6. 272 0
      samples/WebApplicationSample/Controllers/UnionPayController.cs
  7. 13 0
      samples/WebApplicationSample/Controllers/WeChatPayController.cs
  8. 1 0
      samples/WebApplicationSample/Program.cs
  9. 1 1
      samples/WebApplicationSample/Properties/launchSettings.json
  10. 27 5
      samples/WebApplicationSample/Startup.cs
  11. 686 11
      samples/WebApplicationSample/Views/Home/Index.cshtml
  12. 4 11
      samples/WebApplicationSample/WebApplicationSample.csproj
  13. 2 9
      samples/WebApplicationSample/appsettings.json
  14. 1 0
      samples/WebApplicationSample/wwwroot/demo.js
  15. 43 31
      src/Essensoft.AspNetCore.Alipay/AlipayClient.cs
  16. 4 13
      src/Essensoft.AspNetCore.Alipay/AlipayException.cs
  17. 31 26
      src/Essensoft.AspNetCore.Alipay/AlipayMobilePublicMultiMediaClient.cs
  18. 1 1
      src/Essensoft.AspNetCore.Alipay/AlipayMobilePublicMultiMediaDownloadRequest.cs
  19. 28 15
      src/Essensoft.AspNetCore.Alipay/AlipayNotifyClient.cs
  20. 6 0
      src/Essensoft.AspNetCore.Alipay/AlipayNotifyResponse.cs
  21. 1 1
      src/Essensoft.AspNetCore.Alipay/AlipayOptions.cs
  22. 6 38
      src/Essensoft.AspNetCore.Alipay/AlipayResponse.cs
  23. 46 0
      src/Essensoft.AspNetCore.Alipay/Domain/AccessOrdersFeedBackResult.cs
  24. 64 0
      src/Essensoft.AspNetCore.Alipay/Domain/AccessProduceOrder.cs
  25. 34 0
      src/Essensoft.AspNetCore.Alipay/Domain/AccessProduceQrcode.cs
  26. 124 0
      src/Essensoft.AspNetCore.Alipay/Domain/AccessPurchaseOrder.cs
  27. 52 0
      src/Essensoft.AspNetCore.Alipay/Domain/AccessPurchaseOrderSendResult.cs
  28. 52 0
      src/Essensoft.AspNetCore.Alipay/Domain/AccessReturnQrcodeResult.cs
  29. 83 0
      src/Essensoft.AspNetCore.Alipay/Domain/ActivityPlanInfo.cs
  30. 46 0
      src/Essensoft.AspNetCore.Alipay/Domain/AliTrustAlipayCert.cs
  31. 40 0
      src/Essensoft.AspNetCore.Alipay/Domain/AliTrustCert.cs
  32. 16 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayAccountExrateCollectcoreDataSendModel.cs
  33. 41 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayAccountExratePricingNotifyModel.cs
  34. 16 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayAccountExrateSentimentDataSendModel.cs
  35. 59 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayAssetPointAccountlogQueryModel.cs
  36. 28 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossBaseProcessInstanceCancelModel.cs
  37. 77 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossBaseProcessInstanceCreateModel.cs
  38. 16 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossBaseProcessInstanceQueryModel.cs
  39. 22 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossBaseProcessSignVerifyModel.cs
  40. 65 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossBaseProcessTaskProcessModel.cs
  41. 16 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossCsDatacollectSendModel.cs
  42. 112 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossProdSubmerchantCreateModel.cs
  43. 82 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossProdSubmerchantModifyModel.cs
  44. 22 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossProdSubmerchantQueryModel.cs
  45. 59 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceBusinessorderQueryModel.cs
  46. 58 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceDataResultSendModel.cs
  47. 58 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceDataSendModel.cs
  48. 34 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotAccountbindingCreateModel.cs
  49. 22 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotAccountbindingDeleteModel.cs
  50. 28 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotDeviceDeleteModel.cs
  51. 28 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotDeviceModifyModel.cs
  52. 28 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotDevicePersonalinfoModifyModel.cs
  53. 35 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotDevicelistCreateModel.cs
  54. 22 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotModelModifyModel.cs
  55. 23 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotModellistCreateModel.cs
  56. 58 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotMsgcenterSendModel.cs
  57. 40 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceLogisticsFaceMatchModel.cs
  58. 40 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceLogisticsUserOrderQueryModel.cs
  59. 46 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceMedicalCardQueryModel.cs
  60. 142 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceMedicalInformationUploadModel.cs
  61. 28 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceMedicalInstcardBindModel.cs
  62. 142 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceMedicalInstcardCreateandpayModel.cs
  63. 64 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceTradeApplyModel.cs
  64. 17 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceTransportOfflinepayTradeSettleModel.cs
  65. 76 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceTransportOfflinepayVirtualcardSendModel.cs
  66. 17 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCreditAutofinanceDataBatchqueryModel.cs
  67. 64 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCreditAutofinanceLoanApplyModel.cs
  68. 40 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCreditAutofinanceLoanCloseModel.cs
  69. 40 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCreditAutofinanceLoanPlanQueryModel.cs
  70. 28 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCreditAutofinanceVidGetModel.cs
  71. 52 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayCreditCreditriskDataPutModel.cs
  72. 22 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDaoweiWeikeTaskviewQueryModel.cs
  73. 40 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataAiserviceJunengLoanQueryModel.cs
  74. 22 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceAntdacEasyserviceQueryModel.cs
  75. 34 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceDatabusSendModel.cs
  76. 34 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceDeployorderDetailQueryModel.cs
  77. 28 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceDeployorderResultSendModel.cs
  78. 47 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceHolographicFactorQueryModel.cs
  79. 52 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceLbsDiscountBatchqueryModel.cs
  80. 40 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceShoppingmallrecShopandvoucherQueryModel.cs
  81. 23 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceVerificationResultSendModel.cs
  82. 17 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceYuebaoassetDetailSendModel.cs
  83. 16 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceYuebaolqdDetailQueryModel.cs
  84. 34 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataServiceResult.cs
  85. 52 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppBillRefundModel.cs
  86. 16 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppCommonBillQueryModel.cs
  87. 28 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppCommonBillkeyQueryModel.cs
  88. 52 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppCommonNotifySendModel.cs
  89. 34 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppFacepayBillCancelModel.cs
  90. 82 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppFacepayBillPayModel.cs
  91. 34 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppFacepayBillQueryModel.cs
  92. 94 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppIndustryOrderCreateModel.cs
  93. 16 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppIndustryOrderQueryModel.cs
  94. 46 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceApplyModel.cs
  95. 40 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceApplyResultSyncModel.cs
  96. 34 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceDetailOutputQueryModel.cs
  97. 70 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceExpenseProgressSyncModel.cs
  98. 34 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceFileOutputQueryModel.cs
  99. 16 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceFileQueryModel.cs
  100. 52 0
      src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceFileSyncRetryModel.cs

+ 27 - 21
Payment.sln

@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 15
-VisualStudioVersion = 15.0.27130.2003
+VisualStudioVersion = 15.0.27130.2036
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essensoft.AspNetCore.Alipay", "src\Essensoft.AspNetCore.Alipay\Essensoft.AspNetCore.Alipay.csproj", "{1F5C8A10-52FE-4318-AEAD-3CA66F8ECC3D}"
 EndProject
@@ -9,8 +9,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C9564537-139
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{5F161C26-3AAC-446B-813E-95D46A621DCB}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebApplicationSample", "samples\WebApplicationSample\WebApplicationSample.csproj", "{4E02282B-63B1-4AE9-8A41-28B5346B54A1}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essensoft.AspNetCore.WeChatPay", "src\Essensoft.AspNetCore.WeChatPay\Essensoft.AspNetCore.WeChatPay.csproj", "{41C12EA5-3A04-489B-9DB7-5D450980B6A6}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essensoft.AspNetCore.QPay", "src\Essensoft.AspNetCore.QPay\Essensoft.AspNetCore.QPay.csproj", "{F05F8977-42D0-435B-85CB-D1CCE5A95DD9}"
@@ -19,11 +17,19 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essensoft.AspNetCore.Securi
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essensoft.AspNetCore.JdPay", "src\Essensoft.AspNetCore.JdPay\Essensoft.AspNetCore.JdPay.csproj", "{8F9568B7-329F-423A-ADBD-B153AF2B8E1B}"
 EndProject
-Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tools", "tools", "{679E0B13-B26E-455A-909A-01D100121084}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essensoft.AspNetCore.UnionPay", "src\Essensoft.AspNetCore.UnionPay\Essensoft.AspNetCore.UnionPay.csproj", "{FCE0663B-A250-4CC5-84CF-D8A4707C79DF}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MigrationAopSdk", "tools\MigrationAopSdk\MigrationAopSdk.csproj", "{235EEBA8-397C-4B1A-B203-529CD3565DA1}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Essensoft.AspNetCore.Payment", "src\Essensoft.AspNetCore.Payment\Essensoft.AspNetCore.Payment.csproj", "{5D86597A-7B1E-4A23-BFDF-4D9BB82B92B2}"
+	ProjectSection(ProjectDependencies) = postProject
+		{1F5C8A10-52FE-4318-AEAD-3CA66F8ECC3D} = {1F5C8A10-52FE-4318-AEAD-3CA66F8ECC3D}
+		{FCE0663B-A250-4CC5-84CF-D8A4707C79DF} = {FCE0663B-A250-4CC5-84CF-D8A4707C79DF}
+		{714A694B-A469-4F2D-9518-5CE7F9593401} = {714A694B-A469-4F2D-9518-5CE7F9593401}
+		{F05F8977-42D0-435B-85CB-D1CCE5A95DD9} = {F05F8977-42D0-435B-85CB-D1CCE5A95DD9}
+		{41C12EA5-3A04-489B-9DB7-5D450980B6A6} = {41C12EA5-3A04-489B-9DB7-5D450980B6A6}
+		{8F9568B7-329F-423A-ADBD-B153AF2B8E1B} = {8F9568B7-329F-423A-ADBD-B153AF2B8E1B}
+	EndProjectSection
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GetCertificateBase64String", "tools\GetCertificateBase64String\GetCertificateBase64String.csproj", "{F1F07E97-3A95-45E3-9AE9-E83B18AFCE31}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebApplicationSample", "samples\WebApplicationSample\WebApplicationSample.csproj", "{A4D0312B-D877-4BBE-A530-C5B5E417F577}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -35,10 +41,6 @@ Global
 		{1F5C8A10-52FE-4318-AEAD-3CA66F8ECC3D}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{1F5C8A10-52FE-4318-AEAD-3CA66F8ECC3D}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{1F5C8A10-52FE-4318-AEAD-3CA66F8ECC3D}.Release|Any CPU.Build.0 = Release|Any CPU
-		{4E02282B-63B1-4AE9-8A41-28B5346B54A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{4E02282B-63B1-4AE9-8A41-28B5346B54A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{4E02282B-63B1-4AE9-8A41-28B5346B54A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{4E02282B-63B1-4AE9-8A41-28B5346B54A1}.Release|Any CPU.Build.0 = Release|Any CPU
 		{41C12EA5-3A04-489B-9DB7-5D450980B6A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{41C12EA5-3A04-489B-9DB7-5D450980B6A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{41C12EA5-3A04-489B-9DB7-5D450980B6A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -55,27 +57,31 @@ Global
 		{8F9568B7-329F-423A-ADBD-B153AF2B8E1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{8F9568B7-329F-423A-ADBD-B153AF2B8E1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{8F9568B7-329F-423A-ADBD-B153AF2B8E1B}.Release|Any CPU.Build.0 = Release|Any CPU
-		{235EEBA8-397C-4B1A-B203-529CD3565DA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{235EEBA8-397C-4B1A-B203-529CD3565DA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{235EEBA8-397C-4B1A-B203-529CD3565DA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{235EEBA8-397C-4B1A-B203-529CD3565DA1}.Release|Any CPU.Build.0 = Release|Any CPU
-		{F1F07E97-3A95-45E3-9AE9-E83B18AFCE31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{F1F07E97-3A95-45E3-9AE9-E83B18AFCE31}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{F1F07E97-3A95-45E3-9AE9-E83B18AFCE31}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{F1F07E97-3A95-45E3-9AE9-E83B18AFCE31}.Release|Any CPU.Build.0 = Release|Any CPU
+		{FCE0663B-A250-4CC5-84CF-D8A4707C79DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{FCE0663B-A250-4CC5-84CF-D8A4707C79DF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FCE0663B-A250-4CC5-84CF-D8A4707C79DF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{FCE0663B-A250-4CC5-84CF-D8A4707C79DF}.Release|Any CPU.Build.0 = Release|Any CPU
+		{5D86597A-7B1E-4A23-BFDF-4D9BB82B92B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{5D86597A-7B1E-4A23-BFDF-4D9BB82B92B2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5D86597A-7B1E-4A23-BFDF-4D9BB82B92B2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{5D86597A-7B1E-4A23-BFDF-4D9BB82B92B2}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A4D0312B-D877-4BBE-A530-C5B5E417F577}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A4D0312B-D877-4BBE-A530-C5B5E417F577}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A4D0312B-D877-4BBE-A530-C5B5E417F577}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A4D0312B-D877-4BBE-A530-C5B5E417F577}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
 		{1F5C8A10-52FE-4318-AEAD-3CA66F8ECC3D} = {C9564537-1390-47F8-AEA4-6E76F3C57E4B}
-		{4E02282B-63B1-4AE9-8A41-28B5346B54A1} = {5F161C26-3AAC-446B-813E-95D46A621DCB}
 		{41C12EA5-3A04-489B-9DB7-5D450980B6A6} = {C9564537-1390-47F8-AEA4-6E76F3C57E4B}
 		{F05F8977-42D0-435B-85CB-D1CCE5A95DD9} = {C9564537-1390-47F8-AEA4-6E76F3C57E4B}
 		{714A694B-A469-4F2D-9518-5CE7F9593401} = {C9564537-1390-47F8-AEA4-6E76F3C57E4B}
 		{8F9568B7-329F-423A-ADBD-B153AF2B8E1B} = {C9564537-1390-47F8-AEA4-6E76F3C57E4B}
-		{235EEBA8-397C-4B1A-B203-529CD3565DA1} = {679E0B13-B26E-455A-909A-01D100121084}
-		{F1F07E97-3A95-45E3-9AE9-E83B18AFCE31} = {679E0B13-B26E-455A-909A-01D100121084}
+		{FCE0663B-A250-4CC5-84CF-D8A4707C79DF} = {C9564537-1390-47F8-AEA4-6E76F3C57E4B}
+		{5D86597A-7B1E-4A23-BFDF-4D9BB82B92B2} = {C9564537-1390-47F8-AEA4-6E76F3C57E4B}
+		{A4D0312B-D877-4BBE-A530-C5B5E417F577} = {5F161C26-3AAC-446B-813E-95D46A621DCB}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {793B69BC-D173-4B88-9DAD-72861AD84858}

+ 4 - 3
README.MD

@@ -1,11 +1,12 @@
-<h3>官方文档/帮助:</h3>
+<h3>官方文档:</h3>
 <p>支付宝:<a href="https://openhome.alipay.com/developmentDocument.htm" target="_blank">文档中心</a>、<a href="https://open.alipay.com/support/supportCenter.htm" target="_blank">技术支持中心</a>、<a href="https://openclub.alipay.com/index.php" target="_blank">开发者社区</a></p>
 <p>微信支付:<a href="https://pay.weixin.qq.com/wiki/doc/api/index.html" target="_blank">开发文档</a>、<a href="http://wxpay.wxutil.com/qa/index.php" target="_blank">问答中心</a>、<a href="http://kf.qq.com/product/wechatpaymentmerchant.html" target="_blank">帮助中心</a></p>
 <p>QQ钱包:<a href="https://qpay.qq.com/qpaywiki.shtml" target="_blank">开发文档</a>、<a href="http://kf.qq.com/product/qq_enterprise.html" target="_blank">帮助中心</a></p>
 <p>京东支付:<a href="http://payapi.jd.com/" target="_blank">开发文档</a></p>
+<p>银联支付:<a href="https://open.unionpay.com/ajweb/product" target="_blank">开放平台</a></p>
 <p>QQ交流群:<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=aac56c8f02f54893267d3ac90787c1794a7687f3c31a923812a36b67c4ee6271">522457525(Payment)</a></p>
 <h3>*注意:</h3>
-<p>1.示例开发环境:Windows 10、VS2017 15.5.4、.NET Core Runtime 2.0.5</p>
-<p>2.支持渠道:支付宝、微信支付、QQ钱包、京东支付(仅扫码支付)。</p>
+<p>1.开发环境:Windows 10、VS2017 15.6.2、.NET Core SDK 2.1.101、.NET Core Runtime 2.0.6</p>
+<p>2.支持渠道:支付宝、微信支付、QQ钱包、京东支付、银联支付。</p>
 <h3>使用方式</h3>
 <p>见示例项目:WebApplicationSample</p>

+ 4 - 4
samples/WebApplicationSample/Controllers/AlipayController.cs

@@ -213,11 +213,11 @@ namespace WebApplicationSample.Controllers
         }
 
         [HttpGet]
-        public IActionResult PagePayReturn()
+        public async Task<IActionResult> PagePayReturn()
         {
             try
             {
-                var notify = _notifyClient.Execute<AlipayTradePagePayReturnResponse>(Request);
+                var notify = await _notifyClient.ExecuteAsync<AlipayTradePagePayReturnResponse>(Request);
                 return Content("success", "text/plain");
             }
             catch
@@ -227,11 +227,11 @@ namespace WebApplicationSample.Controllers
         }
 
         [HttpGet]
-        public IActionResult WapPayReturn()
+        public async Task<IActionResult> WapPayReturn()
         {
             try
             {
-                var notify = _notifyClient.Execute<AlipayTradeWapPayReturnResponse>(Request);
+                var notify = await _notifyClient.ExecuteAsync<AlipayTradeWapPayReturnResponse>(Request);
                 return Content("success", "text/plain");
             }
             catch

+ 61 - 1
samples/WebApplicationSample/Controllers/JdPayController.cs

@@ -2,16 +2,61 @@
 using Essensoft.AspNetCore.JdPay.Request;
 using Essensoft.AspNetCore.JdPay;
 using System.Threading.Tasks;
+using Essensoft.AspNetCore.JdPay.Notify;
 
 namespace WebApplicationSample.Controllers
 {
     public class JdPayController : Controller
     {
         public readonly JdPayClient _client = null;
+        public readonly JdPayNotifyClient _notifyClient = null;
 
-        public JdPayController(JdPayClient client)
+        public JdPayController(JdPayClient client, JdPayNotifyClient notifyClient)
         {
             _client = client;
+            _notifyClient = notifyClient;
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> SaveOrderPC(string tradeNum, string tradeName, string tradeDesc, string tradeTime, string amount, string orderType, string currency, string note, string callbackUrl, string notifyUrl, string tradeType)
+        {
+            var request = new JdPaySaveOrderPCRequest()
+            {
+                TradeNum = tradeNum,
+                TradeName = tradeName,
+                TradeDesc = tradeDesc,
+                TradeTime = tradeTime,
+                Amount = amount,
+                OrderType = orderType,
+                Currency = currency,
+                Note = note,
+                CallbackUrl = callbackUrl,
+                NotifyUrl = notifyUrl,
+            };
+
+            var response = await _client.PageExecuteAsync(request, "POST");
+            return Content(response.Body, "text/html");
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> SaveOrderH5(string tradeNum, string tradeName, string tradeDesc, string tradeTime, string amount, string orderType, string currency, string note, string callbackUrl, string notifyUrl, string tradeType)
+        {
+            var request = new JdPaySaveOrderH5Request()
+            {
+                TradeNum = tradeNum,
+                TradeName = tradeName,
+                TradeDesc = tradeDesc,
+                TradeTime = tradeTime,
+                Amount = amount,
+                OrderType = orderType,
+                Currency = currency,
+                Note = note,
+                CallbackUrl = callbackUrl,
+                NotifyUrl = notifyUrl,
+            };
+
+            var response = await _client.PageExecuteAsync(request, "POST");
+            return Content(response.Body, "text/html");
         }
 
         [HttpPost]
@@ -76,5 +121,20 @@ namespace WebApplicationSample.Controllers
             var response = await _client.ExecuteAsync(request);
             return Content(response.Body);
         }
+
+        [HttpGet]  // h5 get
+        [HttpPost] // pc post
+        public IActionResult Return()
+        {
+            try
+            {
+                var notify = _notifyClient.ExecuteAsync<JdPaySyncReturnResponse>(Request);
+                return Content("success", "text/plain");
+            }
+            catch
+            {
+                return Content("error", "text/plain");
+            }
+        }
     }
 }

+ 242 - 11
samples/WebApplicationSample/Controllers/NotifyController.cs

@@ -4,6 +4,8 @@ using Essensoft.AspNetCore.JdPay;
 using Essensoft.AspNetCore.JdPay.Notify;
 using Essensoft.AspNetCore.QPay;
 using Essensoft.AspNetCore.QPay.Notify;
+using Essensoft.AspNetCore.UnionPay;
+using Essensoft.AspNetCore.UnionPay.Notify;
 using Essensoft.AspNetCore.WeChatPay;
 using Essensoft.AspNetCore.WeChatPay.Notify;
 using Microsoft.AspNetCore.Mvc;
@@ -27,11 +29,11 @@ namespace WebApplicationSample.Controllers
         /// <returns></returns>
         [Route("pagepay")]
         [HttpPost]
-        public IActionResult PagePay()
+        public async Task<IActionResult> PagePayAsync()
         {
             try
             {
-                var notify = _client.Execute<AlipayTradePagePayNotifyResponse>(Request);
+                var notify = await _client.ExecuteAsync<AlipayTradePagePayNotifyResponse>(Request);
                 if ("TRADE_SUCCESS" == notify.TradeStatus)
                 {
                     Console.WriteLine("OutTradeNo: " + notify.OutTradeNo);
@@ -52,11 +54,11 @@ namespace WebApplicationSample.Controllers
         /// <returns></returns>
         [Route("wappay")]
         [HttpPost]
-        public IActionResult WapPay()
+        public async Task<IActionResult> WapPayAsync()
         {
             try
             {
-                var notify = _client.Execute<AlipayTradeWapPayNotifyResponse>(Request);
+                var notify = await _client.ExecuteAsync<AlipayTradeWapPayNotifyResponse>(Request);
                 if ("TRADE_SUCCESS" == notify.TradeStatus)
                 {
                     Console.WriteLine("OutTradeNo: " + notify.OutTradeNo);
@@ -77,11 +79,11 @@ namespace WebApplicationSample.Controllers
         /// <returns></returns>
         [Route("precreate")]
         [HttpPost]
-        public IActionResult Precreate()
+        public async Task<IActionResult> PrecreateAsync()
         {
             try
             {
-                var notify = _client.Execute<AlipayTradePrecreateNotifyResponse>(Request);
+                var notify = await _client.ExecuteAsync<AlipayTradePrecreateNotifyResponse>(Request);
                 if ("TRADE_SUCCESS" == notify.TradeStatus)
                 {
                     Console.WriteLine("OutTradeNo: " + notify.OutTradeNo);
@@ -102,11 +104,11 @@ namespace WebApplicationSample.Controllers
         /// <returns></returns>
         [Route("pay")]
         [HttpPost]
-        public IActionResult Pay()
+        public async Task<IActionResult> PayAsync()
         {
             try
             {
-                var notify = _client.Execute<AlipayTradePayNotifyResponse>(Request);
+                var notify = await _client.ExecuteAsync<AlipayTradePayNotifyResponse>(Request);
                 if ("TRADE_SUCCESS" == notify.TradeStatus)
                 {
                     Console.WriteLine("OutTradeNo: " + notify.OutTradeNo);
@@ -209,7 +211,6 @@ namespace WebApplicationSample.Controllers
                 if ("SUCCESS" == notify.TradeState)
                 {
                     Console.WriteLine("OutTradeNo: " + notify.OutTradeNo);
-
                     return Content("<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>", "text/xml");
                 }
                 return NoContent();
@@ -231,11 +232,11 @@ namespace WebApplicationSample.Controllers
         }
 
         [HttpPost]
-        public async Task<IActionResult> PostAsync()
+        public async Task<IActionResult> Async()
         {
             try
             {
-                var notify = await _client.ExecuteAsync<JdPayAsynNotifyResponse>(Request);
+                var notify = await _client.ExecuteAsync<JdPayAsyncNotifyResponse>(Request);
                 Console.WriteLine("TradeNum: " + notify.TradeNum + " tradeType :" + notify.TradeType);
 
                 return Content("success", "text/plain");
@@ -246,4 +247,234 @@ namespace WebApplicationSample.Controllers
             }
         }
     }
+
+    [Route("notify/unionpay")]
+    public class UnionPayNotifyController : Controller
+    {
+        private readonly UnionPayNotifyClient _client = null;
+        public UnionPayNotifyController(UnionPayNotifyClient client)
+        {
+            _client = client;
+        }
+
+        /// <summary>
+        /// 二维码支付 - 二维码消费(被扫)通知
+        /// </summary>
+        /// <returns></returns>
+        [Route("appconsume")]
+        [HttpPost]
+        public async Task<IActionResult> AppConsume()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<UnionPayForm05_6_2_AppConsumeNotifyResponse>(Request);
+                Console.WriteLine("OrderId: " + notify.OrderId + " respCode :" + notify.RespCode);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return NoContent();
+            }
+        }
+
+        /// <summary>
+        /// 二维码支付 - 申请二维码(主扫)通知
+        /// </summary>
+        /// <returns></returns>
+        [Route("applyqrcode")]
+        [HttpPost]
+        public async Task<IActionResult> ApplyQrCode()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<UnionPayForm05_6_1_ApplyQrCodeNotifyResponse>(Request);
+                Console.WriteLine("OrderId: " + notify.OrderId + " respCode :" + notify.RespCode);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return NoContent();
+            }
+        }
+
+        /// <summary>
+        /// 二维码支付 - 消费撤销通知
+        /// </summary>
+        /// <returns></returns>
+        [Route("purchaseundo")]
+        [HttpPost]
+        public async Task<IActionResult> PurchaseUndo()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<UnionPayUpacpPurchaseUndoNotifyResponse>(Request);
+                Console.WriteLine("OrderId: " + notify.OrderId + " respCode :" + notify.RespCode);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return NoContent();
+            }
+        }
+
+        /// <summary>
+        /// 二维码支付 - 退货通知
+        /// </summary>
+        /// <returns></returns>
+        [Route("refund")]
+        [HttpPost]
+        public async Task<IActionResult> Refund()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<UnionPayUpacpRefundNotifyResponse>(Request);
+                Console.WriteLine("OrderId: " + notify.OrderId + " respCode :" + notify.RespCode);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return NoContent();
+            }
+        }
+
+        /// <summary>
+        /// 网关支付 - 跳转网关页面支付通知
+        /// </summary>
+        /// <returns></returns>
+        [Route("frontconsume62")]
+        [HttpPost]
+        public async Task<IActionResult> FrontConsume62()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<UnionPayForm_6_2_FrontConsumeNotifyResponse>(Request);
+                Console.WriteLine("OrderId: " + notify.OrderId + " respCode :" + notify.RespCode);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return NoContent();
+            }
+        }
+
+        /// <summary>
+        /// 网关支付 - 消费撤销通知
+        /// </summary>
+        /// <returns></returns>
+        [Route("consumeundo63")]
+        [HttpPost]
+        public async Task<IActionResult> ConsumeUndo63()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<UnionPayForm_6_3_ConsumeUndoNotifyResponse>(Request);
+                Console.WriteLine("OrderId: " + notify.OrderId + " respCode :" + notify.RespCode);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return NoContent();
+            }
+        }
+
+        /// <summary>
+        /// 网关支付 - 退货通知
+        /// </summary>
+        /// <returns></returns>
+        [Route("refund64")]
+        [HttpPost]
+        public async Task<IActionResult> Refund64()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<UnionPayForm_6_4_RefundNotifyResponse>(Request);
+                Console.WriteLine("OrderId: " + notify.OrderId + " respCode :" + notify.RespCode);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return NoContent();
+            }
+        }
+
+        /// <summary>
+        /// 网关支付 - 预授权通知
+        /// </summary>
+        /// <returns></returns>
+        [Route("authdealfront671")]
+        [HttpPost]
+        public async Task<IActionResult> AuthDealFront671()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<UnionPayForm_6_7_1_AuthDeal_FrontNotifyResponse>(Request);
+                Console.WriteLine("OrderId: " + notify.OrderId + " respCode :" + notify.RespCode);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return NoContent();
+            }
+        }
+
+        /// <summary>
+        /// 网关支付 - 预授权撤销通知
+        /// </summary>
+        /// <returns></returns>
+        [Route("authundo672")]
+        [HttpPost]
+        public async Task<IActionResult> AuthUndo672()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<UnionPayForm_6_7_2_AuthUndoNotifyResponse>(Request);
+                Console.WriteLine("OrderId: " + notify.OrderId + " respCode :" + notify.RespCode);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return NoContent();
+            }
+        }
+
+        /// <summary>
+        /// 网关支付 - 预授权完成通知
+        /// </summary>
+        /// <returns></returns>
+        [Route("authfinish673")]
+        [HttpPost]
+        public async Task<IActionResult> AuthFinish673()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<UnionPayForm_6_7_3_AuthFinishNotifyResponse>(Request);
+                Console.WriteLine("OrderId: " + notify.OrderId + " respCode :" + notify.RespCode);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return NoContent();
+            }
+        }
+
+        /// <summary>
+        /// 网关支付 - 预授权完成撤销通知
+        /// </summary>
+        /// <returns></returns>
+        [Route("authfinishundo674")]
+        [HttpPost]
+        public async Task<IActionResult> AuthFinishUndo674()
+        {
+            try
+            {
+                var notify = await _client.ExecuteAsync<UnionPayForm_6_7_4_AuthFinishUndoNotifyResponse>(Request);
+                Console.WriteLine("OrderId: " + notify.OrderId + " respCode :" + notify.RespCode);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return NoContent();
+            }
+        }
+    }
 }

+ 272 - 0
samples/WebApplicationSample/Controllers/UnionPayController.cs

@@ -0,0 +1,272 @@
+using Essensoft.AspNetCore.UnionPay;
+using Essensoft.AspNetCore.UnionPay.Notify;
+using Essensoft.AspNetCore.UnionPay.Request;
+using Microsoft.AspNetCore.Mvc;
+using System.Threading.Tasks;
+
+namespace WebApplicationSample.Controllers
+{
+    public class UnionPayController : Controller
+    {
+        public readonly UnionPayClient _client = null;
+        public readonly UnionPayNotifyClient _notifyClient = null;
+
+        public UnionPayController(UnionPayClient client, UnionPayNotifyClient notifyClient)
+        {
+            _client = client;
+            _notifyClient = notifyClient;
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> AppConsume(string orderId, string qrNo, string txnTime, string txnAmt, string currencyCode, string backUrl)
+        {
+            var request = new UnionPayForm05_6_2_AppConsumeRequest()
+            {
+                OrderId = orderId,
+                QrNo = qrNo,
+                TxnTime = txnTime,
+                TxnAmt = txnAmt,
+                BackUrl = backUrl,
+                CurrencyCode = currencyCode
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> ApplyQrCode(string orderId, string txnTime, string txnAmt, string currencyCode, string backUrl)
+        {
+            var request = new UnionPayForm05_6_1_ApplyQrCodeRequest()
+            {
+                OrderId = orderId,
+                TxnTime = txnTime,
+                TxnAmt = txnAmt,
+                BackUrl = backUrl,
+                CurrencyCode = currencyCode
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> PurchaseUndo(string orderId, string txnTime, string txnAmt, string origQryId, string origOrderId, string origTxnTime, string backUrl)
+        {
+            var request = new UnionPayPurchaseUndoRequest()
+            {
+                OrderId = orderId,
+                TxnTime = txnTime,
+                TxnAmt = txnAmt,
+                OrigQryId = origQryId,
+                OrigOrderId = origOrderId,
+                OrigTxnTime = origTxnTime,
+                BackUrl = backUrl,
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> Refund(string orderId, string txnTime, string txnAmt, string origQryId, string origOrderId, string origTxnTime, string backUrl)
+        {
+            var request = new UnionPayRefundRequest()
+            {
+                OrderId = orderId,
+                TxnTime = txnTime,
+                TxnAmt = txnAmt,
+                OrigQryId = origQryId,
+                OrigOrderId = origOrderId,
+                OrigTxnTime = origTxnTime,
+                BackUrl = backUrl,
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> Query563(string orderId, string txnTime)
+        {
+            var request = new UnionPayForm05_6_3_QueryRequest()
+            {
+                OrderId = orderId,
+                TxnTime = txnTime,
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> FileTransfer057(string fileType, string txnTime, string settleDate)
+        {
+            var request = new UnionPayForm05_7_FileTransferRequest()
+            {
+                FileType = fileType,
+                TxnTime = txnTime,
+                SettleDate = settleDate,
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> FrontConsume62(string orderId, string txnTime, string txnAmt, string currencyCode, string payTimeout, string frontUrl, string backUrl)
+        {
+            var request = new UnionPayForm_6_2_FrontConsumeRequest()
+            {
+                OrderId = orderId,
+                TxnTime = txnTime,
+                TxnAmt = txnAmt,
+                CurrencyCode = currencyCode,
+                PayTimeout = payTimeout,
+                FrontUrl = frontUrl,
+                BackUrl = backUrl,
+            };
+            var response = await _client.PageExecuteAsync(request, "POST");
+            return Content(response.Body, "text/html");
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> FrontConsume62Return()
+        {
+            try
+            {
+                var notify = await _notifyClient.ExecuteAsync<UnionPayForm_6_2_FrontConsumeReturnResponse>(Request);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return Content("error", "text/plain");
+            }
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> Query65(string orderId, string txnTime)
+        {
+            var request = new UnionPayForm_6_5_QueryRequest()
+            {
+                OrderId = orderId,
+                TxnTime = txnTime,
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> ConsumeUndo63(string orderId, string txnTime, string txnAmt, string origQryId, string backUrl)
+        {
+            var request = new UnionPayForm_6_3_ConsumeUndoRequest()
+            {
+                OrderId = orderId,
+                TxnTime = txnTime,
+                TxnAmt = txnAmt,
+                OrigQryId = origQryId,
+                BackUrl = backUrl,
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> Refund64(string orderId, string txnTime, string txnAmt, string origQryId, string backUrl)
+        {
+            var request = new UnionPayForm_6_4_RefundRequest()
+            {
+                OrderId = orderId,
+                TxnTime = txnTime,
+                TxnAmt = txnAmt,
+                OrigQryId = origQryId,
+                BackUrl = backUrl,
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> FileTransfer66(string fileType, string txnTime, string settleDate)
+        {
+            var request = new UnionPayForm_6_6_FileTransferRequest()
+            {
+                FileType = fileType,
+                TxnTime = txnTime,
+                SettleDate = settleDate,
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> AuthDealFront671(string orderId, string txnTime, string txnAmt, string currencyCode, string payTimeout, string frontUrl, string backUrl)
+        {
+            var request = new UnionPayForm_6_7_1_AuthDeal_FrontRequest()
+            {
+                OrderId = orderId,
+                TxnTime = txnTime,
+                TxnAmt = txnAmt,
+                CurrencyCode = currencyCode,
+                PayTimeout = payTimeout,
+                FrontUrl = frontUrl,
+                BackUrl = backUrl,
+            };
+            var response = await _client.PageExecuteAsync(request, "POST");
+            return Content(response.Body, "text/html");
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> AuthDealFront671Return()
+        {
+            try
+            {
+                var notify = await _notifyClient.ExecuteAsync<UnionPayForm_6_7_1_AuthDeal_FrontReturnResponse>(Request);
+                return Content("ok", "text/plain");
+            }
+            catch
+            {
+                return Content("error", "text/plain");
+            }
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> AuthUndo672(string orderId, string txnTime, string txnAmt, string origQryId, string backUrl)
+        {
+            var request = new UnionPayForm_6_7_2_AuthUndoRequest()
+            {
+                OrderId = orderId,
+                TxnTime = txnTime,
+                TxnAmt = txnAmt,
+                OrigQryId = origQryId,
+                BackUrl = backUrl,
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> AuthFinish673(string orderId, string txnTime, string txnAmt, string origQryId, string backUrl)
+        {
+            var request = new UnionPayForm_6_7_3_AuthFinishRequest()
+            {
+                OrderId = orderId,
+                TxnTime = txnTime,
+                TxnAmt = txnAmt,
+                OrigQryId = origQryId,
+                BackUrl = backUrl,
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+
+        [HttpPost]
+        public async Task<IActionResult> AuthFinishUndo674(string orderId, string txnTime, string txnAmt, string origQryId, string backUrl)
+        {
+            var request = new UnionPayForm_6_7_4_AuthFinishUndoRequest()
+            {
+                OrderId = orderId,
+                TxnTime = txnTime,
+                TxnAmt = txnAmt,
+                OrigQryId = origQryId,
+                BackUrl = backUrl,
+            };
+            var response = await _client.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
+    }
+}

+ 13 - 0
samples/WebApplicationSample/Controllers/WeChatPayController.cs

@@ -160,5 +160,18 @@ namespace WebApplicationSample.Controllers
             var response = await _certClient.ExecuteAsync(request);
             return Ok(response.Body);
         }
+
+        [HttpPost]
+        public async Task<IActionResult> DownloadFundFlow(string bill_date, string account_type, string tar_type)
+        {
+            var request = new WeChatPayDownloadFundFlowRequest()
+            {
+                BillDate = bill_date,
+                AccountType = account_type,
+                TarType = tar_type,
+            };
+            var response = await _certClient.ExecuteAsync(request);
+            return Ok(response.Body);
+        }
     }
 }

+ 1 - 0
samples/WebApplicationSample/Program.cs

@@ -13,6 +13,7 @@ namespace WebApplicationSample
         public static IWebHost BuildWebHost(string[] args) =>
             WebHost.CreateDefaultBuilder(args)
                 .UseStartup<Startup>()
+                .UseUrls("http://*:5000")
                 .Build();
     }
 }

+ 1 - 1
samples/WebApplicationSample/Properties/launchSettings.json

@@ -3,7 +3,7 @@
     "windowsAuthentication": false,
     "anonymousAuthentication": true,
     "iisExpress": {
-      "applicationUrl": "http://localhost:61475/",
+      "applicationUrl": "http://localhost:5000/",
       "sslPort": 0
     }
   },

+ 27 - 5
samples/WebApplicationSample/Startup.cs

@@ -1,23 +1,27 @@
 using Essensoft.AspNetCore.Alipay;
 using Essensoft.AspNetCore.JdPay;
 using Essensoft.AspNetCore.QPay;
+using Essensoft.AspNetCore.UnionPay;
 using Essensoft.AspNetCore.WeChatPay;
 using Microsoft.AspNetCore.Builder;
 using Microsoft.AspNetCore.Hosting;
 using Microsoft.Extensions.Configuration;
 using Microsoft.Extensions.DependencyInjection;
+using System.Text.Encodings.Web;
+using System.Text.Unicode;
 
 namespace WebApplicationSample
 {
     public class Startup
     {
-        public IConfiguration Configuration { get; }
-
         public Startup(IConfiguration configuration)
         {
             Configuration = configuration;
         }
 
+        public IConfiguration Configuration { get; }
+
+        // This method gets called by the runtime. Use this method to add services to the container.
         public void ConfigureServices(IServiceCollection services)
         {
             services.AddMvc();
@@ -29,6 +33,7 @@ namespace WebApplicationSample
             services.AddWeChatPay();
             services.AddQPay();
             services.AddJdPay();
+            services.AddUnionPay();
 
             // 添加依赖注入时,也可以直接设置参数..
             // 如:
@@ -46,14 +51,21 @@ namespace WebApplicationSample
             services.Configure<WeChatPayOptions>(Configuration.GetSection("WeChatPay"));
             services.Configure<QPayOptions>(Configuration.GetSection("QPay"));
             services.Configure<JdPayOptions>(Configuration.GetSection("JdPay"));
+            services.Configure<UnionPayOptions>(Configuration.GetSection("UnionPay"));
 
-            // 配置参数 具体参数见 AlipayOptions、WeChatPayOptions、QPayOptions、JdPayOptions
+            services.AddWebEncoders(opt =>
+            {
+                opt.TextEncoderSettings = new TextEncoderSettings(UnicodeRanges.All);
+            });
+
+            // 配置参数 具体参数见 AlipayOptions、WeChatPayOptions、QPayOptions、JdPayOptions、UnionPayOptions类
 
             //{
             //  "Alipay": {
             //    "AppId": "xxx",
             //    "RsaPublicKey": "xxx",
-            //    "RsaPrivateKey": "xxx"
+            //    "RsaPrivateKey": "xxx",
+            //    "SignType" : "RSA2"
             //  },
             //  "WeChatPay": {
             //    "AppId": "xxx",
@@ -74,15 +86,25 @@ namespace WebApplicationSample
             //    "RsaPrivateKey": "xxx",
             //    "DesKey": "xxx"
             //  }
+            //  "UnionPay": {
+            //    "MerId": "xxx",
+            //    "SignCert": "xxx",
+            //    "SignCertPassword": "xxx",
+            //    "EncryptCert": "xxx",
+            //    "MiddleCert": "xxx",
+            //    "RootCert": "xxx",
+            //    "SecureKey": "xxx",
+            //  }
             //}
         }
 
+        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
         public void Configure(IApplicationBuilder app, IHostingEnvironment env)
         {
             if (env.IsDevelopment())
             {
-                app.UseDeveloperExceptionPage();
                 app.UseBrowserLink();
+                app.UseDeveloperExceptionPage();
             }
             else
             {

+ 686 - 11
samples/WebApplicationSample/Views/Home/Index.cshtml

@@ -1,5 +1,5 @@
 @{
-    ViewData["Title"] = ".Net Core Payment 示例";
+    ViewData["Title"] = "Payment 示例";
 }
 <div id="wrapper">
 
@@ -14,17 +14,19 @@
             <li><a href="#tabs-api-wechatpay">微信支付</a></li>
             <li><a href="#tabs-api-qpay">QQ钱包</a></li>
             <li><a href="#tabs-api-jdpay">京东支付</a></li>
+            <li><a href="#tabs-api-unionpay">银联支付</a></li>
         </ul>
         <div id="tabs-api-1">
-            <h3>官方文档/帮助:</h3>
+            <h3>官方文档:</h3>
             <p>支付宝:<a href="https://openhome.alipay.com/developmentDocument.htm" target="_blank">文档中心</a>、<a href="https://open.alipay.com/support/supportCenter.htm" target="_blank">技术支持中心</a>、<a href="https://openclub.alipay.com/index.php" target="_blank">开发者社区</a></p>
             <p>微信支付:<a href="https://pay.weixin.qq.com/wiki/doc/api/index.html" target="_blank">开发文档</a>、<a href="http://wxpay.wxutil.com/qa/index.php" target="_blank">问答中心</a>、<a href="http://kf.qq.com/product/wechatpaymentmerchant.html" target="_blank">帮助中心</a></p>
             <p>QQ钱包:<a href="https://qpay.qq.com/qpaywiki.shtml" target="_blank">开发文档</a>、<a href="http://kf.qq.com/product/qq_enterprise.html" target="_blank">帮助中心</a></p>
             <p>京东支付:<a href="http://payapi.jd.com/" target="_blank">开发文档</a></p>
+            <p>银联支付:<a href="https://open.unionpay.com/ajweb/product" target="_blank">开放平台</a></p>
             <p>QQ交流群:<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=aac56c8f02f54893267d3ac90787c1794a7687f3c31a923812a36b67c4ee6271">522457525(Payment)</a></p>
             <h3>*注意:</h3>
-            <p>1.示例开发环境:Windows 10、VS2017 15.5.4、.NET Core Runtime 2.0.5</p>
-            <p>2.支持渠道:支付宝、微信支付、QQ钱包、京东支付(仅扫码支付)。</p>
+            <p>1.开发环境:Windows 10、VS2017 15.6.2、.NET Core SDK 2.1.101、.NET Core Runtime 2.0.6</p>
+            <p>2.支持渠道:支付宝、微信支付、QQ钱包、京东支付、银联支付。</p>
             <h3>使用方式</h3>
             <p>见示例项目:WebApplicationSample</p>
         </div>
@@ -327,6 +329,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -391,6 +394,7 @@
                     <li><a href="#tabs-purchase-10">获取RSA加密公钥</a></li>
                     <li><a href="#tabs-purchase-11">企业付款到银行卡</a></li>
                     <li><a href="#tabs-purchase-12">查询企业付款银行卡</a></li>
+                    <li><a href="#tabs-purchase-13">下载资金账单</a></li>
                 </ul>
                 <div id="tabs-purchase-1">
                     <form class="api-form" asp-controller="WeChatPay" asp-action="UnifiedOrder" method="post" target="_blank">
@@ -423,6 +427,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -462,6 +467,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -481,6 +487,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_2" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -496,6 +503,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_3" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -531,6 +539,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_4" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -558,6 +567,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_5" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -581,6 +591,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_6" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -620,6 +631,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_2" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -635,6 +647,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_3" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -646,6 +659,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_7&index=4" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -681,6 +695,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_2" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -696,10 +711,36 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=24_3" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
                 </div>
+                <div id="tabs-purchase-13">
+                    <form class="api-form" asp-controller="WeChatPay" asp-action="DownloadFundFlow" method="post" target="_blank">
+                        <p>
+                            <label>bill_date:</label>
+                            <input type="text" name="bill_date">
+                        </p>
+                        <p>
+                            <label>account_type:</label>
+                            <input type="text" name="account_type">
+                        </p>
+                        <p>
+                            <label>tar_type:</label>
+                            <input type="text" name="tar_type">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=9_18&index=7" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+
             </div>
         </div>
         <div id="tabs-api-qpay">
@@ -742,6 +783,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://qpay.qq.com/qpaywiki/showdocument.php?pid=38&docid=58" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -761,6 +803,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://qpay.qq.com/qpaywiki/showdocument.php?pid=38&docid=60" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -776,6 +819,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://qpay.qq.com/qpaywiki/showdocument.php?pid=38&docid=61" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -811,6 +855,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://qpay.qq.com/qpaywiki/showdocument.php?pid=38&docid=62" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -838,6 +883,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="https://qpay.qq.com/qpaywiki/showdocument.php?pid=38&docid=63" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -847,12 +893,128 @@
         <div id="tabs-api-jdpay">
             <div id="tabs-purchase-jdpay">
                 <ul>
-                    <li><a href="#tabs-purchase-1">扫码支付</a></li>
-                    <li><a href="#tabs-purchase-2">交易查询</a></li>
-                    <li><a href="#tabs-purchase-3">退款申请</a></li>
-                    <li><a href="#tabs-purchase-4">退款查询</a></li>
+                    <li><a href="#tabs-purchase-1">电脑网站支付</a></li>
+                    <li><a href="#tabs-purchase-2">手机网站支付</a></li>
+                    <li><a href="#tabs-purchase-3">扫码支付</a></li>
+                    <li><a href="#tabs-purchase-4">交易查询</a></li>
+                    <li><a href="#tabs-purchase-5">退款申请</a></li>
+                    <li><a href="#tabs-purchase-6">退款查询</a></li>
                 </ul>
                 <div id="tabs-purchase-1">
+                    <form class="api-form" asp-controller="JdPay" asp-action="SaveOrderPC" method="post" target="_blank">
+                        <p>
+                            <label>tradeNum:</label>
+                            <input type="text" name="tradeNum" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>tradeName:</label>
+                            <input type="text" name="tradeName" value="京东电脑网站支付测试">
+                        </p>
+                        <p>
+                            <label>tradeDesc:</label>
+                            <input type="text" name="tradeDesc" value="交易描述">
+                        </p>
+                        <p>
+                            <label>tradeTime:</label>
+                            <input type="text" name="tradeTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>amount:</label>
+                            <input type="text" name="amount" value="1">
+                        </p>
+                        <p>
+                            <label>orderType:</label>
+                            <input type="text" name="orderType" value="1">
+                        </p>
+                        <p>
+                            <label>currency:</label>
+                            <input type="text" name="currency" value="CNY">
+                        </p>
+                        <p>
+                            <label>note:</label>
+                            <input type="text" name="note" value="备注">
+                        </p>
+                        <p>
+                            <label>callbackUrl:</label>
+                            <input type="text" name="callbackUrl" value="http://www.baidu.com/jdpay/return">
+                        </p>
+                        <p>
+                            <label>notifyUrl:</label>
+                            <input type="text" name="notifyUrl" value="http://www.baidu.com/notify/jdpay">
+                        </p>
+                        <p>
+                            <label>tradeType:</label>
+                            <input type="text" name="tradeType" value="">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="http://payapi.jd.com/docList.html" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+
+                <div id="tabs-purchase-2">
+                    <form class="api-form" asp-controller="JdPay" asp-action="SaveOrderH5" method="post" target="_blank">
+                        <p>
+                            <label>tradeNum:</label>
+                            <input type="text" name="tradeNum" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>tradeName:</label>
+                            <input type="text" name="tradeName" value="京东手机网站支付测试">
+                        </p>
+                        <p>
+                            <label>tradeDesc:</label>
+                            <input type="text" name="tradeDesc" value="交易描述">
+                        </p>
+                        <p>
+                            <label>tradeTime:</label>
+                            <input type="text" name="tradeTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>amount:</label>
+                            <input type="text" name="amount" value="1">
+                        </p>
+                        <p>
+                            <label>orderType:</label>
+                            <input type="text" name="orderType" value="1">
+                        </p>
+                        <p>
+                            <label>currency:</label>
+                            <input type="text" name="currency" value="CNY">
+                        </p>
+                        <p>
+                            <label>note:</label>
+                            <input type="text" name="note" value="备注">
+                        </p>
+                        <p>
+                            <label>callbackUrl:</label>
+                            <input type="text" name="callbackUrl" value="http://www.baidu.com/jdpay/return">
+                        </p>
+                        <p>
+                            <label>notifyUrl:</label>
+                            <input type="text" name="notifyUrl" value="http://www.baidu.com/notify/jdpay">
+                        </p>
+                        <p>
+                            <label>tradeType:</label>
+                            <input type="text" name="tradeType" value="">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="http://payapi.jd.com/docList.html" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+
+                <div id="tabs-purchase-3">
                     <form class="api-form" asp-controller="JdPay" asp-action="Uniorder" method="post" target="_blank">
                         <p>
                             <label>tradeNum:</label>
@@ -899,11 +1061,13 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="http://payapi.jd.com/docList.html" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
                 </div>
-                <div id="tabs-purchase-2">
+
+                <div id="tabs-purchase-4">
                     <form class="api-form" asp-controller="JdPay" asp-action="OrderQuery" method="post" target="_blank">
                         <p>
                             <label>tradeNum:</label>
@@ -918,11 +1082,13 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="http://payapi.jd.com/docList.html" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
                 </div>
-                <div id="tabs-purchase-3">
+
+                <div id="tabs-purchase-5">
                     <form class="api-form" asp-controller="JdPay" asp-action="Refund" method="post" target="_blank">
                         <p>
                             <label>tradeNum:</label>
@@ -945,11 +1111,13 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="http://payapi.jd.com/docList.html" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
                 </div>
-                <div id="tabs-purchase-4">
+
+                <div id="tabs-purchase-6">
                     <form class="api-form" asp-controller="JdPay" asp-action="RefundQuery" method="post" target="_blank">
                         <p>
                             <label>tradeNum:</label>
@@ -964,6 +1132,7 @@
                             <input type="submit" class="button" value="提交">
                         </p>
                     </form>
+                    <hr />
                     <p class="faq">
                         <a href="http://payapi.jd.com/docList.html" target="_blank">* 查看接口 请求参数、响应参数</a>
                     </p>
@@ -971,7 +1140,513 @@
 
             </div>
         </div>
+        <div id="tabs-api-unionpay">
+            <div id="tabs-purchase-unionpay">
+                <ul>
+                    <li><a>二维码支付产品</a></li>
+                    <li><a href="#tabs-purchase-1">二维码消费(被扫)</a></li>
+                    <li><a href="#tabs-purchase-2">申请二维码(主扫)</a></li>
+                    <li><a href="#tabs-purchase-3">消费撤销</a></li>
+                    <li><a href="#tabs-purchase-4">退货</a></li>
+                    <li><a href="#tabs-purchase-5">交易状态查询</a></li>
+                    <li><a href="#tabs-purchase-6">对账文件下载</a></li>
+                    <li><a>网关支付产品</a></li>
+                    <li><a href="#tabs-purchase-10">跳转网关页面支付</a></li>
+                    <li><a href="#tabs-purchase-11">交易状态查询</a></li>
+                    <li><a href="#tabs-purchase-12">消费撤销</a></li>
+                    <li><a href="#tabs-purchase-13">退货</a></li>
+                    <li><a href="#tabs-purchase-14">对账文件下载</a></li>
+                    <li><a>网关支付产品-预授权</a></li>
+                    <li><a href="#tabs-purchase-20">跳转网关页面预授权</a></li>
+                    <li><a href="#tabs-purchase-21">预授权撤销</a></li>
+                    <li><a href="#tabs-purchase-22">预授权完成</a></li>
+                    <li><a href="#tabs-purchase-23">预授权完成撤销</a></li>
+                </ul>
+                <div id="tabs-purchase-1">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="AppConsume" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>qrNo:</label>
+                            <input type="text" name="qrNo" value="">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>txnAmt:</label>
+                            <input type="text" name="txnAmt" value="1" title="单位为分。">
+                        </p>
+                        <p>
+                            <label>currencyCode:</label>
+                            <input type="text" name="currencyCode" value="156">
+                        </p>
+                        <p>
+                            <label>backUrl:</label>
+                            <input type="text" name="backUrl" value="http://www.baidu.com/notify/unionpay/appconsume">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/help/qrcodeFormPage" target="_blank">二维码仿真</a>
+                        <br />
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=89&apiId=55" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-2">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="ApplyQrCode" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>txnAmt:</label>
+                            <input type="text" name="txnAmt" value="1" title="单位为分。">
+                        </p>
+                        <p>
+                            <label>currencyCode:</label>
+                            <input type="text" name="currencyCode" value="156">
+                        </p>
+                        <p>
+                            <label>backUrl:</label>
+                            <input type="text" name="backUrl" value="http://www.baidu.com/notify/unionpay/applyqrcode">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/help/qrcodeFormPage" target="_blank">二维码仿真</a>
+                        <br />
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=89&apiId=57" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-3">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="PurchaseUndo" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>txnAmt:</label>
+                            <input type="text" name="txnAmt" value="1" title="单位为分。">
+                        </p>
+                        <p>
+                            <label>origQryId:</label>
+                            <input type="text" name="origQryId" value="" />
+                        </p>
+                        <p>
+                            <label>origOrderId:</label>
+                            <input type="text" name="origOrderId" value="" />
+                        </p>
+                        <p>
+                            <label>origTxnTime:</label>
+                            <input type="text" name="origTxnTime" />
+                        </p>
+                        <p>
+                            <label>backUrl:</label>
+                            <input type="text" name="backUrl" value="http://www.baidu.com/notify/unionpay/purchaseundo">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=89&apiId=58" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-4">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="Refund" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>txnAmt:</label>
+                            <input type="text" name="txnAmt" value="1" title="单位为分。">
+                        </p>
+                        <p>
+                            <label>origQryId:</label>
+                            <input type="text" name="origQryId" value="" />
+                        </p>
+                        <p>
+                            <label>origOrderId:</label>
+                            <input type="text" name="origOrderId" value="" />
+                        </p>
+
+                        <p>
+                            <label>origTxnTime:</label>
+                            <input type="text" name="origTxnTime" />
+                        </p>
+                        <p>
+                            <label>backUrl:</label>
+                            <input type="text" name="backUrl" value="http://www.baidu.com/notify/unionpay/refund">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=89&apiId=59" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-5">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="Query563" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=89&apiId=60" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-6">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="FileTransfer057" method="post" target="_blank">
+                        <p>
+                            <label>fileType:</label>
+                            <input type="text" name="fileType" value="00">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>settleDate:</label>
+                            <input type="text" name="settleDate" value="0119">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=89&apiId=61" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-10">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="FrontConsume62" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>txnAmt:</label>
+                            <input type="text" name="txnAmt" value="1" title="单位为分。">
+                        </p>
+                        <p>
+                            <label>currencyCode:</label>
+                            <input type="text" name="currencyCode" value="156">
+                        </p>
+                        <p>
+                            <label>payTimeout:</label>
+                            <input type="text" name="payTimeout" value="@DateTime.Now.AddMinutes(15).ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>frontUrl:</label>
+                            <input type="text" name="frontUrl" value="http://www.baidu.com/unionpay/frontconsume62return">
+                        </p>
+                        <p>
+                            <label>backUrl:</label>
+                            <input type="text" name="backUrl" value="http://www.baidu.com/notify/unionpay/frontconsume62">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=1&apiId=63" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-11">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="Query65" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=1&apiId=66" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-12">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="ConsumeUndo63" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>txnAmt:</label>
+                            <input type="text" name="txnAmt" value="1" title="单位为分。">
+                        </p>
+                        <p>
+                            <label>origQryId:</label>
+                            <input type="text" name="origQryId" value="" />
+                        </p>
+                        <p>
+                            <label>backUrl:</label>
+                            <input type="text" name="backUrl" value="http://www.baidu.com/notify/unionpay/consumeundo63">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=1&apiId=64" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-13">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="Refund64" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>txnAmt:</label>
+                            <input type="text" name="txnAmt" value="1" title="单位为分。">
+                        </p>
+                        <p>
+                            <label>origQryId:</label>
+                            <input type="text" name="origQryId" value="" />
+                        </p>
+                        <p>
+                            <label>backUrl:</label>
+                            <input type="text" name="backUrl" value="http://www.baidu.com/notify/unionpay/refund64">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=1&apiId=65" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-14">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="FileTransfer66" method="post" target="_blank">
+                        <p>
+                            <label>fileType:</label>
+                            <input type="text" name="fileType" value="00">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>settleDate:</label>
+                            <input type="text" name="settleDate" value="0119">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=89&apiId=61" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-20">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="AuthDealFront671" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>txnAmt:</label>
+                            <input type="text" name="txnAmt" value="1" title="单位为分。">
+                        </p>
+                        <p>
+                            <label>currencyCode:</label>
+                            <input type="text" name="currencyCode" value="156">
+                        </p>
+                        <p>
+                            <label>payTimeout:</label>
+                            <input type="text" name="payTimeout" value="@DateTime.Now.AddMinutes(15).ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>frontUrl:</label>
+                            <input type="text" name="frontUrl" value="http://www.baidu.com/unionpay/authdealfront671return">
+                        </p>
+                        <p>
+                            <label>backUrl:</label>
+                            <input type="text" name="backUrl" value="http://www.baidu.com/notify/unionpay/authdealfront671">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=1&apiId=68" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-21">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="AuthUndo672" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>txnAmt:</label>
+                            <input type="text" name="txnAmt" value="1" title="单位为分。">
+                        </p>
+                        <p>
+                            <label>origQryId:</label>
+                            <input type="text" name="origQryId" value="" />
+                        </p>
+                        <p>
+                            <label>backUrl:</label>
+                            <input type="text" name="backUrl" value="http://www.baidu.com/notify/unionpay/authundo672">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=1&apiId=69" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-22">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="AuthFinish673" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>txnAmt:</label>
+                            <input type="text" name="txnAmt" value="1" title="单位为分。">
+                        </p>
+                        <p>
+                            <label>origQryId:</label>
+                            <input type="text" name="origQryId" value="" />
+                        </p>
+                        <p>
+                            <label>backUrl:</label>
+                            <input type="text" name="backUrl" value="http://www.baidu.com/notify/unionpay/authfinish673">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=1&apiId=70" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+                <div id="tabs-purchase-23">
+                    <form class="api-form" asp-controller="UnionPay" asp-action="AuthFinishUndo674" method="post" target="_blank">
+                        <p>
+                            <label>orderId:</label>
+                            <input type="text" name="orderId" value="@DateTime.Now.ToString("yyyyMMddHHmmssfff")">
+                        </p>
+                        <p>
+                            <label>txnTime:</label>
+                            <input type="text" name="txnTime" value="@DateTime.Now.ToString("yyyyMMddHHmmss")">
+                        </p>
+                        <p>
+                            <label>txnAmt:</label>
+                            <input type="text" name="txnAmt" value="1" title="单位为分。">
+                        </p>
+                        <p>
+                            <label>origQryId:</label>
+                            <input type="text" name="origQryId" value="" />
+                        </p>
+                        <p>
+                            <label>backUrl:</label>
+                            <input type="text" name="backUrl" value="http://www.baidu.com/notify/unionpay/authfinishundo674">
+                        </p>
+                        <p>
+                            <label>&nbsp;</label>
+                            <input type="submit" class="button" value="提交">
+                        </p>
+                    </form>
+                    <hr />
+                    <p class="faq">
+                        <a href="https://open.unionpay.com/ajweb/product/newProApiShow?proId=1&apiId=71" target="_blank">* 查看接口 请求参数、响应参数</a>
+                    </p>
+                </div>
+            </div>
+        </div>
     </div>
+</div>
 
 </div>
 @section Scripts {

+ 4 - 11
samples/WebApplicationSample/WebApplicationSample.csproj

@@ -3,9 +3,8 @@
   <PropertyGroup>
     <TargetFramework>netcoreapp2.0</TargetFramework>
     <UserSecretsId>a59ca38e-9b52-44fe-b3d2-8cb5a1641623</UserSecretsId>
-    <Version>1.0.1</Version>
-    <AssemblyVersion>1.0.0.1</AssemblyVersion>
-    <FileVersion>1.0.0.1</FileVersion>
+    <Version>1.1.0</Version>
+    <GeneratePackageOnBuild>false</GeneratePackageOnBuild>
   </PropertyGroup>
 
   <ItemGroup>
@@ -13,17 +12,11 @@
   </ItemGroup>
 
   <ItemGroup>
-    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
-    <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
+    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.2" />
   </ItemGroup>
 
   <ItemGroup>
-    <ProjectReference Include="..\..\src\Essensoft.AspNetCore.Alipay\Essensoft.AspNetCore.Alipay.csproj" />
-    <ProjectReference Include="..\..\src\Essensoft.AspNetCore.JdPay\Essensoft.AspNetCore.JdPay.csproj" />
-    <ProjectReference Include="..\..\src\Essensoft.AspNetCore.QPay\Essensoft.AspNetCore.QPay.csproj" />
-    <ProjectReference Include="..\..\src\Essensoft.AspNetCore.WeChatPay\Essensoft.AspNetCore.WeChatPay.csproj" />
+    <ProjectReference Include="..\..\src\Essensoft.AspNetCore.Payment\Essensoft.AspNetCore.Payment.csproj" />
   </ItemGroup>
 
-  <ProjectExtensions><VisualStudio><UserProperties /></VisualStudio></ProjectExtensions>
-
 </Project>

+ 2 - 9
samples/WebApplicationSample/appsettings.json

@@ -1,15 +1,8 @@
 {
   "Logging": {
     "IncludeScopes": false,
-    "Debug": {
-      "LogLevel": {
-        "Default": "Warning"
-      }
-    },
-    "Console": {
-      "LogLevel": {
-        "Default": "Warning"
-      }
+    "LogLevel": {
+      "Default": "Warning"
     }
   }
 }

+ 1 - 0
samples/WebApplicationSample/wwwroot/demo.js

@@ -4,6 +4,7 @@ $(function () {
     setApiDemoTabs("#tabs-purchase-wechatpay");
     setApiDemoTabs("#tabs-purchase-qpay");
     setApiDemoTabs("#tabs-purchase-jdpay");
+    setApiDemoTabs("#tabs-purchase-unionpay");
     $(document).tooltip();
 });
 

+ 43 - 31
src/Essensoft.AspNetCore.Alipay/AlipayClient.cs

@@ -5,6 +5,7 @@ using Microsoft.Extensions.Options;
 using Newtonsoft.Json;
 using System;
 using System.Collections.Generic;
+using System.Security.Cryptography;
 using System.Text;
 using System.Threading.Tasks;
 
@@ -33,50 +34,61 @@ namespace Essensoft.AspNetCore.Alipay
         private const string APP_AUTH_TOKEN = "app_auth_token";
         private const string RETURN_URL = "return_url";
 
+        private RSAParameters RSAPrivateParameters;
+        private RSAParameters RSAPublicParameters;
+
         public AlipayOptions Options { get; set; }
 
         protected internal HttpClientEx Client { get; set; }
 
         #region AlipayClient Constructors
 
-        public AlipayClient(IOptions<AlipayOptions> optionsAccessor)
+        public AlipayClient(AlipayOptions options)
         {
-            Options = optionsAccessor?.Value ?? new AlipayOptions();
+            Options = options;
             Client = new HttpClientEx();
+
+            if (!string.IsNullOrEmpty(Options.RsaPrivateKey))
+            {
+                RSAPrivateParameters = AlipaySignature.GetPrivateParameters(Options.RsaPrivateKey);
+            }
+
+            if (!string.IsNullOrEmpty(Options.RsaPublicKey))
+            {
+                RSAPublicParameters = AlipaySignature.GetPublicParameters(Options.RsaPublicKey);
+            }
+        }
+
+        public AlipayClient(IOptions<AlipayOptions> optionsAccessor)
+            : this(optionsAccessor?.Value ?? new AlipayOptions())
+        {
         }
 
         public AlipayClient(string serverUrl, string appId, string privateKey)
-            : this(null)
+            : this(new AlipayOptions { AppId = appId, RsaPrivateKey = privateKey, ServerUrl = serverUrl })
         {
-            Options.AppId = appId;
-            Options.RsaPrivateKey = privateKey;
-            Options.ServerUrl = serverUrl;
+
         }
 
         public AlipayClient(string serverUrl, string appId, string privateKey, string format)
-            : this(serverUrl, appId, privateKey)
+            : this(new AlipayOptions { ServerUrl = serverUrl, AppId = appId, RsaPrivateKey = privateKey, Format = format })
         {
-            Options.Format = format;
         }
 
         public AlipayClient(string serverUrl, string appId, string privateKey, string format, string version, string signType)
-            : this(serverUrl, appId, privateKey, format)
+            : this(new AlipayOptions { ServerUrl = serverUrl, AppId = appId, RsaPrivateKey = privateKey, Format = format, Version = version, SignType = signType })
         {
-            Options.Version = version;
-            Options.SignType = signType;
         }
 
-        public AlipayClient(string serverUrl, string appId, string privateKey, string format, string version, string signType, string alipayPulicKey)
-            : this(serverUrl, appId, privateKey, format, version, signType)
+        public AlipayClient(string serverUrl, string appId, string privateKey, string format, string version, string signType, string publicKey)
+            : this(new AlipayOptions { ServerUrl = serverUrl, AppId = appId, RsaPrivateKey = privateKey, Format = format, Version = version, SignType = signType, RsaPublicKey = publicKey })
         {
-            Options.RsaPublicKey = alipayPulicKey;
         }
 
-        public AlipayClient(string serverUrl, string appId, string privateKey, string format, string version, string signType, string alipayPulicKey, string encyptKey)
-            : this(serverUrl, appId, privateKey, format, version, signType, alipayPulicKey)
+
+        public AlipayClient(string serverUrl, string appId, string privateKey, string format, string version, string signType, string publicKey, string encyptKey)
+            : this(new AlipayOptions { ServerUrl = serverUrl, AppId = appId, RsaPrivateKey = privateKey, Format = format, Version = version, SignType = signType, RsaPublicKey = publicKey, EncyptKey = encyptKey, EncyptType = "AES" })
         {
-            Options.EncyptKey = encyptKey;
-            Options.EncyptType = "AES";
         }
 
         public void SetTimeout(int timeout)
@@ -146,7 +158,7 @@ namespace Essensoft.AspNetCore.Alipay
             };
 
             // 添加签名参数
-            txtParams.Add(SIGN, AlipaySignature.RSASign(txtParams, Options.RsaPrivateKey, Options.SignType));
+            txtParams.Add(SIGN, AlipaySignature.RSASign(txtParams, RSAPrivateParameters, Options.SignType));
 
             // 是否需要上传文件
             string body;
@@ -159,7 +171,7 @@ namespace Essensoft.AspNetCore.Alipay
             else
             {
 
-                if (reqMethod.Equals("GET"))
+                if (reqMethod == "GET")
                 {
                     //拼接get请求的url
                     var tmpUrl = Options.ServerUrl;
@@ -179,7 +191,7 @@ namespace Essensoft.AspNetCore.Alipay
                 else
                 {
                     //输出post表单
-                    body = BuildHtmlRequest(txtParams, reqMethod, reqMethod);
+                    body = BuildHtmlRequest(txtParams, reqMethod);
                 }
             }
 
@@ -199,7 +211,7 @@ namespace Essensoft.AspNetCore.Alipay
 
         public async Task<T> ExecuteAsync<T>(IAlipayRequest<T> request, string accessToken, string appAuthToken) where T : AlipayResponse
         {
-            string apiVersion = null;
+            var apiVersion = string.Empty;
 
             if (!string.IsNullOrEmpty(request.GetApiVersion()))
             {
@@ -263,7 +275,7 @@ namespace Essensoft.AspNetCore.Alipay
             }
 
             // 添加签名参数
-            txtParams.Add(SIGN, AlipaySignature.RSASign(txtParams, Options.RsaPrivateKey, Options.SignType));
+            txtParams.Add(SIGN, AlipaySignature.RSASign(txtParams, RSAPrivateParameters, Options.SignType));
 
             // 是否需要上传文件
             string body;
@@ -288,7 +300,7 @@ namespace Essensoft.AspNetCore.Alipay
 
             rsp = parser.Parse(item.realContent);
 
-            CheckResponseSign(request, item.respContent, rsp.IsError, parser, Options.RsaPublicKey, Options.SignType);
+            CheckResponseSign(request, item.respContent, rsp.IsError, parser, RSAPublicParameters, Options.SignType);
 
             return rsp;
 
@@ -316,7 +328,7 @@ namespace Essensoft.AspNetCore.Alipay
 
         }
 
-        private void CheckResponseSign<T>(IAlipayRequest<T> request, string responseBody, bool isError, IAlipayParser<T> parser, string alipayPublicKey, string signType) where T : AlipayResponse
+        private void CheckResponseSign<T>(IAlipayRequest<T> request, string responseBody, bool isError, IAlipayParser<T> parser, RSAParameters parameters, string signType) where T : AlipayResponse
         {
             var signItem = parser.GetSignItem(request, responseBody);
             if (signItem == null)
@@ -326,13 +338,13 @@ namespace Essensoft.AspNetCore.Alipay
 
             if (!isError || (isError && !string.IsNullOrEmpty(signItem.Sign)))
             {
-                var rsaCheckContent = AlipaySignature.RSACheckContent(signItem.SignSourceDate, signItem.Sign, alipayPublicKey, signType);
+                var rsaCheckContent = AlipaySignature.RSACheckContent(signItem.SignSourceDate, signItem.Sign, parameters, signType);
                 if (!rsaCheckContent)
                 {
                     if (!string.IsNullOrEmpty(signItem.SignSourceDate) && signItem.SignSourceDate.Contains("\\/"))
                     {
                         var srouceData = signItem.SignSourceDate.Replace("\\/", "/");
-                        var jsonCheck = AlipaySignature.RSACheckContent(srouceData, signItem.Sign, alipayPublicKey, signType);
+                        var jsonCheck = AlipaySignature.RSACheckContent(srouceData, signItem.Sign, parameters, signType);
                         if (!jsonCheck)
                         {
                             throw new AlipayException("sign check fail: check Sign and Data Fail JSON also");
@@ -350,7 +362,7 @@ namespace Essensoft.AspNetCore.Alipay
         #endregion
 
         #region IAlipayClient Members
-        public string BuildHtmlRequest(IDictionary<string, string> sParaTemp, string strMethod, string strButtonValue)
+        public string BuildHtmlRequest(IDictionary<string, string> sParaTemp, string strMethod)
         {
             //待请求参数数组
             var dicPara = new Dictionary<string, string>(sParaTemp);
@@ -363,7 +375,7 @@ namespace Essensoft.AspNetCore.Alipay
             {
                 sbHtml.Append("<input  name='" + temp.Key + "' value='" + temp.Value + "'/>");
             }
-            sbHtml.Append("<input type='submit' value='" + strButtonValue + "' style='display:none;'></form>");
+            sbHtml.Append("<input type='submit' style='display:none;'></form>");
             //表单实现自动提交
             sbHtml.Append("<script>document.forms['alipaysubmit'].submit();</script>");
 
@@ -383,7 +395,7 @@ namespace Essensoft.AspNetCore.Alipay
             var sortedAlipayDic = new AlipayDictionary(sortedParams);
 
             // 参数签名
-            var signResult = AlipaySignature.RSASign(sortedAlipayDic, Options.RsaPrivateKey, Options.SignType);
+            var signResult = AlipaySignature.RSASign(sortedAlipayDic, RSAPrivateParameters, Options.SignType);
 
             // 添加签名结果参数
             sortedAlipayDic.Add(SIGN, signResult);
@@ -392,7 +404,7 @@ namespace Essensoft.AspNetCore.Alipay
             var signedResult = HttpClientEx.BuildQuery(sortedAlipayDic);
 
             // 构造结果
-            var rsp = (T)Activator.CreateInstance(typeof(T));
+            var rsp = Activator.CreateInstance<T>();
             rsp.Body = signedResult;
             return Task.FromResult(rsp);
         }

+ 4 - 13
src/Essensoft.AspNetCore.Alipay/AlipayException.cs

@@ -7,9 +7,6 @@ namespace Essensoft.AspNetCore.Alipay
     /// </summary>
     public class AlipayException : Exception
     {
-        private string errorCode;
-        private string errorMsg;
-
         public AlipayException()
             : base()
         {
@@ -28,18 +25,12 @@ namespace Essensoft.AspNetCore.Alipay
         public AlipayException(string errorCode, string errorMsg)
             : base(errorCode + ":" + errorMsg)
         {
-            this.errorCode = errorCode;
-            this.errorMsg = errorMsg;
+            ErrorCode = errorCode;
+            ErrorMsg = errorMsg;
         }
 
-        public string ErrorCode
-        {
-            get { return errorCode; }
-        }
+        public string ErrorCode { get; }
 
-        public string ErrorMsg
-        {
-            get { return errorMsg; }
-        }
+        public string ErrorMsg { get; }
     }
 }

+ 31 - 26
src/Essensoft.AspNetCore.Alipay/AlipayMobilePublicMultiMediaClient.cs

@@ -6,24 +6,27 @@ using Microsoft.Extensions.Options;
 using System;
 using System.IO;
 using System.Net;
+using System.Security.Cryptography;
 using System.Threading.Tasks;
 
 namespace Essensoft.AspNetCore.Alipay
 {
     public class AlipayMobilePublicMultiMediaClient : IAlipayClient
     {
-        public const string APP_ID = "app_id";
-        public const string FORMAT = "format";
-        public const string METHOD = "method";
-        public const string TIMESTAMP = "timestamp";
-        public const string VERSION = "version";
-        public const string SIGN_TYPE = "sign_type";
-        public const string ACCESS_TOKEN = "auth_token";
-        public const string SIGN = "sign";
-        public const string TERMINAL_TYPE = "terminal_type";
-        public const string TERMINAL_INFO = "terminal_info";
-        public const string PROD_CODE = "prod_code";
-        public const string APP_AUTH_TOKEN = "app_auth_token";
+        private const string APP_ID = "app_id";
+        private const string FORMAT = "format";
+        private const string METHOD = "method";
+        private const string TIMESTAMP = "timestamp";
+        private const string VERSION = "version";
+        private const string SIGN_TYPE = "sign_type";
+        private const string ACCESS_TOKEN = "auth_token";
+        private const string SIGN = "sign";
+        private const string TERMINAL_TYPE = "terminal_type";
+        private const string TERMINAL_INFO = "terminal_info";
+        private const string PROD_CODE = "prod_code";
+        private const string APP_AUTH_TOKEN = "app_auth_token";
+
+        private RSAParameters RSAPrivateParameters;
 
         public AlipayOptions Options { get; set; }
 
@@ -31,31 +34,35 @@ namespace Essensoft.AspNetCore.Alipay
 
         #region AlipayClient Constructors
 
-        public AlipayMobilePublicMultiMediaClient(IOptions<AlipayOptions> optionsAccessor)
+        public AlipayMobilePublicMultiMediaClient(AlipayOptions options)
         {
-            Options = optionsAccessor?.Value ?? new AlipayOptions();
+            Options = options;
             Client = new HttpClientEx();
+
+            if (!string.IsNullOrEmpty(Options.RsaPrivateKey))
+            {
+                RSAPrivateParameters = AlipaySignature.GetPrivateParameters(Options.RsaPrivateKey);
+            }
+        }
+
+        public AlipayMobilePublicMultiMediaClient(IOptions<AlipayOptions> optionsAccessor)
+            : this(optionsAccessor?.Value ?? new AlipayOptions())
+        {
         }
 
         public AlipayMobilePublicMultiMediaClient(string serverUrl, string appId, string privateKey)
-            : this(null)
+        : this(new AlipayOptions { AppId = appId, RsaPrivateKey = privateKey, ServerUrl = serverUrl })
         {
-            Options.AppId = appId;
-            Options.RsaPrivateKey = privateKey;
-            Options.ServerUrl = serverUrl;
         }
 
         public AlipayMobilePublicMultiMediaClient(string serverUrl, string appId, string privateKey, string format)
-            : this(serverUrl, appId, privateKey)
+            : this(new AlipayOptions { AppId = appId, RsaPrivateKey = privateKey, ServerUrl = serverUrl, Format = format })
         {
-            Options.Format = format;
         }
 
         public AlipayMobilePublicMultiMediaClient(string serverUrl, string appId, string privateKey, string format, string version, string signType)
-            : this(serverUrl, appId, privateKey, format)
+            : this(new AlipayOptions { AppId = appId, RsaPrivateKey = privateKey, ServerUrl = serverUrl, Format = format, Version = version, SignType = signType })
         {
-            Options.Version = version;
-            Options.SignType = signType;
         }
 
         public void SetTimeout(int timeout)
@@ -103,13 +110,11 @@ namespace Essensoft.AspNetCore.Alipay
             }
 
             // 添加签名参数
-            txtParams.Add(SIGN, AlipaySignature.RSASign(txtParams, Options.RsaPrivateKey, Options.SignType));
+            txtParams.Add(SIGN, AlipaySignature.RSASign(txtParams, RSAPrivateParameters, Options.SignType));
 
             var outStream = multiMediaDownloadRequest.Stream;
             var rsp = await DoGetAsync(txtParams, outStream);
-
             return (T)rsp;
-
         }
 
         #endregion

+ 1 - 1
src/Essensoft.AspNetCore.Alipay/AlipayMobilePublicMultiMediaDownloadRequest.cs

@@ -8,7 +8,7 @@ namespace Essensoft.AspNetCore.Alipay.Request
     {
 
         public string BizContent { get; set; }
-        public Stream Stream { set; get; }
+        public Stream Stream { get; set; }
 
         #region IAlipayRequest Members
 

+ 28 - 15
src/Essensoft.AspNetCore.Alipay/AlipayNotifyClient.cs

@@ -3,33 +3,46 @@ using Essensoft.AspNetCore.Alipay.Utility;
 using Microsoft.AspNetCore.Http;
 using Microsoft.Extensions.Options;
 using System.Collections.Generic;
+using System.Security.Cryptography;
 using System.Text;
+using System.Threading.Tasks;
 
 namespace Essensoft.AspNetCore.Alipay
 {
     public class AlipayNotifyClient
     {
+        private RSAParameters RSAPublicParameters;
+
         public AlipayOptions Options { get; set; }
+
+        public AlipayNotifyClient(AlipayOptions options)
+        {
+            Options = options;
+
+            if (!string.IsNullOrEmpty(Options.RsaPublicKey))
+            {
+                RSAPublicParameters = AlipaySignature.GetPublicParameters(Options.RsaPublicKey);
+            }
+        }
+
         public AlipayNotifyClient(IOptions<AlipayOptions> optionsAccessor)
+            : this(optionsAccessor?.Value ?? new AlipayOptions())
         {
-            Options = optionsAccessor?.Value ?? new AlipayOptions();
         }
 
-        public AlipayNotifyClient(string signType, string alipayPublicKey)
-            : this(null)
+        public AlipayNotifyClient(string signType, string publicKey)
+            : this(new AlipayOptions { SignType = signType, RsaPublicKey = publicKey })
         {
-            Options.SignType = signType;
-            Options.RsaPublicKey = alipayPublicKey;
         }
 
-        public T Execute<T>(HttpRequest request) where T : AlipayObject
+        public Task<T> ExecuteAsync<T>(HttpRequest request) where T : AlipayNotifyResponse
         {
             var parameters = GetParameters(request);
             var parser = new AlipayDictionaryParser<T>();
             var rsp = parser.Parse(parameters);
 
-            CheckNotifySign(parameters, Options.RsaPublicKey, Options.SignType);
-            return rsp;
+            CheckNotifySign(parameters, RSAPublicParameters, Options.SignType);
+            return Task.FromResult(rsp);
         }
 
         private SortedDictionary<string, string> GetParameters(HttpRequest request)
@@ -37,12 +50,12 @@ namespace Essensoft.AspNetCore.Alipay
             var parameters = new SortedDictionary<string, string>();
             if (request.Method == "POST")
             {
-                foreach (var item in request?.Form)
+                foreach (var item in request.Form)
                 {
                     parameters.Add(item.Key, item.Value);
                 }
             }
-            else if (request.Method == "GET")
+            else
             {
                 foreach (var item in request?.Query)
                 {
@@ -52,21 +65,21 @@ namespace Essensoft.AspNetCore.Alipay
             return parameters;
         }
 
-        private void CheckNotifySign(IDictionary<string, string> parameters, string alipayPublicKey, string signType)
+        private void CheckNotifySign(IDictionary<string, string> content, RSAParameters parameters, string signType)
         {
-            if (parameters.Count == 0)
+            if (content.Count == 0)
             {
                 throw new AlipayException("sign check fail: Body is Empty!");
             }
 
-            var sign = parameters["sign"];
+            var sign = content["sign"];
             if (string.IsNullOrEmpty(sign))
             {
                 throw new AlipayException("sign check fail: sign is Empty!");
             }
 
-            var prestr = GetSignContent(parameters);
-            if (!AlipaySignature.RSACheckContent(prestr, sign, alipayPublicKey, signType))
+            var prestr = GetSignContent(content);
+            if (!AlipaySignature.RSACheckContent(prestr, sign, parameters, signType))
             {
                 throw new AlipayException("sign check fail: check Sign and Data Fail JSON also");
             }

+ 6 - 0
src/Essensoft.AspNetCore.Alipay/AlipayNotifyResponse.cs

@@ -0,0 +1,6 @@
+namespace Essensoft.AspNetCore.Alipay
+{
+    public abstract class AlipayNotifyResponse : AlipayObject
+    {
+    }
+}

+ 1 - 1
src/Essensoft.AspNetCore.Alipay/AlipayOptions.cs

@@ -11,7 +11,7 @@
         /// 支付宝公钥
         /// </summary>
         public string RsaPublicKey { get; set; }
-        
+
         /// <summary>
         /// 商户私钥
         /// </summary>

+ 6 - 38
src/Essensoft.AspNetCore.Alipay/AlipayResponse.cs

@@ -2,78 +2,46 @@
 
 namespace Essensoft.AspNetCore.Alipay
 {
-
     public abstract class AlipayResponse
     {
-        private string code;
-        private string msg;
-        private string subCode;
-        private string subMsg;
-        private string sign;
-        private string body;
-
         /// <summary>
         /// 错误码
         /// 对应 ErrCode
         /// </summary>
         [JsonProperty("code")]
-        public string Code
-        {
-            get { return code; }
-            set { code = value; }
-        }
+        public string Code { get; set; }
 
         /// <summary>
         /// 错误信息
         /// 对应 ErrMsg
         /// </summary>
         [JsonProperty("msg")]
-        public string Msg
-        {
-            get { return msg; }
-            set { msg = value; }
-        }
+        public string Msg { get; set; }
 
         /// <summary>
         /// 子错误码
         /// 对应 SubErrCode
         /// </summary>
         [JsonProperty("sub_code")]
-        public string SubCode
-        {
-            get { return subCode; }
-            set { subCode = value; }
-        }
+        public string SubCode { get; set; }
 
         /// <summary>
         /// 子错误信息
         /// 对应 SubErrMsg
         /// </summary>
         [JsonProperty("sub_msg")]
-        public string SubMsg
-        {
-            get { return subMsg; }
-            set { subMsg = value; }
-        }
+        public string SubMsg { get; set; }
 
         /// <summary>
         /// 签名
         /// </summary>
         [JsonProperty("sign")]
-        public string Sign
-        {
-            get { return sign; }
-            set { sign = value; }
-        }
+        public string Sign { get; set; }
 
         /// <summary>
         /// 响应原始内容
         /// </summary>
-        public string Body
-        {
-            get { return body; }
-            set { body = value; }
-        }
+        public string Body { get; set; }
 
         /// <summary>
         /// 响应结果是否错误

+ 46 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AccessOrdersFeedBackResult.cs

@@ -0,0 +1,46 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AccessOrdersFeedBackResult Data Structure.
+    /// </summary>
+    public class AccessOrdersFeedBackResult : AlipayObject
+    {
+        /// <summary>
+        /// 错误码
+        /// </summary>
+        [JsonProperty("error_code")]
+        public string ErrorCode { get; set; }
+
+        /// <summary>
+        /// 错误描述
+        /// </summary>
+        [JsonProperty("error_desc")]
+        public string ErrorDesc { get; set; }
+
+        /// <summary>
+        /// 反馈主键ID(生产单ID或者采购单ID或者码token)
+        /// </summary>
+        [JsonProperty("feedback_id")]
+        public string FeedbackId { get; set; }
+
+        /// <summary>
+        /// 生产单:PRODUCE_ORDER  采购单:PURCHASE_ORDER  二维码:QRCODE
+        /// </summary>
+        [JsonProperty("order_type")]
+        public string OrderType { get; set; }
+
+        /// <summary>
+        /// 外部单据号
+        /// </summary>
+        [JsonProperty("out_biz_no")]
+        public string OutBizNo { get; set; }
+
+        /// <summary>
+        /// 每条记录处理结果
+        /// </summary>
+        [JsonProperty("success")]
+        public bool Success { get; set; }
+    }
+}

+ 64 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AccessProduceOrder.cs

@@ -0,0 +1,64 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AccessProduceOrder Data Structure.
+    /// </summary>
+    public class AccessProduceOrder : AlipayObject
+    {
+        /// <summary>
+        /// 口碑码批次号
+        /// </summary>
+        [JsonProperty("batch_id")]
+        public string BatchId { get; set; }
+
+        /// <summary>
+        /// 生产单标识
+        /// </summary>
+        [JsonProperty("produce_order_id")]
+        public string ProduceOrderId { get; set; }
+
+        /// <summary>
+        /// 生产数量
+        /// </summary>
+        [JsonProperty("produce_quantity")]
+        public long ProduceQuantity { get; set; }
+
+        /// <summary>
+        /// 物料属性名称
+        /// </summary>
+        [JsonProperty("stuff_attr_name")]
+        public string StuffAttrName { get; set; }
+
+        /// <summary>
+        /// 物料材质
+        /// </summary>
+        [JsonProperty("stuff_material")]
+        public string StuffMaterial { get; set; }
+
+        /// <summary>
+        /// 物料尺寸
+        /// </summary>
+        [JsonProperty("stuff_size")]
+        public string StuffSize { get; set; }
+
+        /// <summary>
+        /// 物料类型
+        /// </summary>
+        [JsonProperty("stuff_type")]
+        public string StuffType { get; set; }
+
+        /// <summary>
+        /// 模板唯一标识
+        /// </summary>
+        [JsonProperty("template_id")]
+        public string TemplateId { get; set; }
+
+        /// <summary>
+        /// 模板名称
+        /// </summary>
+        [JsonProperty("template_name")]
+        public string TemplateName { get; set; }
+    }
+}

+ 34 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AccessProduceQrcode.cs

@@ -0,0 +1,34 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AccessProduceQrcode Data Structure.
+    /// </summary>
+    public class AccessProduceQrcode : AlipayObject
+    {
+        /// <summary>
+        /// 口碑码批次号
+        /// </summary>
+        [JsonProperty("batch_id")]
+        public string BatchId { get; set; }
+
+        /// <summary>
+        /// 码url
+        /// </summary>
+        [JsonProperty("core_url")]
+        public string CoreUrl { get; set; }
+
+        /// <summary>
+        /// 生产单号
+        /// </summary>
+        [JsonProperty("produce_order_id")]
+        public string ProduceOrderId { get; set; }
+
+        /// <summary>
+        /// 二维码编码
+        /// </summary>
+        [JsonProperty("qrcode")]
+        public string Qrcode { get; set; }
+    }
+}

+ 124 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AccessPurchaseOrder.cs

@@ -0,0 +1,124 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AccessPurchaseOrder Data Structure.
+    /// </summary>
+    public class AccessPurchaseOrder : AlipayObject
+    {
+        /// <summary>
+        /// 申请日期, 格式:  yyyy-MM-dd HH:mm:ss
+        /// </summary>
+        [JsonProperty("apply_date")]
+        public string ApplyDate { get; set; }
+
+        /// <summary>
+        /// 申请订单明细号
+        /// </summary>
+        [JsonProperty("asset_item_id")]
+        public string AssetItemId { get; set; }
+
+        /// <summary>
+        /// 申请订单号
+        /// </summary>
+        [JsonProperty("asset_order_id")]
+        public string AssetOrderId { get; set; }
+
+        /// <summary>
+        /// 采购单号(订单汇总表ID)
+        /// </summary>
+        [JsonProperty("asset_purchase_id")]
+        public string AssetPurchaseId { get; set; }
+
+        /// <summary>
+        /// 市
+        /// </summary>
+        [JsonProperty("city")]
+        public string City { get; set; }
+
+        /// <summary>
+        /// 数量
+        /// </summary>
+        [JsonProperty("count")]
+        public string Count { get; set; }
+
+        /// <summary>
+        /// 订单创建日期, 格式: yyyy-MM-dd HH:mm:ss
+        /// </summary>
+        [JsonProperty("create_date")]
+        public string CreateDate { get; set; }
+
+        /// <summary>
+        /// 区
+        /// </summary>
+        [JsonProperty("district")]
+        public string District { get; set; }
+
+        /// <summary>
+        /// 是否需要生产
+        /// </summary>
+        [JsonProperty("is_produce")]
+        public string IsProduce { get; set; }
+
+        /// <summary>
+        /// 省
+        /// </summary>
+        [JsonProperty("province")]
+        public string Province { get; set; }
+
+        /// <summary>
+        /// 收货人地址
+        /// </summary>
+        [JsonProperty("receiver_address")]
+        public string ReceiverAddress { get; set; }
+
+        /// <summary>
+        /// 联系人电话
+        /// </summary>
+        [JsonProperty("receiver_mobile")]
+        public string ReceiverMobile { get; set; }
+
+        /// <summary>
+        /// 收货人姓名
+        /// </summary>
+        [JsonProperty("receiver_name")]
+        public string ReceiverName { get; set; }
+
+        /// <summary>
+        /// 物料类型
+        /// </summary>
+        [JsonProperty("stuff_attr_name")]
+        public string StuffAttrName { get; set; }
+
+        /// <summary>
+        /// 物料材质
+        /// </summary>
+        [JsonProperty("stuff_material")]
+        public string StuffMaterial { get; set; }
+
+        /// <summary>
+        /// 物料尺寸
+        /// </summary>
+        [JsonProperty("stuff_size")]
+        public string StuffSize { get; set; }
+
+        /// <summary>
+        /// 物料属性
+        /// </summary>
+        [JsonProperty("stuff_type")]
+        public string StuffType { get; set; }
+
+        /// <summary>
+        /// 模板ID
+        /// </summary>
+        [JsonProperty("template_id")]
+        public string TemplateId { get; set; }
+
+        /// <summary>
+        /// 模板名称,线下约定的物料名
+        /// </summary>
+        [JsonProperty("template_name")]
+        public string TemplateName { get; set; }
+    }
+}

+ 52 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AccessPurchaseOrderSendResult.cs

@@ -0,0 +1,52 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AccessPurchaseOrderSendResult Data Structure.
+    /// </summary>
+    public class AccessPurchaseOrderSendResult : AlipayObject
+    {
+        /// <summary>
+        /// 申请单明细号
+        /// </summary>
+        [JsonProperty("asset_item_id")]
+        public string AssetItemId { get; set; }
+
+        /// <summary>
+        /// 申请单号
+        /// </summary>
+        [JsonProperty("asset_order_id")]
+        public string AssetOrderId { get; set; }
+
+        /// <summary>
+        /// 采购单ID
+        /// </summary>
+        [JsonProperty("asset_purchase_id")]
+        public string AssetPurchaseId { get; set; }
+
+        /// <summary>
+        /// 错误CODE
+        /// </summary>
+        [JsonProperty("error_code")]
+        public string ErrorCode { get; set; }
+
+        /// <summary>
+        /// 错误描述
+        /// </summary>
+        [JsonProperty("error_desc")]
+        public string ErrorDesc { get; set; }
+
+        /// <summary>
+        /// 外部单号(调用方业务主键标识)
+        /// </summary>
+        [JsonProperty("out_biz_no")]
+        public string OutBizNo { get; set; }
+
+        /// <summary>
+        /// 处理是否成功
+        /// </summary>
+        [JsonProperty("success")]
+        public bool Success { get; set; }
+    }
+}

+ 52 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AccessReturnQrcodeResult.cs

@@ -0,0 +1,52 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AccessReturnQrcodeResult Data Structure.
+    /// </summary>
+    public class AccessReturnQrcodeResult : AlipayObject
+    {
+        /// <summary>
+        /// 采购单ID
+        /// </summary>
+        [JsonProperty("asset_purchase_id")]
+        public string AssetPurchaseId { get; set; }
+
+        /// <summary>
+        /// 错误码
+        /// </summary>
+        [JsonProperty("error_code")]
+        public string ErrorCode { get; set; }
+
+        /// <summary>
+        /// 错误描述
+        /// </summary>
+        [JsonProperty("error_desc")]
+        public string ErrorDesc { get; set; }
+
+        /// <summary>
+        /// 物流单号
+        /// </summary>
+        [JsonProperty("express_no")]
+        public string ExpressNo { get; set; }
+
+        /// <summary>
+        /// 外部单号(调用方业务主键)
+        /// </summary>
+        [JsonProperty("out_biz_no")]
+        public string OutBizNo { get; set; }
+
+        /// <summary>
+        /// 二维码token值
+        /// </summary>
+        [JsonProperty("qrcode")]
+        public string Qrcode { get; set; }
+
+        /// <summary>
+        /// 处理结果(成功或失败)
+        /// </summary>
+        [JsonProperty("success")]
+        public bool Success { get; set; }
+    }
+}

+ 83 - 0
src/Essensoft.AspNetCore.Alipay/Domain/ActivityPlanInfo.cs

@@ -0,0 +1,83 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// ActivityPlanInfo Data Structure.
+    /// </summary>
+    public class ActivityPlanInfo : AlipayObject
+    {
+        /// <summary>
+        /// 平台活动结束时间
+        /// </summary>
+        [JsonProperty("activity_end_time")]
+        public string ActivityEndTime { get; set; }
+
+        /// <summary>
+        /// 平台活动开始时间
+        /// </summary>
+        [JsonProperty("activity_start_time")]
+        public string ActivityStartTime { get; set; }
+
+        /// <summary>
+        /// 招商结束时间
+        /// </summary>
+        [JsonProperty("confirm_end_time")]
+        public string ConfirmEndTime { get; set; }
+
+        /// <summary>
+        /// 平台活动邀约工单号(需要在第三方活动中回传)
+        /// </summary>
+        [JsonProperty("invite_order_id")]
+        public string InviteOrderId { get; set; }
+
+        /// <summary>
+        /// 规则描述
+        /// </summary>
+        [JsonProperty("plan_rule_list")]
+        public List<PlanRule> PlanRuleList { get; set; }
+
+        /// <summary>
+        /// 是个链接地址,下载后是pdf文件
+        /// </summary>
+        [JsonProperty("plat_activity_agreement")]
+        public string PlatActivityAgreement { get; set; }
+
+        /// <summary>
+        /// 平台活动id(需要在第三方方活动中回传)
+        /// </summary>
+        [JsonProperty("plat_activity_id")]
+        public string PlatActivityId { get; set; }
+
+        /// <summary>
+        /// 平台活动标签类型
+        /// </summary>
+        [JsonProperty("plat_activity_label_type")]
+        public string PlatActivityLabelType { get; set; }
+
+        /// <summary>
+        /// 平台活动名称
+        /// </summary>
+        [JsonProperty("plat_activity_name")]
+        public string PlatActivityName { get; set; }
+
+        /// <summary>
+        /// 活动规则描述
+        /// </summary>
+        [JsonProperty("plat_activity_rule_desc")]
+        public string PlatActivityRuleDesc { get; set; }
+
+        /// <summary>
+        /// 平台活动状态,GOING/FINISH,GOING表示招商中,FINISH表示招商已经结束(再报名活动也无法成功),只有GOING状态可以报名
+        /// </summary>
+        [JsonProperty("plat_activity_status")]
+        public string PlatActivityStatus { get; set; }
+
+        /// <summary>
+        /// 其他说明
+        /// </summary>
+        [JsonProperty("plat_other_desc")]
+        public string PlatOtherDesc { get; set; }
+    }
+}

+ 46 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AliTrustAlipayCert.cs

@@ -0,0 +1,46 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AliTrustAlipayCert Data Structure.
+    /// </summary>
+    public class AliTrustAlipayCert : AlipayObject
+    {
+        /// <summary>
+        /// 用户出生日期
+        /// </summary>
+        [JsonProperty("birthday")]
+        public string Birthday { get; set; }
+
+        /// <summary>
+        /// 点击支付宝实名认证图标之后的跳转链接
+        /// </summary>
+        [JsonProperty("forward_url")]
+        public string ForwardUrl { get; set; }
+
+        /// <summary>
+        /// 用户性别(M/F)
+        /// </summary>
+        [JsonProperty("gender")]
+        public string Gender { get; set; }
+
+        /// <summary>
+        /// 支付宝实名认证图标的链接地址
+        /// </summary>
+        [JsonProperty("icon_url")]
+        public string IconUrl { get; set; }
+
+        /// <summary>
+        /// 当账户为支付宝实名认证时,取值为"T";否则为"F".
+        /// </summary>
+        [JsonProperty("is_certified")]
+        public string IsCertified { get; set; }
+
+        /// <summary>
+        /// 用户姓名
+        /// </summary>
+        [JsonProperty("name")]
+        public string Name { get; set; }
+    }
+}

+ 40 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AliTrustCert.cs

@@ -0,0 +1,40 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AliTrustCert Data Structure.
+    /// </summary>
+    public class AliTrustCert : AlipayObject
+    {
+        /// <summary>
+        /// 点击信用认证图标之后的跳转链接
+        /// </summary>
+        [JsonProperty("forward_url")]
+        public string ForwardUrl { get; set; }
+
+        /// <summary>
+        /// 通过信用认证的图标链接
+        /// </summary>
+        [JsonProperty("icon_url")]
+        public string IconUrl { get; set; }
+
+        /// <summary>
+        /// 当通过信用认证时,取值为"T";否则为"F".
+        /// </summary>
+        [JsonProperty("is_certified")]
+        public string IsCertified { get; set; }
+
+        /// <summary>
+        /// 芝麻认证等级,取值为1,2,3
+        /// </summary>
+        [JsonProperty("level")]
+        public string Level { get; set; }
+
+        /// <summary>
+        /// 当用户未通过芝麻认证时给出的原因提示
+        /// </summary>
+        [JsonProperty("message")]
+        public string Message { get; set; }
+    }
+}

+ 16 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayAccountExrateCollectcoreDataSendModel.cs

@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayAccountExrateCollectcoreDataSendModel Data Structure.
+    /// </summary>
+    public class AlipayAccountExrateCollectcoreDataSendModel : AlipayObject
+    {
+        /// <summary>
+        /// 上数提交数据内容
+        /// </summary>
+        [JsonProperty("content")]
+        public string Content { get; set; }
+    }
+}

+ 41 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayAccountExratePricingNotifyModel.cs

@@ -0,0 +1,41 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayAccountExratePricingNotifyModel Data Structure.
+    /// </summary>
+    public class AlipayAccountExratePricingNotifyModel : AlipayObject
+    {
+        /// <summary>
+        /// 标识该汇率提供给哪个客户使用
+        /// </summary>
+        [JsonProperty("client_id")]
+        public string ClientId { get; set; }
+
+        /// <summary>
+        /// 源汇率机构
+        /// </summary>
+        [JsonProperty("inst")]
+        public string Inst { get; set; }
+
+        /// <summary>
+        /// 源汇率数据
+        /// </summary>
+        [JsonProperty("pricing_list")]
+        public List<PricingVO> PricingList { get; set; }
+
+        /// <summary>
+        /// 该汇率的使用场景
+        /// </summary>
+        [JsonProperty("segment_id")]
+        public string SegmentId { get; set; }
+
+        /// <summary>
+        /// 所在时区,所有的时间都是该时区的时间  支持 GMT+8 UTC+0 Europe/London 的格式
+        /// </summary>
+        [JsonProperty("time_zone")]
+        public string TimeZone { get; set; }
+    }
+}

+ 16 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayAccountExrateSentimentDataSendModel.cs

@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayAccountExrateSentimentDataSendModel Data Structure.
+    /// </summary>
+    public class AlipayAccountExrateSentimentDataSendModel : AlipayObject
+    {
+        /// <summary>
+        /// 国家制裁提交数据内容
+        /// </summary>
+        [JsonProperty("content")]
+        public string Content { get; set; }
+    }
+}

+ 59 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayAssetPointAccountlogQueryModel.cs

@@ -0,0 +1,59 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayAssetPointAccountlogQueryModel Data Structure.
+    /// </summary>
+    public class AlipayAssetPointAccountlogQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 用户流水查询起始时间
+        /// </summary>
+        [JsonProperty("account_date_begin")]
+        public string AccountDateBegin { get; set; }
+
+        /// <summary>
+        /// 用户流水查询结束时间
+        /// </summary>
+        [JsonProperty("account_date_end")]
+        public string AccountDateEnd { get; set; }
+
+        /// <summary>
+        /// 分页查询的当前页号,从1开始
+        /// </summary>
+        [JsonProperty("page_number")]
+        public long PageNumber { get; set; }
+
+        /// <summary>
+        /// 分页查询的单页大小
+        /// </summary>
+        [JsonProperty("page_size")]
+        public long PageSize { get; set; }
+
+        /// <summary>
+        /// 子交易代码,标记大业务下的子业务,例如充值-外部商户发放,可选参数可以不传
+        /// </summary>
+        [JsonProperty("sub_trans_code")]
+        public List<string> SubTransCode { get; set; }
+
+        /// <summary>
+        /// 主交易代码,例如支付、充值等,标记业务大类,可选参数可以不传
+        /// </summary>
+        [JsonProperty("trans_code")]
+        public List<string> TransCode { get; set; }
+
+        /// <summary>
+        /// 用户标识符,用于指定集分宝发放的用户,和user_symbol_type一起使用,确定一个唯一的支付宝用户
+        /// </summary>
+        [JsonProperty("user_symbol")]
+        public string UserSymbol { get; set; }
+
+        /// <summary>
+        /// 用户标识符类型,  现在支持ALIPAY_USER_ID:表示支付宝用户ID,  ALIPAY_LOGON_ID:表示支付宝登陆号,
+        /// </summary>
+        [JsonProperty("user_symbol_type")]
+        public string UserSymbolType { get; set; }
+    }
+}

+ 28 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossBaseProcessInstanceCancelModel.cs

@@ -0,0 +1,28 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayBossBaseProcessInstanceCancelModel Data Structure.
+    /// </summary>
+    public class AlipayBossBaseProcessInstanceCancelModel : AlipayObject
+    {
+        /// <summary>
+        /// 备注
+        /// </summary>
+        [JsonProperty("memo")]
+        public string Memo { get; set; }
+
+        /// <summary>
+        /// 处理人域账号
+        /// </summary>
+        [JsonProperty("operator")]
+        public string Operator { get; set; }
+
+        /// <summary>
+        /// 流程全局唯一ID
+        /// </summary>
+        [JsonProperty("puid")]
+        public string Puid { get; set; }
+    }
+}

+ 77 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossBaseProcessInstanceCreateModel.cs

@@ -0,0 +1,77 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayBossBaseProcessInstanceCreateModel Data Structure.
+    /// </summary>
+    public class AlipayBossBaseProcessInstanceCreateModel : AlipayObject
+    {
+        /// <summary>
+        /// 加签内容
+        /// </summary>
+        [JsonProperty("add_sign_content")]
+        public List<BPOpenApiAddSignContent> AddSignContent { get; set; }
+
+        /// <summary>
+        /// 业务上下文,JSON格式
+        /// </summary>
+        [JsonProperty("context")]
+        public string Context { get; set; }
+
+        /// <summary>
+        /// 创建人的域账号
+        /// </summary>
+        [JsonProperty("creator")]
+        public string Creator { get; set; }
+
+        /// <summary>
+        /// 描述信息
+        /// </summary>
+        [JsonProperty("description")]
+        public string Description { get; set; }
+
+        /// <summary>
+        /// 2088账号
+        /// </summary>
+        [JsonProperty("ip_role_id")]
+        public string IpRoleId { get; set; }
+
+        /// <summary>
+        /// 流程配置名称。需要先在流程平台配置流程
+        /// </summary>
+        [JsonProperty("name")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 优先级,数字越大优先级越高,最大不超过29
+        /// </summary>
+        [JsonProperty("priority")]
+        public long Priority { get; set; }
+
+        /// <summary>
+        /// 流程全局唯一ID,和业务一一对应
+        /// </summary>
+        [JsonProperty("puid")]
+        public BPOpenApiPUID Puid { get; set; }
+
+        /// <summary>
+        /// 前置流程从哪个节点发起的本流程
+        /// </summary>
+        [JsonProperty("source_node_name")]
+        public string SourceNodeName { get; set; }
+
+        /// <summary>
+        /// 前置流程的PUID。用于串连起两个流程
+        /// </summary>
+        [JsonProperty("source_puid")]
+        public string SourcePuid { get; set; }
+
+        /// <summary>
+        /// 子流程的上下文。每一个上下文都使用JSON格式
+        /// </summary>
+        [JsonProperty("sub_contexts")]
+        public List<string> SubContexts { get; set; }
+    }
+}

+ 16 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossBaseProcessInstanceQueryModel.cs

@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayBossBaseProcessInstanceQueryModel Data Structure.
+    /// </summary>
+    public class AlipayBossBaseProcessInstanceQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 流程全局唯一ID
+        /// </summary>
+        [JsonProperty("puid")]
+        public string Puid { get; set; }
+    }
+}

+ 22 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossBaseProcessSignVerifyModel.cs

@@ -0,0 +1,22 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayBossBaseProcessSignVerifyModel Data Structure.
+    /// </summary>
+    public class AlipayBossBaseProcessSignVerifyModel : AlipayObject
+    {
+        /// <summary>
+        /// 流程唯一ID
+        /// </summary>
+        [JsonProperty("puid")]
+        public string Puid { get; set; }
+
+        /// <summary>
+        /// mnotify签名直接回传
+        /// </summary>
+        [JsonProperty("sign_content")]
+        public string SignContent { get; set; }
+    }
+}

+ 65 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossBaseProcessTaskProcessModel.cs

@@ -0,0 +1,65 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayBossBaseProcessTaskProcessModel Data Structure.
+    /// </summary>
+    public class AlipayBossBaseProcessTaskProcessModel : AlipayObject
+    {
+        /// <summary>
+        /// 更新的业务上下文。和原有业务上下文同key覆盖,新增key新增。
+        /// </summary>
+        [JsonProperty("context")]
+        public string Context { get; set; }
+
+        /// <summary>
+        /// 处理幂等值,特别注意这个值的使用,不能依赖于流程中的任何值。
+        /// </summary>
+        [JsonProperty("idempotent_id")]
+        public string IdempotentId { get; set; }
+
+        /// <summary>
+        /// 处理备注
+        /// </summary>
+        [JsonProperty("memo")]
+        public string Memo { get; set; }
+
+        /// <summary>
+        /// 当前需要推进的节点
+        /// </summary>
+        [JsonProperty("node")]
+        public string Node { get; set; }
+
+        /// <summary>
+        /// 操作名称
+        /// </summary>
+        [JsonProperty("operate")]
+        public string Operate { get; set; }
+
+        /// <summary>
+        /// 当前处理人域账号
+        /// </summary>
+        [JsonProperty("operator")]
+        public string Operator { get; set; }
+
+        /// <summary>
+        /// 更新的优先级。填写0则不更新,使用原值
+        /// </summary>
+        [JsonProperty("priority")]
+        public long Priority { get; set; }
+
+        /// <summary>
+        /// 流程全局唯一ID
+        /// </summary>
+        [JsonProperty("puid")]
+        public string Puid { get; set; }
+
+        /// <summary>
+        /// 更新的子流程上下文。完全覆盖原值。若不需要覆盖,则传null
+        /// </summary>
+        [JsonProperty("sub_contexts")]
+        public List<string> SubContexts { get; set; }
+    }
+}

+ 16 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossCsDatacollectSendModel.cs

@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayBossCsDatacollectSendModel Data Structure.
+    /// </summary>
+    public class AlipayBossCsDatacollectSendModel : AlipayObject
+    {
+        /// <summary>
+        /// 上数提交数据内容
+        /// </summary>
+        [JsonProperty("content")]
+        public string Content { get; set; }
+    }
+}

+ 112 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossProdSubmerchantCreateModel.cs

@@ -0,0 +1,112 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayBossProdSubmerchantCreateModel Data Structure.
+    /// </summary>
+    public class AlipayBossProdSubmerchantCreateModel : AlipayObject
+    {
+        /// <summary>
+        /// 受理商户详细经营地址
+        /// </summary>
+        [JsonProperty("address")]
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 受理商户简称
+        /// </summary>
+        [JsonProperty("alias_name")]
+        public string AliasName { get; set; }
+
+        /// <summary>
+        /// 受理商户营业执照编号
+        /// </summary>
+        [JsonProperty("business_license")]
+        public string BusinessLicense { get; set; }
+
+        /// <summary>
+        /// 受理商户经营类目,参考开放平台口碑开放行业入驻要求
+        /// </summary>
+        [JsonProperty("category_id")]
+        public string CategoryId { get; set; }
+
+        /// <summary>
+        /// 受理商户所在城市编码
+        /// </summary>
+        [JsonProperty("city_code")]
+        public string CityCode { get; set; }
+
+        /// <summary>
+        /// 受理商户联系人邮箱
+        /// </summary>
+        [JsonProperty("contact_email")]
+        public string ContactEmail { get; set; }
+
+        /// <summary>
+        /// 受理商户联系人手机号
+        /// </summary>
+        [JsonProperty("contact_mobile")]
+        public string ContactMobile { get; set; }
+
+        /// <summary>
+        /// 受理商户联系人名称
+        /// </summary>
+        [JsonProperty("contact_name")]
+        public string ContactName { get; set; }
+
+        /// <summary>
+        /// 受理商户联系人电话
+        /// </summary>
+        [JsonProperty("contact_phone")]
+        public string ContactPhone { get; set; }
+
+        /// <summary>
+        /// 受理商户所在区县编码
+        /// </summary>
+        [JsonProperty("district_code")]
+        public string DistrictCode { get; set; }
+
+        /// <summary>
+        /// 受理商户编号,由受理机构定义,需要保证在受理机构下唯一
+        /// </summary>
+        [JsonProperty("external_id")]
+        public string ExternalId { get; set; }
+
+        /// <summary>
+        /// 受理商户身份证编号
+        /// </summary>
+        [JsonProperty("id_card")]
+        public string IdCard { get; set; }
+
+        /// <summary>
+        /// 受理商户备注信息,可填写额外信息
+        /// </summary>
+        [JsonProperty("memo")]
+        public string Memo { get; set; }
+
+        /// <summary>
+        /// 受理商户名称
+        /// </summary>
+        [JsonProperty("name")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 受理商户所在省份编码
+        /// </summary>
+        [JsonProperty("province_code")]
+        public string ProvinceCode { get; set; }
+
+        /// <summary>
+        /// 受理商户客服电话
+        /// </summary>
+        [JsonProperty("service_phone")]
+        public string ServicePhone { get; set; }
+
+        /// <summary>
+        /// 受理商户来源机构标识,填写受理机构在支付宝的pid
+        /// </summary>
+        [JsonProperty("source")]
+        public string Source { get; set; }
+    }
+}

+ 82 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossProdSubmerchantModifyModel.cs

@@ -0,0 +1,82 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayBossProdSubmerchantModifyModel Data Structure.
+    /// </summary>
+    public class AlipayBossProdSubmerchantModifyModel : AlipayObject
+    {
+        /// <summary>
+        /// 受理商户详细经营地址
+        /// </summary>
+        [JsonProperty("address")]
+        public string Address { get; set; }
+
+        /// <summary>
+        /// 受理商户简称
+        /// </summary>
+        [JsonProperty("alias_name")]
+        public string AliasName { get; set; }
+
+        /// <summary>
+        /// 受理商户营业执照编号
+        /// </summary>
+        [JsonProperty("business_license")]
+        public string BusinessLicense { get; set; }
+
+        /// <summary>
+        /// 受理商户城市编码
+        /// </summary>
+        [JsonProperty("city_code")]
+        public string CityCode { get; set; }
+
+        /// <summary>
+        /// 受理商户联系人名称
+        /// </summary>
+        [JsonProperty("contact_name")]
+        public string ContactName { get; set; }
+
+        /// <summary>
+        /// 受理商户区县编码
+        /// </summary>
+        [JsonProperty("district_code")]
+        public string DistrictCode { get; set; }
+
+        /// <summary>
+        /// 受理商户编号,与sub_merchant_id二选一必传
+        /// </summary>
+        [JsonProperty("external_id")]
+        public string ExternalId { get; set; }
+
+        /// <summary>
+        /// 受理商户身份证编号
+        /// </summary>
+        [JsonProperty("id_card")]
+        public string IdCard { get; set; }
+
+        /// <summary>
+        /// 受理商户省份编码
+        /// </summary>
+        [JsonProperty("province_code")]
+        public string ProvinceCode { get; set; }
+
+        /// <summary>
+        /// 受理商户客服电话
+        /// </summary>
+        [JsonProperty("service_phone")]
+        public string ServicePhone { get; set; }
+
+        /// <summary>
+        /// 受理商户来源机构标识,填写受理机构在支付宝的pid
+        /// </summary>
+        [JsonProperty("source")]
+        public string Source { get; set; }
+
+        /// <summary>
+        /// 本次修改受理商户的支付宝识别号,同请求传入的sub_merchant_id字段,与external_id二选一必传
+        /// </summary>
+        [JsonProperty("sub_merchant_id")]
+        public string SubMerchantId { get; set; }
+    }
+}

+ 22 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayBossProdSubmerchantQueryModel.cs

@@ -0,0 +1,22 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayBossProdSubmerchantQueryModel Data Structure.
+    /// </summary>
+    public class AlipayBossProdSubmerchantQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 受理商户在受理机构下的唯一标识,与sub_merchant_id二选一必传
+        /// </summary>
+        [JsonProperty("external_id")]
+        public string ExternalId { get; set; }
+
+        /// <summary>
+        /// 受理商户在支付宝入驻后的识别号,商户入驻后由支付宝返回,与external_id二选一必传
+        /// </summary>
+        [JsonProperty("sub_merchant_id")]
+        public string SubMerchantId { get; set; }
+    }
+}

+ 59 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceBusinessorderQueryModel.cs

@@ -0,0 +1,59 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceBusinessorderQueryModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceBusinessorderQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 查询办事记录的时间区间中的开始时间,格式为yyyy-MM-dd HH:mm:ss
+        /// </summary>
+        [JsonProperty("begin_time")]
+        public string BeginTime { get; set; }
+
+        /// <summary>
+        /// 查询办事记录的时间区间中的结束时间,格式为yyyy-MM-dd HH:mm:ss
+        /// </summary>
+        [JsonProperty("end_time")]
+        public string EndTime { get; set; }
+
+        /// <summary>
+        /// isv的appid
+        /// </summary>
+        [JsonProperty("isv_appid")]
+        public string IsvAppid { get; set; }
+
+        /// <summary>
+        /// 分页查询的起始页数
+        /// </summary>
+        [JsonProperty("page_num")]
+        public string PageNum { get; set; }
+
+        /// <summary>
+        /// 分页查询的每页数据量
+        /// </summary>
+        [JsonProperty("page_size")]
+        public string PageSize { get; set; }
+
+        /// <summary>
+        /// 查询的办事记录所属服务展台(如城市服务为CITY_SERVICE,车主平台为MYCAR_SERVICE等)
+        /// </summary>
+        [JsonProperty("platform_type")]
+        public string PlatformType { get; set; }
+
+        /// <summary>
+        /// 办事记录状态列表
+        /// </summary>
+        [JsonProperty("status_list")]
+        public List<string> StatusList { get; set; }
+
+        /// <summary>
+        /// 支付宝userId
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 58 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceDataResultSendModel.cs

@@ -0,0 +1,58 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceDataResultSendModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceDataResultSendModel : AlipayObject
+    {
+        /// <summary>
+        /// 请求来源
+        /// </summary>
+        [JsonProperty("channel")]
+        public string Channel { get; set; }
+
+        /// <summary>
+        /// 版本号,由支付宝分配
+        /// </summary>
+        [JsonProperty("interface_version")]
+        public string InterfaceVersion { get; set; }
+
+        /// <summary>
+        /// 操作code,由支付宝分配
+        /// </summary>
+        [JsonProperty("op_code")]
+        public string OpCode { get; set; }
+
+        /// <summary>
+        /// 结果码,由支付宝分配,该结果码将对应不同的页面展示
+        /// </summary>
+        [JsonProperty("result_code")]
+        public string ResultCode { get; set; }
+
+        /// <summary>
+        /// 场景code,由支付宝分配
+        /// </summary>
+        [JsonProperty("scene_code")]
+        public string SceneCode { get; set; }
+
+        /// <summary>
+        /// 场景的数据表示. json 数组格式,  根据不同的scene_code,op_code,  channel,version共同确定参数是否  可以为空,接入时由支付宝确定  参数格式。
+        /// </summary>
+        [JsonProperty("scene_data")]
+        public string SceneData { get; set; }
+
+        /// <summary>
+        /// 通知的目标用户
+        /// </summary>
+        [JsonProperty("target_id")]
+        public string TargetId { get; set; }
+
+        /// <summary>
+        /// 取值范围:  IDENTITY_CARD_NO :身份证  ALIPAY_LOGON_ID:支付宝登录账号  BINDING_MOBILE_NO:支付宝账号绑定的手机号   ALIPAY_USER_ID:支付宝user_id  标明target_id对应的类型,此参数为空时,  默认为支付宝账号的user_id。  注意:类型为身份证、支付宝绑定的手机号时,  可能对应多个支付宝账号,此时只会选择列表  第一个支付宝账号的userId作为targetId使用。
+        /// </summary>
+        [JsonProperty("target_id_type")]
+        public string TargetIdType { get; set; }
+    }
+}

+ 58 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceDataSendModel.cs

@@ -0,0 +1,58 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceDataSendModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceDataSendModel : AlipayObject
+    {
+        /// <summary>
+        /// 场景的来源渠道,比如场景  在阿里旅行触发,就用alitrip  接入时和支付宝共同确认
+        /// </summary>
+        [JsonProperty("channel")]
+        public string Channel { get; set; }
+
+        /// <summary>
+        /// 操作码,由支付宝分配
+        /// </summary>
+        [JsonProperty("op_code")]
+        public string OpCode { get; set; }
+
+        /// <summary>
+        /// 操作数据,如果只需要支付宝这边利用  数据直接完成某个功能(通知),则使  用此参数传输数据.,根据不同的scene_code,  op_code,channel,version共同确定参数是否  可以为空,接入时由支付宝确定参数格式。
+        /// </summary>
+        [JsonProperty("op_data")]
+        public string OpData { get; set; }
+
+        /// <summary>
+        /// 场景标识,由支付宝分配
+        /// </summary>
+        [JsonProperty("scene_code")]
+        public string SceneCode { get; set; }
+
+        /// <summary>
+        /// 场景的数据表示. json 数组  格式,根据不同的scene_code,  op_code,channel,version共同确定  参数是否可以为空,接入时由支付宝确定  参数格式。
+        /// </summary>
+        [JsonProperty("scene_data")]
+        public string SceneData { get; set; }
+
+        /// <summary>
+        /// 场景覆盖的目标人群标识,  单个用户是支付宝的userId,  多个用户userId 使用英文半  角逗号隔开,最多200个  如果是群组,使用支付宝分配  的群组ID.
+        /// </summary>
+        [JsonProperty("target_id")]
+        public string TargetId { get; set; }
+
+        /// <summary>
+        /// 取值范围:  IDENTITY_CARD_NO :身份证  ALIPAY_LOGON_ID:支付宝登录账号  BINDING_MOBILE_NO:支付宝账号绑定的手机号   ALIPAY_USER_ID:支付宝user_id  标明target_id对应的类型,此参数为空时,  默认为支付宝账号的user_id。  注意:类型为身份证、支付宝绑定的手机号时,  可能对应多个支付宝账号,此时只会选择列表  第一个支付宝账号的userId作为targetId使用。
+        /// </summary>
+        [JsonProperty("target_id_type")]
+        public string TargetIdType { get; set; }
+
+        /// <summary>
+        /// 场景数据的类型的版本,由支付宝分配
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+    }
+}

+ 34 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotAccountbindingCreateModel.cs

@@ -0,0 +1,34 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceIotAccountbindingCreateModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceIotAccountbindingCreateModel : AlipayObject
+    {
+        /// <summary>
+        /// 协议服务商id+唯一+指定操作数据归属于哪个协议服务商+协议服务商接入时由支付宝统一分配
+        /// </summary>
+        [JsonProperty("protocol_supplier_id")]
+        public string ProtocolSupplierId { get; set; }
+
+        /// <summary>
+        /// 用户在协议服务商的用户id+唯一+用于建立与支付宝账号的绑定关系+用户在协议服务商注册
+        /// </summary>
+        [JsonProperty("protocol_user_id")]
+        public string ProtocolUserId { get; set; }
+
+        /// <summary>
+        /// 用户在协议服务商的用户名(显示名称)+不唯一+用于支付宝智能设备中心中显示用户名+用户在协议服务商注册时指定
+        /// </summary>
+        [JsonProperty("protocol_user_name")]
+        public string ProtocolUserName { get; set; }
+
+        /// <summary>
+        /// 蚂蚁统一会员ID
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 22 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotAccountbindingDeleteModel.cs

@@ -0,0 +1,22 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceIotAccountbindingDeleteModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceIotAccountbindingDeleteModel : AlipayObject
+    {
+        /// <summary>
+        /// 协议服务商id+唯一+指定操作数据归属于哪个协议服务商+协议服务商接入时由支付宝统一分配
+        /// </summary>
+        [JsonProperty("protocol_supplier_id")]
+        public string ProtocolSupplierId { get; set; }
+
+        /// <summary>
+        /// 蚂蚁统一会员ID
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 28 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotDeviceDeleteModel.cs

@@ -0,0 +1,28 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceIotDeviceDeleteModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceIotDeviceDeleteModel : AlipayObject
+    {
+        /// <summary>
+        /// 设备id+唯一+协议服务商用于唯一标识一个设备的设备id+唯一+协议服务商创建设备记录时指定
+        /// </summary>
+        [JsonProperty("device_id")]
+        public string DeviceId { get; set; }
+
+        /// <summary>
+        /// 协议服务商id+唯一+指定操作数据归属于哪个协议服务商+协议服务商接入时由支付宝统一分配
+        /// </summary>
+        [JsonProperty("protocol_supplier_id")]
+        public string ProtocolSupplierId { get; set; }
+
+        /// <summary>
+        /// 蚂蚁统一会员ID
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 28 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotDeviceModifyModel.cs

@@ -0,0 +1,28 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceIotDeviceModifyModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceIotDeviceModifyModel : AlipayObject
+    {
+        /// <summary>
+        /// 更新后的设备对象+不唯一+用于更新支付宝智能设备中心中的设备信息+协议服务商指定+设备对象整体都需传入,而不能仅传入部分发生变更的属性
+        /// </summary>
+        [JsonProperty("device")]
+        public IotDevice Device { get; set; }
+
+        /// <summary>
+        /// 协议服务商id+唯一+指定操作数据归属于哪个协议服务商+协议服务商接入时由支付宝统一分配
+        /// </summary>
+        [JsonProperty("protocol_supplier_id")]
+        public string ProtocolSupplierId { get; set; }
+
+        /// <summary>
+        /// 蚂蚁统一会员ID
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 28 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotDevicePersonalinfoModifyModel.cs

@@ -0,0 +1,28 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceIotDevicePersonalinfoModifyModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceIotDevicePersonalinfoModifyModel : AlipayObject
+    {
+        /// <summary>
+        /// 需更新的设备个性化信息+不唯一+用于更新支付宝智能设备中心中的设备个性化信息+协议服务商指定+设备个性化信息对象整体都需传入,而不能仅传入部分发生变更的属性
+        /// </summary>
+        [JsonProperty("device_personal_info")]
+        public IotDevicePersonalInfo DevicePersonalInfo { get; set; }
+
+        /// <summary>
+        /// 协议服务商id+唯一+指定操作数据归属于哪个协议服务商+协议服务商接入时由支付宝统一分配
+        /// </summary>
+        [JsonProperty("protocol_supplier_id")]
+        public string ProtocolSupplierId { get; set; }
+
+        /// <summary>
+        /// 蚂蚁统一会员ID
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 35 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotDevicelistCreateModel.cs

@@ -0,0 +1,35 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceIotDevicelistCreateModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceIotDevicelistCreateModel : AlipayObject
+    {
+        /// <summary>
+        /// 设备对象列表+不唯一+用于批量创建设备记录+协议服务商指定+0个或多个设备对象列表,单次调用传入设备对象个数不能超过200
+        /// </summary>
+        [JsonProperty("device_list")]
+        public List<IotDevice> DeviceList { get; set; }
+
+        /// <summary>
+        /// 设备个性化信息列表+不唯一+用于设置设备的用户定制化信息+协议服务商指定
+        /// </summary>
+        [JsonProperty("device_personal_info_list")]
+        public List<IotDevicePersonalInfo> DevicePersonalInfoList { get; set; }
+
+        /// <summary>
+        /// 协议服务商id+唯一+指定操作数据归属于哪个协议服务商+协议服务商接入时由支付宝统一分配
+        /// </summary>
+        [JsonProperty("protocol_supplier_id")]
+        public string ProtocolSupplierId { get; set; }
+
+        /// <summary>
+        /// 蚂蚁统一会员ID
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 22 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotModelModifyModel.cs

@@ -0,0 +1,22 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceIotModelModifyModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceIotModelModifyModel : AlipayObject
+    {
+        /// <summary>
+        /// 型号对象+不唯一+用于更新已存在的设备型号记录+由协议服务商指定+设备型号对象整体都需传入,而不能仅传入部分发生变更的属性
+        /// </summary>
+        [JsonProperty("model")]
+        public IotDeviceModel Model { get; set; }
+
+        /// <summary>
+        /// 协议服务商id+唯一+指定操作数据归属于哪个协议服务商+协议服务商接入时由支付宝统一分配
+        /// </summary>
+        [JsonProperty("protocol_supplier_id")]
+        public string ProtocolSupplierId { get; set; }
+    }
+}

+ 23 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotModellistCreateModel.cs

@@ -0,0 +1,23 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceIotModellistCreateModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceIotModellistCreateModel : AlipayObject
+    {
+        /// <summary>
+        /// 型号列表+不唯一+协议服务商用于在支付宝智能设备中心创建支持的设备型号+协议服务商指定
+        /// </summary>
+        [JsonProperty("model_list")]
+        public List<IotDeviceModel> ModelList { get; set; }
+
+        /// <summary>
+        /// 协议服务商id+唯一+指定操作数据归属于哪个协议服务商+协议服务商接入时由支付宝统一分配
+        /// </summary>
+        [JsonProperty("protocol_supplier_id")]
+        public string ProtocolSupplierId { get; set; }
+    }
+}

+ 58 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceIotMsgcenterSendModel.cs

@@ -0,0 +1,58 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceIotMsgcenterSendModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceIotMsgcenterSendModel : AlipayObject
+    {
+        /// <summary>
+        /// 消息内容
+        /// </summary>
+        [JsonProperty("content")]
+        public string Content { get; set; }
+
+        /// <summary>
+        /// 消息发送的时间,毫秒级的时间戳
+        /// </summary>
+        [JsonProperty("datetime")]
+        public long Datetime { get; set; }
+
+        /// <summary>
+        /// 扩展参数,json序列化后的字符串
+        /// </summary>
+        [JsonProperty("ext_info")]
+        public string ExtInfo { get; set; }
+
+        /// <summary>
+        /// 消息是否支持跳转链接
+        /// </summary>
+        [JsonProperty("is_support_link")]
+        public bool IsSupportLink { get; set; }
+
+        /// <summary>
+        /// 消息跳转链接
+        /// </summary>
+        [JsonProperty("link")]
+        public string Link { get; set; }
+
+        /// <summary>
+        /// 消息标题
+        /// </summary>
+        [JsonProperty("title")]
+        public string Title { get; set; }
+
+        /// <summary>
+        /// 消息类型, 0:普通消息、1:发送push的消息
+        /// </summary>
+        [JsonProperty("type")]
+        public long Type { get; set; }
+
+        /// <summary>
+        /// 蚂蚁统一会员ID
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 40 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceLogisticsFaceMatchModel.cs

@@ -0,0 +1,40 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceLogisticsFaceMatchModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceLogisticsFaceMatchModel : AlipayObject
+    {
+        /// <summary>
+        /// 业务类型标识,比如 刷脸开柜,刷脸支付, 值由支付宝分配
+        /// </summary>
+        [JsonProperty("biz_type")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 人脸集合标识-对于自提柜刷脸开柜验证场景,对应 柜子编号,注意不是格口的编号 ,
+        /// </summary>
+        [JsonProperty("face_group")]
+        public string FaceGroup { get; set; }
+
+        /// <summary>
+        /// 刷脸取件用户的人脸图片字节数组进行Base64编码后的字符串
+        /// </summary>
+        [JsonProperty("face_image")]
+        public string FaceImage { get; set; }
+
+        /// <summary>
+        /// 识别的人脸矩形,格式为 "left,top,width,height"
+        /// </summary>
+        [JsonProperty("face_rectangle")]
+        public string FaceRectangle { get; set; }
+
+        /// <summary>
+        /// 商户编码-物流体系里的编码
+        /// </summary>
+        [JsonProperty("merchant_code")]
+        public string MerchantCode { get; set; }
+    }
+}

+ 40 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceLogisticsUserOrderQueryModel.cs

@@ -0,0 +1,40 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceLogisticsUserOrderQueryModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceLogisticsUserOrderQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 业务类型
+        /// </summary>
+        [JsonProperty("biz_type")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 扩展参数 , json 格式。  可选还是必选取决于biz_type参数 .   对于 CABINET_FACE_TAKE 自提柜刷脸开柜业务需要传字段 cabinet_no ( 柜子编号 ) .
+        /// </summary>
+        [JsonProperty("ext_param")]
+        public string ExtParam { get; set; }
+
+        /// <summary>
+        /// 物流体系里合作商户的编码
+        /// </summary>
+        [JsonProperty("merchant_code")]
+        public string MerchantCode { get; set; }
+
+        /// <summary>
+        /// 当前支持支付宝登录号
+        /// </summary>
+        [JsonProperty("target_id")]
+        public string TargetId { get; set; }
+
+        /// <summary>
+        /// 目前只支持登录号,后续可扩展
+        /// </summary>
+        [JsonProperty("target_id_type")]
+        public string TargetIdType { get; set; }
+    }
+}

+ 46 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceMedicalCardQueryModel.cs

@@ -0,0 +1,46 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceMedicalCardQueryModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceMedicalCardQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 支付授权码
+        /// </summary>
+        [JsonProperty("auth_code")]
+        public string AuthCode { get; set; }
+
+        /// <summary>
+        /// 买家支付宝账号对应的支付宝唯一用户号。  以2088开头的纯16位数字。
+        /// </summary>
+        [JsonProperty("buyer_id")]
+        public string BuyerId { get; set; }
+
+        /// <summary>
+        /// 卡颁发机构编号
+        /// </summary>
+        [JsonProperty("card_org_no")]
+        public string CardOrgNo { get; set; }
+
+        /// <summary>
+        /// 业务扩展参数
+        /// </summary>
+        [JsonProperty("extend_params")]
+        public string ExtendParams { get; set; }
+
+        /// <summary>
+        /// 跳回的地址
+        /// </summary>
+        [JsonProperty("return_url")]
+        public string ReturnUrl { get; set; }
+
+        /// <summary>
+        /// 支付场景  条码支付,取值:bar_code  声波支付,取值:wave_code
+        /// </summary>
+        [JsonProperty("scene")]
+        public string Scene { get; set; }
+    }
+}

+ 142 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceMedicalInformationUploadModel.cs

@@ -0,0 +1,142 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceMedicalInformationUploadModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceMedicalInformationUploadModel : AlipayObject
+    {
+        /// <summary>
+        /// 支付授权码
+        /// </summary>
+        [JsonProperty("auth_code")]
+        public string AuthCode { get; set; }
+
+        /// <summary>
+        /// 支付场景(默认为条形码)  条码支付,取值:bar_code  声波支付,取值:wave_code  二维码支付,取值qr_code
+        /// </summary>
+        [JsonProperty("auth_type")]
+        public string AuthType { get; set; }
+
+        /// <summary>
+        /// 上报明细:  挂号场景:挂号科室名  线下药店:药品名称
+        /// </summary>
+        [JsonProperty("body")]
+        public string Body { get; set; }
+
+        /// <summary>
+        /// 买家id
+        /// </summary>
+        [JsonProperty("buyer_id")]
+        public string BuyerId { get; set; }
+
+        /// <summary>
+        /// 业务扩展参数  系统商编号:sys_service_provider_id  该参数作为系统商返佣数据提取的依据,请填写系统商签约协议的PID
+        /// </summary>
+        [JsonProperty("extend_params")]
+        public string ExtendParams { get; set; }
+
+        /// <summary>
+        /// 外部生成时间。 格式为 yyyy-MM-dd HH:mm:ss
+        /// </summary>
+        [JsonProperty("gmt_out_create")]
+        public string GmtOutCreate { get; set; }
+
+        /// <summary>
+        /// 上报行业:  药店:STORE
+        /// </summary>
+        [JsonProperty("industry")]
+        public string Industry { get; set; }
+
+        /// <summary>
+        /// 是否医保业务  是:T  不是:F
+        /// </summary>
+        [JsonProperty("is_insurance")]
+        public string IsInsurance { get; set; }
+
+        /// <summary>
+        /// 医保机构的编号
+        /// </summary>
+        [JsonProperty("medical_card_inst_id")]
+        public string MedicalCardInstId { get; set; }
+
+        /// <summary>
+        /// 医疗机构名称
+        /// </summary>
+        [JsonProperty("org_name")]
+        public string OrgName { get; set; }
+
+        /// <summary>
+        /// 医疗机构编码(医保局分配)
+        /// </summary>
+        [JsonProperty("org_no")]
+        public string OrgNo { get; set; }
+
+        /// <summary>
+        /// 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复。
+        /// </summary>
+        [JsonProperty("out_trade_no")]
+        public string OutTradeNo { get; set; }
+
+        /// <summary>
+        /// 患者证件号码
+        /// </summary>
+        [JsonProperty("patient_card_no")]
+        public string PatientCardNo { get; set; }
+
+        /// <summary>
+        /// 患者证件类型
+        /// </summary>
+        [JsonProperty("patient_card_type")]
+        public string PatientCardType { get; set; }
+
+        /// <summary>
+        /// 患者手机号
+        /// </summary>
+        [JsonProperty("patient_mobile")]
+        public string PatientMobile { get; set; }
+
+        /// <summary>
+        /// 患者姓名  患者姓名&患者证件和医保卡信息全部匹配才能使用医保,否则认为套保嫌疑不允许医保只能自费
+        /// </summary>
+        [JsonProperty("patient_name")]
+        public string PatientName { get; set; }
+
+        /// <summary>
+        /// 如果需要医保支付这个字段必传。业务报文,报文中可包含多条业务数据
+        /// </summary>
+        [JsonProperty("request_content")]
+        public string RequestContent { get; set; }
+
+        /// <summary>
+        /// 场景,取值:REGISTRATION(挂号)
+        /// </summary>
+        [JsonProperty("scene")]
+        public string Scene { get; set; }
+
+        /// <summary>
+        /// 卖家支付宝用户ID,如果该值为空,则默认为商户签约账号对应的支付宝用户ID
+        /// </summary>
+        [JsonProperty("seller_id")]
+        public string SellerId { get; set; }
+
+        /// <summary>
+        /// 业务流水号
+        /// </summary>
+        [JsonProperty("serial_no")]
+        public string SerialNo { get; set; }
+
+        /// <summary>
+        /// 主题
+        /// </summary>
+        [JsonProperty("subject")]
+        public string Subject { get; set; }
+
+        /// <summary>
+        /// 金额,单位元
+        /// </summary>
+        [JsonProperty("total_amount")]
+        public string TotalAmount { get; set; }
+    }
+}

+ 28 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceMedicalInstcardBindModel.cs

@@ -0,0 +1,28 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceMedicalInstcardBindModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceMedicalInstcardBindModel : AlipayObject
+    {
+        /// <summary>
+        /// 区域编码,使用国家行政区划代码,可参看  http://www.stats.gov.cn/tjsj/tjbz/xzqhdm
+        /// </summary>
+        [JsonProperty("city_code")]
+        public string CityCode { get; set; }
+
+        /// <summary>
+        /// 业务扩展参数  sys_service_provider_id:返佣商户标记  serial_no:商户业务序列号  return_params:外部商户提交给支付宝处理的请求参数,支付宝在整个处理过程中携带此参数。
+        /// </summary>
+        [JsonProperty("extend_params")]
+        public string ExtendParams { get; set; }
+
+        /// <summary>
+        /// 支付宝处理完请求后,如验证成功,当前页面自动跳转到商户网站里指定页面的http路径。
+        /// </summary>
+        [JsonProperty("return_url")]
+        public string ReturnUrl { get; set; }
+    }
+}

+ 142 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceMedicalInstcardCreateandpayModel.cs

@@ -0,0 +1,142 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceMedicalInstcardCreateandpayModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceMedicalInstcardCreateandpayModel : AlipayObject
+    {
+        /// <summary>
+        /// 业务单据号
+        /// </summary>
+        [JsonProperty("bill_no")]
+        public string BillNo { get; set; }
+
+        /// <summary>
+        /// 对交易或者商品的描述
+        /// </summary>
+        [JsonProperty("body")]
+        public string Body { get; set; }
+
+        /// <summary>
+        /// 买家id
+        /// </summary>
+        [JsonProperty("buyer_id")]
+        public string BuyerId { get; set; }
+
+        /// <summary>
+        /// 业务扩展参数
+        /// </summary>
+        [JsonProperty("extend_params")]
+        public string ExtendParams { get; set; }
+
+        /// <summary>
+        /// 外部下单时间。 格式为 yyyy-MM-dd HH:mm:ss
+        /// </summary>
+        [JsonProperty("gmt_out_create")]
+        public string GmtOutCreate { get; set; }
+
+        /// <summary>
+        /// 支付行业:  医院:HOSPITAL  药店:STORE
+        /// </summary>
+        [JsonProperty("industry")]
+        public string Industry { get; set; }
+
+        /// <summary>
+        /// 外部机构业务上是否允许这笔单订单使用医保支付  允许使用:T  不允许使用:F
+        /// </summary>
+        [JsonProperty("is_insurance")]
+        public string IsInsurance { get; set; }
+
+        /// <summary>
+        /// 医保机构的编号
+        /// </summary>
+        [JsonProperty("medical_card_inst_id")]
+        public string MedicalCardInstId { get; set; }
+
+        /// <summary>
+        /// 医疗机构名称
+        /// </summary>
+        [JsonProperty("org_name")]
+        public string OrgName { get; set; }
+
+        /// <summary>
+        /// 医疗机构编码(医保局分配)
+        /// </summary>
+        [JsonProperty("org_no")]
+        public string OrgNo { get; set; }
+
+        /// <summary>
+        /// 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复。
+        /// </summary>
+        [JsonProperty("out_trade_no")]
+        public string OutTradeNo { get; set; }
+
+        /// <summary>
+        /// 患者证件号码
+        /// </summary>
+        [JsonProperty("patient_card_no")]
+        public string PatientCardNo { get; set; }
+
+        /// <summary>
+        /// 患者证件类型
+        /// </summary>
+        [JsonProperty("patient_card_type")]
+        public string PatientCardType { get; set; }
+
+        /// <summary>
+        /// 患者手机号
+        /// </summary>
+        [JsonProperty("patient_mobile")]
+        public string PatientMobile { get; set; }
+
+        /// <summary>
+        /// 患者姓名  患者姓名&患者证件和医保卡信息全部匹配才能使用医保,否则认为套保嫌疑不允许医保只能自费
+        /// </summary>
+        [JsonProperty("patient_name")]
+        public string PatientName { get; set; }
+
+        /// <summary>
+        /// 如果需要医保支付这个字段必传。业务报文,报文中可包含多条业务数据
+        /// </summary>
+        [JsonProperty("request_content")]
+        public string RequestContent { get; set; }
+
+        /// <summary>
+        /// 支付场景,取值:REGISTRATION(挂号)  TREATMENT(诊间)  HOSPITALIZATION(住院)  COMMON(非医院类)
+        /// </summary>
+        [JsonProperty("scene")]
+        public string Scene { get; set; }
+
+        /// <summary>
+        /// 卖家支付宝用户ID,如果该值为空,则默认为商户签约账号对应的支付宝用户ID
+        /// </summary>
+        [JsonProperty("seller_id")]
+        public string SellerId { get; set; }
+
+        /// <summary>
+        /// 业务流水号
+        /// </summary>
+        [JsonProperty("serial_no")]
+        public string SerialNo { get; set; }
+
+        /// <summary>
+        /// 订单标题
+        /// </summary>
+        [JsonProperty("subject")]
+        public string Subject { get; set; }
+
+        /// <summary>
+        /// 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m
+        /// </summary>
+        [JsonProperty("timeout_express")]
+        public string TimeoutExpress { get; set; }
+
+        /// <summary>
+        /// 订单总金额,单位为元,不能小于0,精确到小数点后2位。
+        /// </summary>
+        [JsonProperty("total_amount")]
+        public string TotalAmount { get; set; }
+    }
+}

+ 64 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceTradeApplyModel.cs

@@ -0,0 +1,64 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceTradeApplyModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceTradeApplyModel : AlipayObject
+    {
+        /// <summary>
+        /// 订单费用详情,用于在订单确认页面展示
+        /// </summary>
+        [JsonProperty("amount_detail")]
+        public string AmountDetail { get; set; }
+
+        /// <summary>
+        /// 接口请求渠道编码,由支付宝提供
+        /// </summary>
+        [JsonProperty("channel")]
+        public string Channel { get; set; }
+
+        /// <summary>
+        /// 接口版本号
+        /// </summary>
+        [JsonProperty("interface_version")]
+        public string InterfaceVersion { get; set; }
+
+        /// <summary>
+        /// 用于标识操作模型,由支付宝配置提供
+        /// </summary>
+        [JsonProperty("op_code")]
+        public string OpCode { get; set; }
+
+        /// <summary>
+        /// 场景的数据表示. json 数组格式,根据场景不同的模型传入不同参数,由支付宝负责提供参数集合
+        /// </summary>
+        [JsonProperty("order_detail")]
+        public string OrderDetail { get; set; }
+
+        /// <summary>
+        /// 用于标识数据模型,由支付宝配置提供
+        /// </summary>
+        [JsonProperty("scene_code")]
+        public string SceneCode { get; set; }
+
+        /// <summary>
+        /// 场景覆盖的目标人群标识,支持支付宝userId、身份证号、支付宝登录号、支付宝绑定手机号;
+        /// </summary>
+        [JsonProperty("target_id")]
+        public string TargetId { get; set; }
+
+        /// <summary>
+        /// 场景覆盖人群id类型
+        /// </summary>
+        [JsonProperty("target_id_type")]
+        public string TargetIdType { get; set; }
+
+        /// <summary>
+        /// 交易请求参数
+        /// </summary>
+        [JsonProperty("trade_apply_params")]
+        public TradeApplyParams TradeApplyParams { get; set; }
+    }
+}

+ 17 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceTransportOfflinepayTradeSettleModel.cs

@@ -0,0 +1,17 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceTransportOfflinepayTradeSettleModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceTransportOfflinepayTradeSettleModel : AlipayObject
+    {
+        /// <summary>
+        /// 脱机交易列表
+        /// </summary>
+        [JsonProperty("trade_list")]
+        public List<AlipayOfflineTrade> TradeList { get; set; }
+    }
+}

+ 76 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCommerceTransportOfflinepayVirtualcardSendModel.cs

@@ -0,0 +1,76 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCommerceTransportOfflinepayVirtualcardSendModel Data Structure.
+    /// </summary>
+    public class AlipayCommerceTransportOfflinepayVirtualcardSendModel : AlipayObject
+    {
+        /// <summary>
+        /// 虚拟卡信息同步动作
+        /// </summary>
+        [JsonProperty("action")]
+        public string Action { get; set; }
+
+        /// <summary>
+        /// 用户虚拟卡余额,单位元。
+        /// </summary>
+        [JsonProperty("balance")]
+        public string Balance { get; set; }
+
+        /// <summary>
+        /// hex格式表示的虚拟卡数据,卡数据将在虚拟卡二维码中透传。
+        /// </summary>
+        [JsonProperty("card_data")]
+        public string CardData { get; set; }
+
+        /// <summary>
+        /// 用户虚拟卡卡号
+        /// </summary>
+        [JsonProperty("card_no")]
+        public string CardNo { get; set; }
+
+        /// <summary>
+        /// 虚拟卡卡类型
+        /// </summary>
+        [JsonProperty("card_type")]
+        public string CardType { get; set; }
+
+        /// <summary>
+        /// 表示虚拟卡是否可用
+        /// </summary>
+        [JsonProperty("disabled")]
+        public string Disabled { get; set; }
+
+        /// <summary>
+        /// 卡状态不可用时,标示卡的具体不可用状态。  CARD_OVERDUE ---- 欠费,CARD_REVOKING ---- 退卡中
+        /// </summary>
+        [JsonProperty("disabled_code")]
+        public string DisabledCode { get; set; }
+
+        /// <summary>
+        /// 当虚拟卡不可用时,提示用户不可用原因。
+        /// </summary>
+        [JsonProperty("disabled_tips")]
+        public string DisabledTips { get; set; }
+
+        /// <summary>
+        /// json格式字符串,存放扩展信息。discount_type ---- 优惠标识
+        /// </summary>
+        [JsonProperty("ext_info")]
+        public string ExtInfo { get; set; }
+
+        /// <summary>
+        /// 虚拟卡最后更新时间 使用标准java时间格式
+        /// </summary>
+        [JsonProperty("last_update_time")]
+        public string LastUpdateTime { get; set; }
+
+        /// <summary>
+        /// 支付宝用户id
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 17 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCreditAutofinanceDataBatchqueryModel.cs

@@ -0,0 +1,17 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCreditAutofinanceDataBatchqueryModel Data Structure.
+    /// </summary>
+    public class AlipayCreditAutofinanceDataBatchqueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 订单信息查询参数+ 复杂类型中包括申请单号和客户支付宝uid,通过传递这个列表数据进行批量查询订单信息+ 其中的app_seqno是网商银行的申请单号,通过alipay.credit.autofinance.loan.apply 接口返回的applyno获取,其中uid是客户的支付宝id,机构通过服务窗获取。
+        /// </summary>
+        [JsonProperty("app_seqno_list")]
+        public List<SceneDataQueryParam> AppSeqnoList { get; set; }
+    }
+}

+ 64 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCreditAutofinanceLoanApplyModel.cs

@@ -0,0 +1,64 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCreditAutofinanceLoanApplyModel Data Structure.
+    /// </summary>
+    public class AlipayCreditAutofinanceLoanApplyModel : AlipayObject
+    {
+        /// <summary>
+        /// 区域
+        /// </summary>
+        [JsonProperty("area")]
+        public string Area { get; set; }
+
+        /// <summary>
+        /// 征信结果回调地址
+        /// </summary>
+        [JsonProperty("backurl")]
+        public string Backurl { get; set; }
+
+        /// <summary>
+        /// 扩展参数信息,json格式,针对不同的业务平台有不同的参数,目前大搜车业务支持的参数有:firstpayamt 首付租金,firstpayprop 首付比例,lastpayamt 回购尾款,loantenor 贷款期数,monthpayamt 每月还款额度
+        /// </summary>
+        [JsonProperty("extparam")]
+        public string Extparam { get; set; }
+
+        /// <summary>
+        /// 外部平台宝贝ID
+        /// </summary>
+        [JsonProperty("itemid")]
+        public string Itemid { get; set; }
+
+        /// <summary>
+        /// 机构编码
+        /// </summary>
+        [JsonProperty("orgcode")]
+        public string Orgcode { get; set; }
+
+        /// <summary>
+        /// 外部平台订单号,64个字符以内、只能包含字母、数字、下划线;需保证在外部平台端不重复
+        /// </summary>
+        [JsonProperty("outorderno")]
+        public string Outorderno { get; set; }
+
+        /// <summary>
+        /// 支付宝账号数字ID
+        /// </summary>
+        [JsonProperty("uid")]
+        public string Uid { get; set; }
+
+        /// <summary>
+        /// 核身VID
+        /// </summary>
+        [JsonProperty("verifyid")]
+        public string Verifyid { get; set; }
+
+        /// <summary>
+        /// 当前安装的支付宝钱包版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+    }
+}

+ 40 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCreditAutofinanceLoanCloseModel.cs

@@ -0,0 +1,40 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCreditAutofinanceLoanCloseModel Data Structure.
+    /// </summary>
+    public class AlipayCreditAutofinanceLoanCloseModel : AlipayObject
+    {
+        /// <summary>
+        /// 汽车金融内部订单号
+        /// </summary>
+        [JsonProperty("applyno")]
+        public string Applyno { get; set; }
+
+        /// <summary>
+        /// 机构编号
+        /// </summary>
+        [JsonProperty("orgcode")]
+        public string Orgcode { get; set; }
+
+        /// <summary>
+        /// 外部平台订单号,64个字符以内、只能包含字母、数字、下划线;需保证在外部平台端不重复
+        /// </summary>
+        [JsonProperty("outorderno")]
+        public string Outorderno { get; set; }
+
+        /// <summary>
+        /// 关闭原因
+        /// </summary>
+        [JsonProperty("reson")]
+        public string Reson { get; set; }
+
+        /// <summary>
+        /// 关闭类型  1. CLOSE_USER_CANCEL(用户主动放弃贷款)  2. CLOSE_TD_REJECT(同盾校验失败)  3. CLOSE_OTHER(其他情况)
+        /// </summary>
+        [JsonProperty("type")]
+        public string Type { get; set; }
+    }
+}

+ 40 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCreditAutofinanceLoanPlanQueryModel.cs

@@ -0,0 +1,40 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCreditAutofinanceLoanPlanQueryModel Data Structure.
+    /// </summary>
+    public class AlipayCreditAutofinanceLoanPlanQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 扩展参数,针对不同的平台特殊业务场景,将需要的参数填入改字段,目前针对大搜车业务有以下参数:itemprice 车辆价格,lastprop 车辆残值率,extintamt 基础服务包+增值服务包,loantenor 贷款期数,creditamtprop 授信额度比例调整值;
+        /// </summary>
+        [JsonProperty("extparam")]
+        public string Extparam { get; set; }
+
+        /// <summary>
+        /// 机构编码,机构接入汽车金融平台时分配,固定值
+        /// </summary>
+        [JsonProperty("orgcode")]
+        public string Orgcode { get; set; }
+
+        /// <summary>
+        /// 产品编码,汽车金融平台给机构提供的产品编码
+        /// </summary>
+        [JsonProperty("productcode")]
+        public string Productcode { get; set; }
+
+        /// <summary>
+        /// 本次请求流水号,全局唯一
+        /// </summary>
+        [JsonProperty("seqno")]
+        public string Seqno { get; set; }
+
+        /// <summary>
+        /// 支付宝账号数字ID
+        /// </summary>
+        [JsonProperty("uid")]
+        public string Uid { get; set; }
+    }
+}

+ 28 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCreditAutofinanceVidGetModel.cs

@@ -0,0 +1,28 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCreditAutofinanceVidGetModel Data Structure.
+    /// </summary>
+    public class AlipayCreditAutofinanceVidGetModel : AlipayObject
+    {
+        /// <summary>
+        /// 机构编号
+        /// </summary>
+        [JsonProperty("orgcode")]
+        public string Orgcode { get; set; }
+
+        /// <summary>
+        /// 支付宝账号数字ID
+        /// </summary>
+        [JsonProperty("uid")]
+        public string Uid { get; set; }
+
+        /// <summary>
+        /// 当前安装的支付宝钱包版本号
+        /// </summary>
+        [JsonProperty("version")]
+        public string Version { get; set; }
+    }
+}

+ 52 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayCreditCreditriskDataPutModel.cs

@@ -0,0 +1,52 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayCreditCreditriskDataPutModel Data Structure.
+    /// </summary>
+    public class AlipayCreditCreditriskDataPutModel : AlipayObject
+    {
+        /// <summary>
+        /// 数据类别,ISV注册成为网商银行的会员,达成数据合作服务,约定数据模型,由网商分配给ISV的数据模型的类别
+        /// </summary>
+        [JsonProperty("category")]
+        public string Category { get; set; }
+
+        /// <summary>
+        /// 外部机构编码(ISV注册成为网商银行的会员,ISV在网商的会员ID)
+        /// </summary>
+        [JsonProperty("dataorgid")]
+        public string Dataorgid { get; set; }
+
+        /// <summary>
+        /// 数据提供者,ISV注册成为网商银行的会员,达成数据合作服务,约定数据模型,由网商分配给ISV的机构代号
+        /// </summary>
+        [JsonProperty("dataprovider")]
+        public string Dataprovider { get; set; }
+
+        /// <summary>
+        /// 实体编码(ISV客户的支付宝数字ID)
+        /// </summary>
+        [JsonProperty("entitycode")]
+        public string Entitycode { get; set; }
+
+        /// <summary>
+        /// 实体名(ISV客户的支付宝登录号)
+        /// </summary>
+        [JsonProperty("entityname")]
+        public string Entityname { get; set; }
+
+        /// <summary>
+        /// 实体类型(固定为ALIPAY)
+        /// </summary>
+        [JsonProperty("entitytype")]
+        public string Entitytype { get; set; }
+
+        /// <summary>
+        /// Json格式,数据内容,ISV注册成为网商银行的会员,达成数据合作服务,约定json串字段和内容,ISV将数据给到网商,网商按照约定解析Json内容
+        /// </summary>
+        [JsonProperty("objectcontent")]
+        public string Objectcontent { get; set; }
+    }
+}

+ 22 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDaoweiWeikeTaskviewQueryModel.cs

@@ -0,0 +1,22 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDaoweiWeikeTaskviewQueryModel Data Structure.
+    /// </summary>
+    public class AlipayDaoweiWeikeTaskviewQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 当前城市城市码,精确到地级市级别.城市编码参考最新国家标准http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201703/t20170310_1471429.html
+        /// </summary>
+        [JsonProperty("city_code")]
+        public string CityCode { get; set; }
+
+        /// <summary>
+        /// 第三方调用场景来源,由微客分配
+        /// </summary>
+        [JsonProperty("source")]
+        public string Source { get; set; }
+    }
+}

+ 40 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataAiserviceJunengLoanQueryModel.cs

@@ -0,0 +1,40 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDataAiserviceJunengLoanQueryModel Data Structure.
+    /// </summary>
+    public class AlipayDataAiserviceJunengLoanQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 额外的信息,以 json 字符串的方式组织
+        /// </summary>
+        [JsonProperty("extension_info")]
+        public string ExtensionInfo { get; set; }
+
+        /// <summary>
+        /// 借款人身份证号的md5
+        /// </summary>
+        [JsonProperty("hashed_cert_no")]
+        public string HashedCertNo { get; set; }
+
+        /// <summary>
+        /// 机构代码,区别调用的外部机构
+        /// </summary>
+        [JsonProperty("institution_uuid")]
+        public string InstitutionUuid { get; set; }
+
+        /// <summary>
+        /// 单次请求的 uuid
+        /// </summary>
+        [JsonProperty("request_uuid")]
+        public string RequestUuid { get; set; }
+
+        /// <summary>
+        /// 用户属性,包含隐私保护数据和原始数据。
+        /// </summary>
+        [JsonProperty("user_feature")]
+        public string UserFeature { get; set; }
+    }
+}

+ 22 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceAntdacEasyserviceQueryModel.cs

@@ -0,0 +1,22 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDataDataserviceAntdacEasyserviceQueryModel Data Structure.
+    /// </summary>
+    public class AlipayDataDataserviceAntdacEasyserviceQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 调用方法id+询问antdac应用开发者获取+每个方法id对应一个真实调用的接口
+        /// </summary>
+        [JsonProperty("method_id")]
+        public string MethodId { get; set; }
+
+        /// <summary>
+        /// 方法所需参数+json字符串格式+method_id接口所需的参数
+        /// </summary>
+        [JsonProperty("parameter_json")]
+        public string ParameterJson { get; set; }
+    }
+}

+ 34 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceDatabusSendModel.cs

@@ -0,0 +1,34 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDataDataserviceDatabusSendModel Data Structure.
+    /// </summary>
+    public class AlipayDataDataserviceDatabusSendModel : AlipayObject
+    {
+        /// <summary>
+        /// 对应于adatabus这边的eventCode纬度,databus这边是通过topic+eventCode纬度来找到对应的数据源,用于适配databus这边的数据源模型,可以参考主站消息中心的topic和eventCode的命名方式。
+        /// </summary>
+        [JsonProperty("event_code")]
+        public string EventCode { get; set; }
+
+        /// <summary>
+        /// 传给adatabus的消息体,约定为json格式
+        /// </summary>
+        [JsonProperty("event_payload")]
+        public string EventPayload { get; set; }
+
+        /// <summary>
+        /// event_payload的类型,消息到了databus之后,会把event_payload的json串根据本参数转换成特定的类型。如果没有提供此参数,默认是转换成Map结构。    需要注意的是,这个类需要在adatabus中能找到,并且和当前的json串是匹配的,如果adatabus这边没有这个类,可以通过业务jar的方式在adatabus中注册
+        /// </summary>
+        [JsonProperty("payload_class")]
+        public string PayloadClass { get; set; }
+
+        /// <summary>
+        /// 对应于adatabus这边的topic纬度,databus这边是通过topic+eventCode纬度来找到对应的数据源,用于适配databus这边的数据源模型,可以参考主站消息中心的topic和eventCode的命名方式。
+        /// </summary>
+        [JsonProperty("topic")]
+        public string Topic { get; set; }
+    }
+}

+ 34 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceDeployorderDetailQueryModel.cs

@@ -0,0 +1,34 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDataDataserviceDeployorderDetailQueryModel Data Structure.
+    /// </summary>
+    public class AlipayDataDataserviceDeployorderDetailQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 描述:拉取的业务起始时间(不包含)  应用场景:管控中心启动后通过该参数获取增量发布的部署单  如何获取:获取本地部署单的最大时间
+        /// </summary>
+        [JsonProperty("biz_create_begin")]
+        public string BizCreateBegin { get; set; }
+
+        /// <summary>
+        /// 管控中心实例名称+唯一+通过该名称获取发布到该环境的部署单+无枚举值+通过页面配置自行定义
+        /// </summary>
+        [JsonProperty("biz_ins_name")]
+        public string BizInsName { get; set; }
+
+        /// <summary>
+        /// 描述:页数,从1开始  应用场景:分页获取增量部署单
+        /// </summary>
+        [JsonProperty("page")]
+        public long Page { get; set; }
+
+        /// <summary>
+        /// 每页大小
+        /// </summary>
+        [JsonProperty("size")]
+        public long Size { get; set; }
+    }
+}

+ 28 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceDeployorderResultSendModel.cs

@@ -0,0 +1,28 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDataDataserviceDeployorderResultSendModel Data Structure.
+    /// </summary>
+    public class AlipayDataDataserviceDeployorderResultSendModel : AlipayObject
+    {
+        /// <summary>
+        /// 部署单记录id
+        /// </summary>
+        [JsonProperty("record_id")]
+        public string RecordId { get; set; }
+
+        /// <summary>
+        /// 处理结果
+        /// </summary>
+        [JsonProperty("result")]
+        public string Result { get; set; }
+
+        /// <summary>
+        /// 是否成功
+        /// </summary>
+        [JsonProperty("success")]
+        public bool Success { get; set; }
+    }
+}

+ 47 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceHolographicFactorQueryModel.cs

@@ -0,0 +1,47 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDataDataserviceHolographicFactorQueryModel Data Structure.
+    /// </summary>
+    public class AlipayDataDataserviceHolographicFactorQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 参数中文名称:业务id  是否唯一:唯一  参数作用/应用场景:做幂等性控制  枚举值:无  如何获取:调用方生成传递过来  特殊说明:无
+        /// </summary>
+        [JsonProperty("biz_id")]
+        public string BizId { get; set; }
+
+        /// <summary>
+        /// 参数中文名称:身份证号  是否唯一:否  参数作用/应用场景:查询人脉因子和多头因子必备的用户三要素之一  枚举值:无  如何获取:商户传递给上数,上数传递到openapi  特殊说明:无
+        /// </summary>
+        [JsonProperty("cert_no")]
+        public string CertNo { get; set; }
+
+        /// <summary>
+        /// 参数中文名称:联系人列表  是否唯一:否  参数作用/应用场景:运行模型生成人脉因子必备的联系人列表参数  枚举值:无  如何获取:上数通过用户授权进行采集通讯录以及运营商报告,上数传递到openapi  特殊说明:无
+        /// </summary>
+        [JsonProperty("contact_info_list")]
+        public List<HoloGraphicContactInfo> ContactInfoList { get; set; }
+
+        /// <summary>
+        /// 参数中文名称:运营商特征  是否唯一:否  参数作用/应用场景:运行模型生成人脉因子必备的运营商特征参数  枚举值:无  如何获取:上数通过用户授权采集运营商报告之后实时加工生成的运营商特征,上数传递到openapi  特殊说明:无
+        /// </summary>
+        [JsonProperty("isv_feature")]
+        public string IsvFeature { get; set; }
+
+        /// <summary>
+        /// 参数中文名称:用户手机号  是否唯一:否  参数作用/应用场景:查询人脉因子和多头因子必备的用户三要素之一  枚举值:无  如何获取:商户传递给上数,上数传递到openapi  特殊说明:无
+        /// </summary>
+        [JsonProperty("mobile")]
+        public string Mobile { get; set; }
+
+        /// <summary>
+        /// 参数中文名称:用户姓名  是否唯一:否  参数作用/应用场景:查询人脉因子和多头因子必备的用户三要素之一  枚举值:无  如何获取:商户传递给上数,上数传递到openapi  特殊说明:无
+        /// </summary>
+        [JsonProperty("user_name")]
+        public string UserName { get; set; }
+    }
+}

+ 52 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceLbsDiscountBatchqueryModel.cs

@@ -0,0 +1,52 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDataDataserviceLbsDiscountBatchqueryModel Data Structure.
+    /// </summary>
+    public class AlipayDataDataserviceLbsDiscountBatchqueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 媒体编号,使用前需要找业务申请 ,不申请直接调用会失败
+        /// </summary>
+        [JsonProperty("channel")]
+        public string Channel { get; set; }
+
+        /// <summary>
+        /// 手机IMEI号,imei、user_id、mobile三者必须且只能填一个
+        /// </summary>
+        [JsonProperty("imei")]
+        public string Imei { get; set; }
+
+        /// <summary>
+        /// 纬度
+        /// </summary>
+        [JsonProperty("latitude")]
+        public string Latitude { get; set; }
+
+        /// <summary>
+        /// 经度
+        /// </summary>
+        [JsonProperty("longitude")]
+        public string Longitude { get; set; }
+
+        /// <summary>
+        /// 手机号码,imei、user_id、mobile三者必须且只能填一个
+        /// </summary>
+        [JsonProperty("mobile")]
+        public string Mobile { get; set; }
+
+        /// <summary>
+        /// 输出的券列表大小
+        /// </summary>
+        [JsonProperty("size")]
+        public long Size { get; set; }
+
+        /// <summary>
+        /// 支付宝用户ID,imei、user_id、mobile三者必须且只能填一个
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 40 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceShoppingmallrecShopandvoucherQueryModel.cs

@@ -0,0 +1,40 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDataDataserviceShoppingmallrecShopandvoucherQueryModel Data Structure.
+    /// </summary>
+    public class AlipayDataDataserviceShoppingmallrecShopandvoucherQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 纬度;注:高德坐标系。经纬度是门店搜索和活动推荐的重要参数,录入时请确保经纬度参数准确。高德经纬度查询:http://lbs.amap.com/console/show/picker
+        /// </summary>
+        [JsonProperty("latitude")]
+        public string Latitude { get; set; }
+
+        /// <summary>
+        /// 经度;注:高德坐标系。经纬度是门店搜索和活动推荐的重要参数,录入时请确保经纬度参数准确。高德经纬度查询:http://lbs.amap.com/console/show/picker
+        /// </summary>
+        [JsonProperty("longitude")]
+        public string Longitude { get; set; }
+
+        /// <summary>
+        /// 商场id
+        /// </summary>
+        [JsonProperty("mall_id")]
+        public string MallId { get; set; }
+
+        /// <summary>
+        /// 本次请求的全局唯一标识, 支持英文字母和数字, 由开发者自行定义
+        /// </summary>
+        [JsonProperty("request_id")]
+        public string RequestId { get; set; }
+
+        /// <summary>
+        /// 系统内支付宝用户唯一标识id. 支付宝用户号是以2088开头的纯数字组成
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 23 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceVerificationResultSendModel.cs

@@ -0,0 +1,23 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDataDataserviceVerificationResultSendModel Data Structure.
+    /// </summary>
+    public class AlipayDataDataserviceVerificationResultSendModel : AlipayObject
+    {
+        /// <summary>
+        /// 部署单记录id
+        /// </summary>
+        [JsonProperty("record_id")]
+        public long RecordId { get; set; }
+
+        /// <summary>
+        /// 验证结果列表
+        /// </summary>
+        [JsonProperty("result_items")]
+        public List<DxVerifyResultItem> ResultItems { get; set; }
+    }
+}

+ 17 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceYuebaoassetDetailSendModel.cs

@@ -0,0 +1,17 @@
+using Newtonsoft.Json;
+using System.Collections.Generic;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDataDataserviceYuebaoassetDetailSendModel Data Structure.
+    /// </summary>
+    public class AlipayDataDataserviceYuebaoassetDetailSendModel : AlipayObject
+    {
+        /// <summary>
+        /// 资产负债报表数据列表
+        /// </summary>
+        [JsonProperty("alm_report_data")]
+        public List<AlmReportData> AlmReportData { get; set; }
+    }
+}

+ 16 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataDataserviceYuebaolqdDetailQueryModel.cs

@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDataDataserviceYuebaolqdDetailQueryModel Data Structure.
+    /// </summary>
+    public class AlipayDataDataserviceYuebaolqdDetailQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 服务入参,格式为yyyymmdd
+        /// </summary>
+        [JsonProperty("report_date")]
+        public string ReportDate { get; set; }
+    }
+}

+ 34 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayDataServiceResult.cs

@@ -0,0 +1,34 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayDataServiceResult Data Structure.
+    /// </summary>
+    public class AlipayDataServiceResult : AlipayObject
+    {
+        /// <summary>
+        /// 错误码
+        /// </summary>
+        [JsonProperty("code")]
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 错误信息
+        /// </summary>
+        [JsonProperty("message")]
+        public string Message { get; set; }
+
+        /// <summary>
+        /// 调用结果,json格式
+        /// </summary>
+        [JsonProperty("result")]
+        public string Result { get; set; }
+
+        /// <summary>
+        /// 调用是否成功
+        /// </summary>
+        [JsonProperty("success")]
+        public bool Success { get; set; }
+    }
+}

+ 52 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppBillRefundModel.cs

@@ -0,0 +1,52 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppBillRefundModel Data Structure.
+    /// </summary>
+    public class AlipayEbppBillRefundModel : AlipayObject
+    {
+        /// <summary>
+        /// 支付宝流水号。
+        /// </summary>
+        [JsonProperty("alipay_bill_no")]
+        public string AlipayBillNo { get; set; }
+
+        /// <summary>
+        /// 扩展字段,json格式的一系列键值对,示例只是个形式,具体的Key-Value需要根据具体业务另行约定。  无特别约定时,此字段不必传。
+        /// </summary>
+        [JsonProperty("extend_field")]
+        public string ExtendField { get; set; }
+
+        /// <summary>
+        /// 退款备注
+        /// </summary>
+        [JsonProperty("memo")]
+        public string Memo { get; set; }
+
+        /// <summary>
+        /// ISV流水号,用于控制幂等,须确保全局唯一(缴税业务:可采用{征收机关代码}-{外部申报号}的形式)  out_order_no与alipay_bill_no二者中至少要传一个
+        /// </summary>
+        [JsonProperty("out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        /// <summary>
+        /// 退款金额,单位:元  不可超过创单时的金额。  如果scene是TOTAL_FAILURE,则强制要求全额退款,不支持部分退款。
+        /// </summary>
+        [JsonProperty("refund_amount")]
+        public string RefundAmount { get; set; }
+
+        /// <summary>
+        /// 退款来源账户。  仅在退款请求对应的业务流水资金已经结算的情况下有用,不指定则不能对已结算业务流水发起退款。  取值可以给定受管控账户2088****************,需要事先在支付宝备案通过方可使用;亦可以填入THIS_ACCOUNT,表示会从当前调用者的账户退款给用户。
+        /// </summary>
+        [JsonProperty("refund_from")]
+        public string RefundFrom { get; set; }
+
+        /// <summary>
+        /// 退款场景,不同场景由不同策略处理。  OVERPAYMENT:退掉用户多支付的金额  PARTIALLY_DONE:业务上部分失败导致退款  TOTAL_FAILURE:完全失败导致的退款
+        /// </summary>
+        [JsonProperty("scene")]
+        public string Scene { get; set; }
+    }
+}

+ 16 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppCommonBillQueryModel.cs

@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppCommonBillQueryModel Data Structure.
+    /// </summary>
+    public class AlipayEbppCommonBillQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 支付宝账单流水号(取自创建账单接口返回的alipay_order_no字段)
+        /// </summary>
+        [JsonProperty("bill_no")]
+        public string BillNo { get; set; }
+    }
+}

+ 28 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppCommonBillkeyQueryModel.cs

@@ -0,0 +1,28 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppCommonBillkeyQueryModel Data Structure.
+    /// </summary>
+    public class AlipayEbppCommonBillkeyQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 业务类型缩写:  JF-缴费
+        /// </summary>
+        [JsonProperty("biz_type")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 出账机构缩写
+        /// </summary>
+        [JsonProperty("charge_inst")]
+        public string ChargeInst { get; set; }
+
+        /// <summary>
+        /// 子业务类型英文名称:  ELECTRIC-电力  GAS-燃气  WATER-水
+        /// </summary>
+        [JsonProperty("sub_biz_type")]
+        public string SubBizType { get; set; }
+    }
+}

+ 52 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppCommonNotifySendModel.cs

@@ -0,0 +1,52 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppCommonNotifySendModel Data Structure.
+    /// </summary>
+    public class AlipayEbppCommonNotifySendModel : AlipayObject
+    {
+        /// <summary>
+        /// 水电燃等机构为用户分配的户号
+        /// </summary>
+        [JsonProperty("bill_key")]
+        public string BillKey { get; set; }
+
+        /// <summary>
+        /// 业务类型的缩写:  JF-缴费
+        /// </summary>
+        [JsonProperty("biz_type")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 出账机构的缩写
+        /// </summary>
+        [JsonProperty("charge_inst")]
+        public string ChargeInst { get; set; }
+
+        /// <summary>
+        /// 特定通知类型可能需要提供扩展信息,用JSON字符串描述
+        /// </summary>
+        [JsonProperty("extend_data")]
+        public string ExtendData { get; set; }
+
+        /// <summary>
+        /// 机构为用户发送通知的类型,需要与支付宝协商确定
+        /// </summary>
+        [JsonProperty("notify_type")]
+        public string NotifyType { get; set; }
+
+        /// <summary>
+        /// 子业务类型英文名称:  ELECTRIC-电力  GAS-燃气  WATER-水
+        /// </summary>
+        [JsonProperty("sub_biz_type")]
+        public string SubBizType { get; set; }
+
+        /// <summary>
+        /// 支付宝用户id,可空,用于特定场景下向指定用户发送通知
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 34 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppFacepayBillCancelModel.cs

@@ -0,0 +1,34 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppFacepayBillCancelModel Data Structure.
+    /// </summary>
+    public class AlipayEbppFacepayBillCancelModel : AlipayObject
+    {
+        /// <summary>
+        /// 支付宝交易流水号(和user_identity_code、user_id三者至少传一个)
+        /// </summary>
+        [JsonProperty("bill_no")]
+        public string BillNo { get; set; }
+
+        /// <summary>
+        /// ISV交易流水号( 要求全局唯一)
+        /// </summary>
+        [JsonProperty("out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        /// <summary>
+        /// 支付宝用户ID(和user_identity_code、bill_no三者至少传一个)
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+
+        /// <summary>
+        /// 用户支付宝付款码(需使用下单时用的码值,10分钟内有效)(和user_id、bill_no三者至少传一个)
+        /// </summary>
+        [JsonProperty("user_identity_code")]
+        public string UserIdentityCode { get; set; }
+    }
+}

+ 82 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppFacepayBillPayModel.cs

@@ -0,0 +1,82 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppFacepayBillPayModel Data Structure.
+    /// </summary>
+    public class AlipayEbppFacepayBillPayModel : AlipayObject
+    {
+        /// <summary>
+        /// 账期
+        /// </summary>
+        [JsonProperty("bill_date")]
+        public string BillDate { get; set; }
+
+        /// <summary>
+        /// 户号(缴税业务:纳税人识别号,对于三证合一的企业来说,采用社会信用代码;对于个人来说,采用身份证号)
+        /// </summary>
+        [JsonProperty("bill_key")]
+        public string BillKey { get; set; }
+
+        /// <summary>
+        /// 业务类型英文名称,JF-缴费、TAX-缴税
+        /// </summary>
+        [JsonProperty("biz_type")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 出账机构代码(缴税业务:指征收机关英文代码,例如南京玄武国税(NJXWGS))
+        /// </summary>
+        [JsonProperty("charge_inst")]
+        public string ChargeInst { get; set; }
+
+        /// <summary>
+        /// 扩展字段(缴税业务:taxpayerName -纳税人名称,taxOrgCode - 征收机关代码;缴费业务如需支付宝销账:billCacheKey -欠费单缓存Key,billUniqId - 欠费单唯一ID)
+        /// </summary>
+        [JsonProperty("extend_field")]
+        public string ExtendField { get; set; }
+
+        /// <summary>
+        /// 滞纳金额,单位:元
+        /// </summary>
+        [JsonProperty("fine_amount")]
+        public string FineAmount { get; set; }
+
+        /// <summary>
+        /// 机构账单ID(缴税业务:用外部申报号)
+        /// </summary>
+        [JsonProperty("inst_no")]
+        public string InstNo { get; set; }
+
+        /// <summary>
+        /// ISV流水号,用于控制幂等,须确保全局唯一(缴税业务:可采用{征收机关代码}-{外部申报号}的形式)
+        /// </summary>
+        [JsonProperty("out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        /// <summary>
+        /// 支付金额(包含滞纳金),单位:元
+        /// </summary>
+        [JsonProperty("pay_amount")]
+        public string PayAmount { get; set; }
+
+        /// <summary>
+        /// 商户partnerId
+        /// </summary>
+        [JsonProperty("pid")]
+        public string Pid { get; set; }
+
+        /// <summary>
+        /// 子业务类型英文名称,ELECTRIC-电费,WATER-水费,GAS-燃气费,TAX-缴税
+        /// </summary>
+        [JsonProperty("sub_biz_type")]
+        public string SubBizType { get; set; }
+
+        /// <summary>
+        /// 用户支付宝付款码
+        /// </summary>
+        [JsonProperty("user_identity_code")]
+        public string UserIdentityCode { get; set; }
+    }
+}

+ 34 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppFacepayBillQueryModel.cs

@@ -0,0 +1,34 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppFacepayBillQueryModel Data Structure.
+    /// </summary>
+    public class AlipayEbppFacepayBillQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 支付宝交易流水号(和user_id、user_identity_code三者至少传一个)   (缴税业务:out_order_no/user_id/bill_no都可以不传)
+        /// </summary>
+        [JsonProperty("bill_no")]
+        public string BillNo { get; set; }
+
+        /// <summary>
+        /// ISV流水号,用于控制幂等,须确保全局唯一。  (缴税业务:可采用{征收机关代码}-{外部申报号}的形式)
+        /// </summary>
+        [JsonProperty("out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        /// <summary>
+        /// 支付宝用户ID(和user_identity_code、bill_no三者至少传一个)   (缴税业务:out_order_no/user_id/bill_no都可以不传)
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+
+        /// <summary>
+        /// 用户支付宝付款码 (需使用下单时用的码值,10分钟内有效)(和user_id、bill_no三者至少传一个)  (缴税业务:out_order_no/user_id/bill_no都可以不传)
+        /// </summary>
+        [JsonProperty("user_identity_code")]
+        public string UserIdentityCode { get; set; }
+    }
+}

+ 94 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppIndustryOrderCreateModel.cs

@@ -0,0 +1,94 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppIndustryOrderCreateModel Data Structure.
+    /// </summary>
+    public class AlipayEbppIndustryOrderCreateModel : AlipayObject
+    {
+        /// <summary>
+        /// 账单的账期,例如201703表示2017年3月的账单。
+        /// </summary>
+        [JsonProperty("bill_date")]
+        public string BillDate { get; set; }
+
+        /// <summary>
+        /// 业务账户号,例如水费单号,手机号,电费号,信用卡卡号。没有唯一性要求。
+        /// </summary>
+        [JsonProperty("bill_key")]
+        public string BillKey { get; set; }
+
+        /// <summary>
+        /// 用户创建订单时涉及到的业务总金额。单位为:RMB Yuan。取值范围为[0.01,100000000.00),精确到小数点后两位。
+        /// </summary>
+        [JsonProperty("biz_amount")]
+        public string BizAmount { get; set; }
+
+        /// <summary>
+        /// 机构简称例如杭州电力HZELECTRIC
+        /// </summary>
+        [JsonProperty("biz_inst_short_name")]
+        public string BizInstShortName { get; set; }
+
+        /// <summary>
+        /// 业务类型,缴费业务为JF,还款业务HK,公服行业为IND。
+        /// </summary>
+        [JsonProperty("biz_type")]
+        public string BizType { get; set; }
+
+        /// <summary>
+        /// 城市编码,国标码
+        /// </summary>
+        [JsonProperty("city_code")]
+        public string CityCode { get; set; }
+
+        /// <summary>
+        /// 扩展属性,json串(key-value对)
+        /// </summary>
+        [JsonProperty("extend_field")]
+        public string ExtendField { get; set; }
+
+        /// <summary>
+        /// 滞纳金额,单位:元
+        /// </summary>
+        [JsonProperty("fine_amount")]
+        public string FineAmount { get; set; }
+
+        /// <summary>
+        /// 身份标识号,例如身份证号、纳税人识别号等。
+        /// </summary>
+        [JsonProperty("identity_no")]
+        public string IdentityNo { get; set; }
+
+        /// <summary>
+        /// 用户的手机号
+        /// </summary>
+        [JsonProperty("mobile")]
+        public string Mobile { get; set; }
+
+        /// <summary>
+        /// ISV流水号,用于控制幂等,须确保全局唯一
+        /// </summary>
+        [JsonProperty("out_order_no")]
+        public string OutOrderNo { get; set; }
+
+        /// <summary>
+        /// 拥有该订单的用户姓名
+        /// </summary>
+        [JsonProperty("owner_name")]
+        public string OwnerName { get; set; }
+
+        /// <summary>
+        /// 省份编码,国标码
+        /// </summary>
+        [JsonProperty("province_code")]
+        public string ProvinceCode { get; set; }
+
+        /// <summary>
+        /// 子业务类型,水费为WATER,燃气费为GAS,社保为SI,公积金为HF,社保+公积金为SIHF
+        /// </summary>
+        [JsonProperty("sub_biz_type")]
+        public string SubBizType { get; set; }
+    }
+}

+ 16 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppIndustryOrderQueryModel.cs

@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppIndustryOrderQueryModel Data Structure.
+    /// </summary>
+    public class AlipayEbppIndustryOrderQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// ISV流水号,用于控制幂等,须确保全局唯一
+        /// </summary>
+        [JsonProperty("out_order_no")]
+        public string OutOrderNo { get; set; }
+    }
+}

+ 46 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceApplyModel.cs

@@ -0,0 +1,46 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppInvoiceApplyModel Data Structure.
+    /// </summary>
+    public class AlipayEbppInvoiceApplyModel : AlipayObject
+    {
+        /// <summary>
+        /// 执行动作:申请开票/申请红冲  可选取值:  BLUE:申请开票;RED:申请红冲
+        /// </summary>
+        [JsonProperty("action")]
+        public string Action { get; set; }
+
+        /// <summary>
+        /// 申请发起方,描述开票申请的发起角色,  可选取值:  PAYEE:销售方;PAYER:购买方
+        /// </summary>
+        [JsonProperty("apply_from")]
+        public string ApplyFrom { get; set; }
+
+        /// <summary>
+        /// 发票申请内容
+        /// </summary>
+        [JsonProperty("invoice_apply_model")]
+        public InvoiceApplyOpenModel InvoiceApplyModel { get; set; }
+
+        /// <summary>
+        /// 定义商户的一级简称,用于标识商户品牌,对应于商户入驻时填写的"商户品牌简称"。  如:肯德基:KFC
+        /// </summary>
+        [JsonProperty("m_short_name")]
+        public string MShortName { get; set; }
+
+        /// <summary>
+        /// 定义商户的二级简称,用于标识商户品牌下的分支机构,如门店,对应于商户入驻时填写的"商户门店简称"。  如:肯德基-杭州西湖区文一西路店:KFC-HZ-19003  要求:"商户品牌简称+商户门店简称"作为确定商户及其下属机构的唯一标识,不可重复。
+        /// </summary>
+        [JsonProperty("sub_m_short_name")]
+        public string SubMShortName { get; set; }
+
+        /// <summary>
+        /// 支付宝用户id,支付宝用户的唯一标识。
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 40 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceApplyResultSyncModel.cs

@@ -0,0 +1,40 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppInvoiceApplyResultSyncModel Data Structure.
+    /// </summary>
+    public class AlipayEbppInvoiceApplyResultSyncModel : AlipayObject
+    {
+        /// <summary>
+        /// 支付宝发起发票申请的id,该id具有唯一性,该字段由支付宝向税控发起申请的时候带过去,作为支付宝向税控开票申请的唯一标志
+        /// </summary>
+        [JsonProperty("apply_id")]
+        public string ApplyId { get; set; }
+
+        /// <summary>
+        /// 支付宝向税控商或ISV发起发票申请后,对应这笔申请的发票开具结果。  取值如下:  SUCCESS:成功;FAIL:失败
+        /// </summary>
+        [JsonProperty("result")]
+        public string Result { get; set; }
+
+        /// <summary>
+        /// 结果码,支付宝向税控商或ISV发起发票申请后,对应这笔申请的发票开具结果进行详细说明的结果码。  取值如下:  成功(SUCCESS),  参数不合法(PARAMETER_ILLEGAL),  商户税控设备异常(MERCHANT_TAX_DEVICE_ERROR).
+        /// </summary>
+        [JsonProperty("result_code")]
+        public string ResultCode { get; set; }
+
+        /// <summary>
+        /// 结果描述,支付宝向税控商或ISV发起发票申请后,对应这笔申请的发票开具结果描述信息。
+        /// </summary>
+        [JsonProperty("result_msg")]
+        public string ResultMsg { get; set; }
+
+        /// <summary>
+        /// 该字段是税控商或ISV收到支付宝开票请求后生成的申请id,由税控商或isv自己生成,该id具有唯一性
+        /// </summary>
+        [JsonProperty("tax_apply_id")]
+        public string TaxApplyId { get; set; }
+    }
+}

+ 34 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceDetailOutputQueryModel.cs

@@ -0,0 +1,34 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppInvoiceDetailOutputQueryModel Data Structure.
+    /// </summary>
+    public class AlipayEbppInvoiceDetailOutputQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 发票代码  长度限制(10-12位)
+        /// </summary>
+        [JsonProperty("invoice_code")]
+        public string InvoiceCode { get; set; }
+
+        /// <summary>
+        /// 发票号码  长度限制(8-10位)
+        /// </summary>
+        [JsonProperty("invoice_no")]
+        public string InvoiceNo { get; set; }
+
+        /// <summary>
+        /// 获取发票明细应用场景  固定值:INVOICE_EXPENSE-发票报销
+        /// </summary>
+        [JsonProperty("scene")]
+        public string Scene { get; set; }
+
+        /// <summary>
+        /// 支付宝用户id
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 70 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceExpenseProgressSyncModel.cs

@@ -0,0 +1,70 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppInvoiceExpenseProgressSyncModel Data Structure.
+    /// </summary>
+    public class AlipayEbppInvoiceExpenseProgressSyncModel : AlipayObject
+    {
+        /// <summary>
+        /// 同步申请id,每次发起同步时生成,isv每次请求需要保证唯一
+        /// </summary>
+        [JsonProperty("apply_id")]
+        public string ApplyId { get; set; }
+
+        /// <summary>
+        /// 报销状态变更执行时间
+        /// </summary>
+        [JsonProperty("business_time")]
+        public string BusinessTime { get; set; }
+
+        /// <summary>
+        /// 报销详情地址,提供用户通过发票管家查看报销进度的地址  如果报销企业入驻发票管家时需要isv传入报销详情地址,则必须提供
+        /// </summary>
+        [JsonProperty("expense_detail_url")]
+        public string ExpenseDetailUrl { get; set; }
+
+        /// <summary>
+        /// 报销单据号
+        /// </summary>
+        [JsonProperty("expense_order_no")]
+        public string ExpenseOrderNo { get; set; }
+
+        /// <summary>
+        /// 报销企业税号
+        /// </summary>
+        [JsonProperty("expense_tax_no")]
+        public string ExpenseTaxNo { get; set; }
+
+        /// <summary>
+        /// 发票代码
+        /// </summary>
+        [JsonProperty("invoice_code")]
+        public string InvoiceCode { get; set; }
+
+        /// <summary>
+        /// 发票号码
+        /// </summary>
+        [JsonProperty("invoice_no")]
+        public string InvoiceNo { get; set; }
+
+        /// <summary>
+        /// 备注
+        /// </summary>
+        [JsonProperty("memo")]
+        public string Memo { get; set; }
+
+        /// <summary>
+        /// 报销操作  传值固定:  EXPENSE_APPLY-用户已提交申请  EXPENSE_APPROVAL_PASS -报销审核通过  EXPENSE_FINISHED-报销完结  EXPENSE_CANCEL-报销撤回
+        /// </summary>
+        [JsonProperty("status")]
+        public string Status { get; set; }
+
+        /// <summary>
+        /// 支付宝用户id
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 34 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceFileOutputQueryModel.cs

@@ -0,0 +1,34 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppInvoiceFileOutputQueryModel Data Structure.
+    /// </summary>
+    public class AlipayEbppInvoiceFileOutputQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 发票代码  字段长度(10-12位)
+        /// </summary>
+        [JsonProperty("invoice_code")]
+        public string InvoiceCode { get; set; }
+
+        /// <summary>
+        /// 发票号码  字段长度(8-10位)
+        /// </summary>
+        [JsonProperty("invoice_no")]
+        public string InvoiceNo { get; set; }
+
+        /// <summary>
+        /// 发票pdf文件下载应用场景  固定值-INVOICE_EXPENSE
+        /// </summary>
+        [JsonProperty("scene")]
+        public string Scene { get; set; }
+
+        /// <summary>
+        /// 支付宝用户id
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

+ 16 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceFileQueryModel.cs

@@ -0,0 +1,16 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppInvoiceFileQueryModel Data Structure.
+    /// </summary>
+    public class AlipayEbppInvoiceFileQueryModel : AlipayObject
+    {
+        /// <summary>
+        /// 支付宝端生成的发票id,该字段可从发票详情查询接口获得
+        /// </summary>
+        [JsonProperty("invoice_id")]
+        public string InvoiceId { get; set; }
+    }
+}

+ 52 - 0
src/Essensoft.AspNetCore.Alipay/Domain/AlipayEbppInvoiceFileSyncRetryModel.cs

@@ -0,0 +1,52 @@
+using Newtonsoft.Json;
+
+namespace Essensoft.AspNetCore.Alipay.Domain
+{
+    /// <summary>
+    /// AlipayEbppInvoiceFileSyncRetryModel Data Structure.
+    /// </summary>
+    public class AlipayEbppInvoiceFileSyncRetryModel : AlipayObject
+    {
+        /// <summary>
+        /// 发票代码
+        /// </summary>
+        [JsonProperty("einv_code")]
+        public string EinvCode { get; set; }
+
+        /// <summary>
+        /// 发票号码
+        /// </summary>
+        [JsonProperty("einv_no")]
+        public string EinvNo { get; set; }
+
+        /// <summary>
+        /// 文件下载链接,在is_url_replace为true的时候,该字段必填
+        /// </summary>
+        [JsonProperty("file_url")]
+        public string FileUrl { get; set; }
+
+        /// <summary>
+        /// 是否需要替换文件下载链接
+        /// </summary>
+        [JsonProperty("is_url_replace")]
+        public bool IsUrlReplace { get; set; }
+
+        /// <summary>
+        /// 商户简称,userId未传的时候,该字段必填
+        /// </summary>
+        [JsonProperty("m_short_name")]
+        public string MShortName { get; set; }
+
+        /// <summary>
+        /// 外部交易流水号,userId未传的情况下,该字段必填
+        /// </summary>
+        [JsonProperty("out_biz_no")]
+        public string OutBizNo { get; set; }
+
+        /// <summary>
+        /// 蚂蚁统一会员ID,该字段未传的情况下,商户简称和外部交易流水号必填
+        /// </summary>
+        [JsonProperty("user_id")]
+        public string UserId { get; set; }
+    }
+}

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