Browse Source

发布 1.0.2 版本

修复WeChatPay退款通知无效的问题
Roc 7 years ago
parent
commit
44b1d00c54

+ 7 - 1
.gitignore

@@ -258,4 +258,10 @@ paket-files/
 
 # Python Tools for Visual Studio (PTVS)
 __pycache__/
-*.pyc
+*.pyc
+/samples/WebApplicationSample/Properties/PublishProfiles/FolderProfile.pubxml
+/src/Essensoft.AspNetCore.Alipay/Properties/PublishProfiles
+/src/Essensoft.AspNetCore.JdPay/Properties/PublishProfiles
+/src/Essensoft.AspNetCore.QPay/Properties/PublishProfiles
+/src/Essensoft.AspNetCore.Security/Properties/PublishProfiles
+/src/Essensoft.AspNetCore.WeChatPay/Properties/PublishProfiles

+ 17 - 1
Payment.sln

@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 15
-VisualStudioVersion = 15.0.26730.16
+VisualStudioVersion = 15.0.27130.2003
 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
@@ -19,6 +19,12 @@ 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}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MigrationAopSdk", "tools\MigrationAopSdk\MigrationAopSdk.csproj", "{235EEBA8-397C-4B1A-B203-529CD3565DA1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GetCertificateBase64String", "tools\GetCertificateBase64String\GetCertificateBase64String.csproj", "{F1F07E97-3A95-45E3-9AE9-E83B18AFCE31}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -49,6 +55,14 @@ 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
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -60,6 +74,8 @@ Global
 		{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}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {793B69BC-D173-4B88-9DAD-72861AD84858}

+ 2 - 2
README.MD

@@ -3,9 +3,9 @@
 <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>QQ交流群:<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=aac56c8f02f54893267d3ac90787c1794a7687f3c31a923812a36b67c4ee6271">522457525 (.Net Core Payment)</a></p>
+<p>QQ交流群:<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=aac56c8f02f54893267d3ac90787c1794a7687f3c31a923812a36b67c4ee6271">522457525(Payment)</a></p>
 <h3>*注意:</h3>
-<p>1.示例开发环境:Windows10、VS2017 15.4.4、.Net Core 2.0.3</p>
+<p>1.示例开发环境:Windows 10、VS2017 15.5.4、.NET Core Runtime 2.0.5</p>
 <p>2.支持渠道:支付宝、微信支付、QQ钱包、京东支付(仅扫码支付)。</p>
 <h3>使用方式</h3>
 <p>见示例项目:WebApplicationSample</p>

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

@@ -61,7 +61,7 @@ namespace WebApplicationSample.Controllers
         [HttpPost]
         public async Task<IActionResult> PreCreate(string out_trade_no, string subject, string total_amount, string body, string notify_url)
         {
-            var builder = new AlipayTradePrecreateModel()
+            var model = new AlipayTradePrecreateModel()
             {
                 Body = body,
                 Subject = subject,
@@ -69,7 +69,7 @@ namespace WebApplicationSample.Controllers
                 OutTradeNo = out_trade_no,
             };
             var req = new AlipayTradePrecreateRequest();
-            req.SetBizModel(builder);
+            req.SetBizModel(model);
             req.SetNotifyUrl(notify_url);
 
             var response = await _client.ExecuteAsync(req);
@@ -79,7 +79,7 @@ namespace WebApplicationSample.Controllers
         [HttpPost]
         public async Task<IActionResult> Pay(string out_trade_no, string scene, string auth_code, string subject, string total_amount, string body, string notify_url)
         {
-            var builder = new AlipayTradePayModel()
+            var model = new AlipayTradePayModel()
             {
                 Scene = scene,
                 AuthCode = auth_code,
@@ -89,7 +89,7 @@ namespace WebApplicationSample.Controllers
                 OutTradeNo = out_trade_no,
             };
             var req = new AlipayTradePayRequest();
-            req.SetBizModel(builder);
+            req.SetBizModel(model);
             req.SetNotifyUrl(notify_url);
 
             var response = await _client.ExecuteAsync(req);
@@ -100,14 +100,14 @@ namespace WebApplicationSample.Controllers
         [HttpPost]
         public async Task<IActionResult> Query(string out_trade_no, string trade_no)
         {
-            var builder = new AlipayTradeQueryModel()
+            var model = new AlipayTradeQueryModel()
             {
                 OutTradeNo = out_trade_no,
                 TradeNo = trade_no
             };
 
             var req = new AlipayTradeQueryRequest();
-            req.SetBizModel(builder);
+            req.SetBizModel(model);
 
             var response = await _client.ExecuteAsync(req);
             return Ok(response.Body);
@@ -116,7 +116,7 @@ namespace WebApplicationSample.Controllers
         [HttpPost]
         public async Task<IActionResult> Refund(string out_trade_no, string trade_no, string refund_amount, string refund_reason, string out_request_no)
         {
-            var builder = new AlipayTradeRefundModel()
+            var model = new AlipayTradeRefundModel()
             {
                 OutTradeNo = out_trade_no,
                 TradeNo = trade_no,
@@ -126,7 +126,7 @@ namespace WebApplicationSample.Controllers
             };
 
             var req = new AlipayTradeRefundRequest();
-            req.SetBizModel(builder);
+            req.SetBizModel(model);
 
             var response = await _client.ExecuteAsync(req);
             return Ok(response.Body);
@@ -135,7 +135,7 @@ namespace WebApplicationSample.Controllers
         [HttpPost]
         public async Task<IActionResult> RefundQuery(string out_trade_no, string trade_no, string out_request_no)
         {
-            var builder = new AlipayTradeFastpayRefundQueryModel()
+            var model = new AlipayTradeFastpayRefundQueryModel()
             {
                 OutTradeNo = out_trade_no,
                 TradeNo = trade_no,
@@ -143,7 +143,7 @@ namespace WebApplicationSample.Controllers
             };
 
             var req = new AlipayTradeFastpayRefundQueryRequest();
-            req.SetBizModel(builder);
+            req.SetBizModel(model);
 
             var response = await _client.ExecuteAsync(req);
             return Ok(response.Body);
@@ -152,14 +152,14 @@ namespace WebApplicationSample.Controllers
         [HttpPost]
         public async Task<IActionResult> Close(string out_trade_no, string trade_no)
         {
-            var builder = new AlipayTradeCloseModel()
+            var model = new AlipayTradeCloseModel()
             {
                 OutTradeNo = out_trade_no,
                 TradeNo = trade_no,
             };
 
             var req = new AlipayTradeCloseRequest();
-            req.SetBizModel(builder);
+            req.SetBizModel(model);
 
             var response = await _client.ExecuteAsync(req);
             return Ok(response.Body);
@@ -168,7 +168,7 @@ namespace WebApplicationSample.Controllers
         [HttpPost]
         public async Task<IActionResult> Trans(string out_biz_no, string payee_account, string payee_type, string amount, string remark)
         {
-            var builder = new AlipayFundTransToaccountTransferModel()
+            var model = new AlipayFundTransToaccountTransferModel()
             {
                 OutBizNo = out_biz_no,
                 PayeeType = payee_type,
@@ -177,7 +177,7 @@ namespace WebApplicationSample.Controllers
                 Remark = remark
             };
             var req = new AlipayFundTransToaccountTransferRequest();
-            req.SetBizModel(builder);
+            req.SetBizModel(model);
             var response = await _client.ExecuteAsync(req);
             return Ok(response.Body);
         }
@@ -185,14 +185,14 @@ namespace WebApplicationSample.Controllers
         [HttpPost]
         public async Task<IActionResult> TransQuery(string out_biz_no, string order_id)
         {
-            var builder = new AlipayFundTransOrderQueryModel()
+            var model = new AlipayFundTransOrderQueryModel()
             {
                 OutBizNo = out_biz_no,
                 OrderId = order_id,
             };
 
             var req = new AlipayFundTransOrderQueryRequest();
-            req.SetBizModel(builder);
+            req.SetBizModel(model);
             var response = await _client.ExecuteAsync(req);
             return Ok(response.Body);
         }
@@ -200,14 +200,14 @@ namespace WebApplicationSample.Controllers
         [HttpPost]
         public async Task<IActionResult> BillDownloadurlQuery(string bill_date, string bill_type)
         {
-            var builder = new AlipayDataDataserviceBillDownloadurlQueryModel()
+            var model = new AlipayDataDataserviceBillDownloadurlQueryModel()
             {
                 BillDate = bill_date,
                 BillType = bill_type
             };
 
             var req = new AlipayDataDataserviceBillDownloadurlQueryRequest();
-            req.SetBizModel(builder);
+            req.SetBizModel(model);
             var response = await _client.ExecuteAsync(req);
             return Ok(response.Body);
         }

+ 2 - 2
samples/WebApplicationSample/Views/Home/Index.cshtml

@@ -21,9 +21,9 @@
             <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>QQ交流群:<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=aac56c8f02f54893267d3ac90787c1794a7687f3c31a923812a36b67c4ee6271">522457525 (.Net Core Payment)</a></p>
+            <p>QQ交流群:<a target="_blank" href="//shang.qq.com/wpa/qunwpa?idkey=aac56c8f02f54893267d3ac90787c1794a7687f3c31a923812a36b67c4ee6271">522457525(Payment)</a></p>
             <h3>*注意:</h3>
-            <p>1.示例开发环境:Windows10、VS2017 15.4.4、.Net Core 2.0.3</p>
+            <p>1.示例开发环境:Windows 10、VS2017 15.5.4、.NET Core Runtime 2.0.5</p>
             <p>2.支持渠道:支付宝、微信支付、QQ钱包、京东支付(仅扫码支付)。</p>
             <h3>使用方式</h3>
             <p>见示例项目:WebApplicationSample</p>

+ 1 - 1
samples/WebApplicationSample/WebApplicationSample.csproj

@@ -9,7 +9,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.3" />
+    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.5" />
   </ItemGroup>
 
   <ItemGroup>

+ 8 - 5
src/Essensoft.AspNetCore.Alipay/Essensoft.AspNetCore.Alipay.csproj

@@ -2,13 +2,16 @@
 
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
-    <Description>.Net Core 2.0 支付宝服务端SDK.源码及例程: https://github.com/Essensoft/Payment</Description>
+    <Description>源码及例程: https://github.com/Essensoft/Payment</Description>
     <Authors>Roc</Authors>
     <Company>Essensoft</Company>
-    <Product>Payment</Product>
-    <Version>1.0.1</Version>
-    <AssemblyVersion>1.0.0.1</AssemblyVersion>
-    <FileVersion>1.0.0.1</FileVersion>
+    <Product>.NET Core Payment</Product>
+    <Version>1.0.2</Version>
+    <AssemblyVersion>1.0.2.0</AssemblyVersion>
+    <FileVersion>1.0.2.0</FileVersion>
+    <Copyright>Copyright © Roc</Copyright>
+    <PackageProjectUrl>https://github.com/Essensoft/Payment</PackageProjectUrl>
+    <GeneratePackageOnBuild>false</GeneratePackageOnBuild>
   </PropertyGroup>
 
   <ItemGroup>

+ 7 - 5
src/Essensoft.AspNetCore.JdPay/Essensoft.AspNetCore.JdPay.csproj

@@ -4,11 +4,13 @@
     <TargetFramework>netstandard2.0</TargetFramework>
     <Company>Essensoft</Company>
     <Authors>Roc</Authors>
-    <Product>Payment</Product>
-    <Version>1.0.1</Version>
-    <AssemblyVersion>1.0.0.1</AssemblyVersion>
-    <FileVersion>1.0.0.1</FileVersion>
-    <Description>.Net Core 2.0 京东支付(仅扫码支付)服务端SDK.源码及例程: https://github.com/Essensoft/Payment</Description>
+    <Product>.NET Core Payment</Product>
+    <Version>1.0.2</Version>
+    <AssemblyVersion>1.0.2.0</AssemblyVersion>
+    <FileVersion>1.0.2.0</FileVersion>
+    <Description>源代码及例程: https://github.com/Essensoft/Payment</Description>
+    <Copyright>Copyright © Roc</Copyright>
+    <PackageProjectUrl>https://github.com/Essensoft/Payment</PackageProjectUrl>
   </PropertyGroup>
   
   <ItemGroup>

+ 7 - 5
src/Essensoft.AspNetCore.QPay/Essensoft.AspNetCore.QPay.csproj

@@ -4,11 +4,13 @@
     <TargetFramework>netstandard2.0</TargetFramework>
     <Authors>Roc</Authors>
     <Company>Essensoft</Company>
-    <Product>Payment</Product>
-    <Version>1.0.1</Version>
-    <AssemblyVersion>1.0.0.1</AssemblyVersion>
-    <FileVersion>1.0.0.1</FileVersion>
-    <Description>.Net Core 2.0 QQ钱包支付服务端SDK.源码及例程: https://github.com/Essensoft/Payment</Description>
+    <Product>.NET Core Payment</Product>
+    <Version>1.0.2</Version>
+    <AssemblyVersion>1.0.2.0</AssemblyVersion>
+    <FileVersion>1.0.2.0</FileVersion>
+    <Description>源代码及例程: https://github.com/Essensoft/Payment</Description>
+    <Copyright>Copyright © Roc</Copyright>
+    <PackageProjectUrl>https://github.com/Essensoft/Payment</PackageProjectUrl>
   </PropertyGroup>
 
   <ItemGroup>

+ 7 - 4
src/Essensoft.AspNetCore.Security/Essensoft.AspNetCore.Security.csproj

@@ -2,12 +2,15 @@
 
   <PropertyGroup>
     <TargetFramework>netstandard2.0</TargetFramework>
-    <Product>Payment</Product>
+    <Product>.NET Core Payment</Product>
     <Company>Essensoft</Company>
     <Authors>Roc</Authors>
-    <Version>1.0.1</Version>
-    <Description>.Net Core 2.0 支付SDK依赖安全算法库(迁移自BouncyCastle).源码及例程: https://github.com/Essensoft/Payment</Description>
-    <AssemblyVersion>1.0.0.1</AssemblyVersion>
+    <Version>1.0.2</Version>
+    <Description>源代码及例程: https://github.com/Essensoft/Payment</Description>
+    <AssemblyVersion>1.0.2.0</AssemblyVersion>
+    <FileVersion>1.0.2.0</FileVersion>
+    <Copyright>Copyright © Roc</Copyright>
+    <PackageProjectUrl>https://github.com/Essensoft/Payment</PackageProjectUrl>
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

+ 7 - 5
src/Essensoft.AspNetCore.WeChatPay/Essensoft.AspNetCore.WeChatPay.csproj

@@ -6,11 +6,13 @@
     <Win32Resource />
     <Company>Essensoft</Company>
     <Authors>Roc</Authors>
-    <Product>Payment</Product>
-    <Version>1.0.1</Version>
-    <Description>.Net Core 2.0 微信支付服务端SDK.源码及例程: https://github.com/Essensoft/Payment</Description>
-    <AssemblyVersion>1.0.0.1</AssemblyVersion>
-    <FileVersion>1.0.0.1</FileVersion>
+    <Product>.NET Core Payment</Product>
+    <Version>1.0.2</Version>
+    <Description>源代码及例程: https://github.com/Essensoft/Payment</Description>
+    <AssemblyVersion>1.0.2.0</AssemblyVersion>
+    <FileVersion>1.0.2.0</FileVersion>
+    <Copyright>Copyright © Roc</Copyright>
+    <PackageProjectUrl>https://github.com/Essensoft/Payment</PackageProjectUrl>
   </PropertyGroup>
 
   <ItemGroup>

+ 0 - 9
src/Essensoft.AspNetCore.WeChatPay/Notify/WeChatPayRefundNotifyResponse.cs

@@ -83,14 +83,5 @@ namespace Essensoft.AspNetCore.WeChatPay.Notify
         /// </summary>
         [XmlElement("refund_request_source")]
         public string RefundRequestSource { get; set; }
-
-        #region WeChatPayNotifyResponse Members
-
-        public override bool IsRefundNotify()
-        {
-            return true;
-        }
-
-        #endregion
     }
 }

+ 12 - 10
src/Essensoft.AspNetCore.WeChatPay/WeChatPayNotifyClient.cs

@@ -1,11 +1,12 @@
-using Essensoft.AspNetCore.Security;
-using Essensoft.AspNetCore.WeChatPay.Parser;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Options;
-using System;
+using System;
 using System.IO;
 using System.Text;
 using System.Threading.Tasks;
+using Essensoft.AspNetCore.Security;
+using Essensoft.AspNetCore.WeChatPay.Notify;
+using Essensoft.AspNetCore.WeChatPay.Parser;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Options;
 
 namespace Essensoft.AspNetCore.WeChatPay
 {
@@ -29,15 +30,16 @@ namespace Essensoft.AspNetCore.WeChatPay
             var body = await new StreamReader(request.Body, Encoding.UTF8).ReadToEndAsync();
             var parser = new WeChatPayXmlParser<T>();
             var rsp = parser.Parse(body);
-            CheckNotifySign(rsp);
-
-            if (rsp.IsRefundNotify())
+            if (rsp is WeChatPayRefundNotifyResponse)
             {
-                // AES-256-ECB
                 var key = Md5.GetMD5(Options.Key).ToLower();
-                var data = Aes.AesDecrypt(rsp.ReqInfo, key);
+                var data = Aes.AesDecrypt(rsp.ReqInfo, key); // AES-256-ECB
                 rsp = parser.Parse(rsp, data);
             }
+            else
+            {
+                CheckNotifySign(rsp);
+            }
             return rsp;
         }
 

+ 0 - 2
src/Essensoft.AspNetCore.WeChatPay/WeChatPayNotifyResponse.cs

@@ -113,8 +113,6 @@ namespace Essensoft.AspNetCore.WeChatPay
         /// </summary>
         public bool IsError { get { return returnCode != "SUCCESS"; } }
 
-        public virtual bool IsRefundNotify() { return false; }
-
         /// <summary>
         /// 加密信息
         /// </summary>