瀏覽代碼

fix wechatpay

Roc 8 年之前
父節點
當前提交
317bd78efa

+ 1 - 0
samples/WebApplicationSample/Startup.cs

@@ -53,6 +53,7 @@ namespace WebApplicationSample
             //    "MchId": "xxx",
             //    "MchId": "xxx",
             //    "Key": "xxx",
             //    "Key": "xxx",
             //    "Certificate": "xxx",
             //    "Certificate": "xxx",
+            //    "RsaPublicKey": "xxx",
             //  },
             //  },
             //  "QPay": {
             //  "QPay": {
             //    "MchId": "xxx",
             //    "MchId": "xxx",

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

@@ -4,7 +4,7 @@
 <div id="wrapper">
 <div id="wrapper">
 
 
     <div id="header">
     <div id="header">
-        <h2>.Net Core 支付产品示例</h2>
+        <h2>@ViewData["Title"]</h2>
     </div>
     </div>
 
 
     <div id="tabs-api">
     <div id="tabs-api">

+ 1 - 1
src/Essensoft.AspNetCore.QPay/QPayClient.cs

@@ -65,7 +65,7 @@ namespace Essensoft.AspNetCore.QPay
                 throw new Exception("sign check fail: Body is Empty!");
                 throw new Exception("sign check fail: Body is Empty!");
             }
             }
 
 
-            var sign = response.Sign;
+            var sign = response?.Sign;
             if (!response.IsError && !string.IsNullOrEmpty(sign))
             if (!response.IsError && !string.IsNullOrEmpty(sign))
             {
             {
                 var cal_sign = Md5.GetMD5WithKey(response.Parameters, Options.Key);
                 var cal_sign = Md5.GetMD5WithKey(response.Parameters, Options.Key);

+ 2 - 2
src/Essensoft.AspNetCore.Security/Md5.cs

@@ -7,12 +7,12 @@ namespace Essensoft.AspNetCore.Security
 {
 {
     public class Md5
     public class Md5
     {
     {
-        public static string GetMD5WithKey(SortedDictionary<string, string> parameters, string key)
+        public static string GetMD5WithKey(SortedDictionary<string, string> parameters, string key, bool excludeSignType = true)
         {
         {
             var content = new StringBuilder();
             var content = new StringBuilder();
             foreach (var iter in parameters)
             foreach (var iter in parameters)
             {
             {
-                if (!string.IsNullOrEmpty(iter.Value) && iter.Key != "sign")
+                if (!string.IsNullOrEmpty(iter.Value) && iter.Key != "sign" && (excludeSignType ? iter.Key != "sign_type" : true))
                     content.Append(iter.Key).Append('=').Append(iter.Value).Append("&");
                     content.Append(iter.Key).Append('=').Append(iter.Value).Append("&");
             }
             }
             var signContent = content.Append("key=").Append(key).ToString();
             var signContent = content.Append("key=").Append(key).ToString();

+ 0 - 18
src/Essensoft.AspNetCore.WeChatPay/IWeChatPayCertificateRequest.cs

@@ -17,23 +17,5 @@ namespace Essensoft.AspNetCore.WeChatPay
         /// </summary>
         /// </summary>
         /// <returns>文本请求参数字典</returns>
         /// <returns>文本请求参数字典</returns>
         IDictionary<string, string> GetParameters();
         IDictionary<string, string> GetParameters();
-
-        /// <summary>
-        /// 是否企业付款到零钱接口
-        /// </summary>
-        /// <returns></returns>
-        bool GetIsTransfers();
-
-        /// <summary>
-        /// 是否企业付款到银行卡相关接口
-        /// </summary>
-        /// <returns></returns>
-        bool GetIsBank();
-
-        /// <summary>
-        /// 是否企业付款到银行卡接口
-        /// </summary>
-        /// <returns></returns>
-        bool GetIsPayBank();
     }
     }
 }
 }

+ 0 - 15
src/Essensoft.AspNetCore.WeChatPay/Request/WeChatPayGetPublicKeyRequest.cs

@@ -17,21 +17,6 @@ namespace Essensoft.AspNetCore.WeChatPay.Request
             return new WeChatPayDictionary();
             return new WeChatPayDictionary();
         }
         }
 
 
-        public bool GetIsTransfers()
-        {
-            return false;
-        }
-
-        public bool GetIsBank()
-        {
-            return true;
-        }
-
-        public bool GetIsPayBank()
-        {
-            return false;
-        }
-
         #endregion
         #endregion
     }
     }
 }
 }

+ 0 - 16
src/Essensoft.AspNetCore.WeChatPay/Request/WeChatPayGetTransferInfoRequest.cs

@@ -25,22 +25,6 @@ namespace Essensoft.AspNetCore.WeChatPay.Request
             };
             };
             return parameters;
             return parameters;
         }
         }
-
-        public bool GetIsTransfers()
-        {
-            return false;
-        }
-
-        public bool GetIsBank()
-        {
-            return false;
-        }
-
-        public bool GetIsPayBank()
-        {
-            return false;
-        }
-
         #endregion
         #endregion
     }
     }
 }
 }

+ 0 - 16
src/Essensoft.AspNetCore.WeChatPay/Request/WeChatPayPayBankRequest.cs

@@ -55,22 +55,6 @@ namespace Essensoft.AspNetCore.WeChatPay.Request
             };
             };
             return parameters;
             return parameters;
         }
         }
-
-        public bool GetIsTransfers()
-        {
-            return false;
-        }
-
-        public bool GetIsBank()
-        {
-            return true;
-        }
-
-        public bool GetIsPayBank()
-        {
-            return true;
-        }
-
         #endregion
         #endregion
     }
     }
 }
 }

+ 0 - 15
src/Essensoft.AspNetCore.WeChatPay/Request/WeChatPayQueryBankRequest.cs

@@ -26,21 +26,6 @@ namespace Essensoft.AspNetCore.WeChatPay.Request
             return parameters;
             return parameters;
         }
         }
 
 
-        public bool GetIsTransfers()
-        {
-            return false;
-        }
-
-        public bool GetIsBank()
-        {
-            return true;
-        }
-
-        public bool GetIsPayBank()
-        {
-            return false;
-        }
-
         #endregion
         #endregion
     }
     }
 }
 }

+ 0 - 16
src/Essensoft.AspNetCore.WeChatPay/Request/WeChatPayRefundRequest.cs

@@ -67,22 +67,6 @@ namespace Essensoft.AspNetCore.WeChatPay.Request
             };
             };
             return parameters;
             return parameters;
         }
         }
-
-        public bool GetIsTransfers()
-        {
-            return false;
-        }
-
-        public bool GetIsBank()
-        {
-            return false;
-        }
-
-        public bool GetIsPayBank()
-        {
-            return false;
-        }
-
         #endregion
         #endregion
     }
     }
 }
 }

+ 0 - 16
src/Essensoft.AspNetCore.WeChatPay/Request/WeChatPayTransfersRequest.cs

@@ -67,22 +67,6 @@ namespace Essensoft.AspNetCore.WeChatPay.Request
             };
             };
             return parameters;
             return parameters;
         }
         }
-
-        public bool GetIsTransfers()
-        {
-            return true;
-        }
-
-        public bool GetIsBank()
-        {
-            return false;
-        }
-
-        public bool GetIsPayBank()
-        {
-            return false;
-        }
-
         #endregion
         #endregion
     }
     }
 }
 }

+ 16 - 5
src/Essensoft.AspNetCore.WeChatPay/WeChatPayCertificateClient.cs

@@ -7,6 +7,7 @@ using System.Net.Http;
 using System.Security.Cryptography.X509Certificates;
 using System.Security.Cryptography.X509Certificates;
 using System.Threading.Tasks;
 using System.Threading.Tasks;
 using System.IO;
 using System.IO;
+using Essensoft.AspNetCore.WeChatPay.Request;
 
 
 namespace Essensoft.AspNetCore.WeChatPay
 namespace Essensoft.AspNetCore.WeChatPay
 {
 {
@@ -51,14 +52,25 @@ namespace Essensoft.AspNetCore.WeChatPay
         {
         {
             // 字典排序
             // 字典排序
             var sortedTxtParams = new WeChatPayDictionary(request.GetParameters());
             var sortedTxtParams = new WeChatPayDictionary(request.GetParameters());
-            if (request.GetIsTransfers()) // 企业付款到零钱
+            if (request is WeChatPayTransfersRequest) // 企业付款到零钱
             {
             {
                 sortedTxtParams.Add(MCHAPPID, Options.AppId);
                 sortedTxtParams.Add(MCHAPPID, Options.AppId);
                 sortedTxtParams.Add(MCHID, Options.MchId);
                 sortedTxtParams.Add(MCHID, Options.MchId);
             }
             }
-            else if (request.GetIsBank()) // 企业付款到银行卡相关接口
+            else if (request is WeChatPayGetPublicKeyRequest)
             {
             {
                 sortedTxtParams.Add(MCH_ID, Options.MchId);
                 sortedTxtParams.Add(MCH_ID, Options.MchId);
+                sortedTxtParams.Add(SIGN_TYPE, "MD5");
+            }
+            else if (request is WeChatPayPayBankRequest || request is WeChatPayQueryBankRequest)
+            {
+                sortedTxtParams.Add(MCH_ID, Options.MchId);
+            }
+            else if (request is WeChatPayGetTransferInfoRequest)
+            {
+                sortedTxtParams.Add(APPID, Options.AppId);
+                sortedTxtParams.Add(MCH_ID, Options.MchId);
+                sortedTxtParams.Add(SIGN_TYPE, "MD5");
             }
             }
             else // 其他接口
             else // 其他接口
             {
             {
@@ -66,7 +78,7 @@ namespace Essensoft.AspNetCore.WeChatPay
                 sortedTxtParams.Add(MCH_ID, Options.MchId);
                 sortedTxtParams.Add(MCH_ID, Options.MchId);
             }
             }
 
 
-            if (request.GetIsPayBank()) // 企业付款到银行卡接口
+            if (request is WeChatPayPayBankRequest) // 企业付款到银行卡接口
             {
             {
                 var no = WeChatPaySignature.Encrypt(sortedTxtParams.GetValue(ENC_BANK_NO), Options.RsaPublicKey);
                 var no = WeChatPaySignature.Encrypt(sortedTxtParams.GetValue(ENC_BANK_NO), Options.RsaPublicKey);
                 sortedTxtParams.SetValue(ENC_BANK_NO, no);
                 sortedTxtParams.SetValue(ENC_BANK_NO, no);
@@ -76,8 +88,7 @@ namespace Essensoft.AspNetCore.WeChatPay
             }
             }
 
 
             sortedTxtParams.Add(NONCE_STR, Guid.NewGuid().ToString("N"));
             sortedTxtParams.Add(NONCE_STR, Guid.NewGuid().ToString("N"));
-            sortedTxtParams.Add(SIGN_TYPE, "MD5");
-            sortedTxtParams.Add(SIGN, Md5.GetMD5WithKey(sortedTxtParams, Options.Key));
+            sortedTxtParams.Add(SIGN, Md5.GetMD5WithKey(sortedTxtParams, Options.Key, !(request is WeChatPayGetPublicKeyRequest))); // 获取公钥 不排除sign_type
 
 
             var body = await Client.DoPostAsync(request.GetRequestUrl(), sortedTxtParams);
             var body = await Client.DoPostAsync(request.GetRequestUrl(), sortedTxtParams);
             var parser = new WeChatPayXmlParser<T>();
             var parser = new WeChatPayXmlParser<T>();

+ 1 - 1
src/Essensoft.AspNetCore.WeChatPay/WeChatPayClient.cs

@@ -62,7 +62,7 @@ namespace Essensoft.AspNetCore.WeChatPay
                 throw new Exception("sign check fail: Body is Empty!");
                 throw new Exception("sign check fail: Body is Empty!");
             }
             }
 
 
-            var sign = response.Sign;
+            var sign = response?.Sign;
             if (!response.IsError && !string.IsNullOrEmpty(sign))
             if (!response.IsError && !string.IsNullOrEmpty(sign))
             {
             {
                 var cal_sign = Md5.GetMD5WithKey(response.Parameters, Options.Key);
                 var cal_sign = Md5.GetMD5WithKey(response.Parameters, Options.Key);