Browse Source

[WeChatPay.V2] 新增 SetSignType 方法

Roc 4 years ago
parent
commit
a402eed60b
71 changed files with 1001 additions and 263 deletions
  1. 13 2
      src/Essensoft.Paylink.WeChatPay/V2/IWeChatPayCertRequest.cs
  2. 14 6
      src/Essensoft.Paylink.WeChatPay/V2/IWeChatPayRequest.cs
  3. 13 0
      src/Essensoft.Paylink.WeChatPay/V2/IWeChatPaySdkRequest.cs
  4. 13 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayAppSdkRequest.cs
  5. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayBillCommentSpBatchQueryCommentRequest.cs
  6. 17 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayCloseOrderRequest.cs
  7. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositConsumeRequest.cs
  8. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositFacePayRequest.cs
  9. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositMicroPayRequest.cs
  10. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositOrderQueryRequest.cs
  11. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositRefundQueryRequest.cs
  12. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositRefundRequest.cs
  13. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositReverseRequest.cs
  14. 9 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositUnifiedorderRequest.cs
  15. 17 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDownloadBillRequest.cs
  16. 12 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDownloadFundFlowRequest.cs
  17. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayGetHBInfoRequest.cs
  18. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayGetTransferInfoRequest.cs
  19. 14 2
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayJsApiSdkRequest.cs
  20. 17 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayMicroPayRequest.cs
  21. 18 2
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayMiniProgramReceiveRedPacketSdkRequest.cs
  22. 14 2
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayMiniProgramSdkRequest.cs
  23. 12 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayMultiProfitSharingRequest.cs
  24. 17 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayOrderQueryRequest.cs
  25. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPaPayPartnerDeleteContractRequest.cs
  26. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPaPayPartnerEntrustWebRequest.cs
  27. 14 4
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPaPayPartnerH5EntrustWebRequest.cs
  28. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPaPayPartnerQueryContractRequest.cs
  29. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPartnerPapOrderQueryRequest.cs
  30. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPartnerPapPayApplyRequest.cs
  31. 17 2
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPayBankRequest.cs
  32. 17 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPayitilReportRequest.cs
  33. 12 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingAddReceiverRequest.cs
  34. 12 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingFinishRequest.cs
  35. 12 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingMerchantRatioQueryRequest.cs
  36. 12 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingOrderAmountQueryRequest.cs
  37. 12 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingQueryRequest.cs
  38. 12 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingRemoveReceiverRequest.cs
  39. 12 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingRequest.cs
  40. 12 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingReturnQueryRequest.cs
  41. 12 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingReturnRequest.cs
  42. 17 2
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPromotionPayWwSpTrans2PockeRequest.cs
  43. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPromotionQueryWwSpTrans2PockeRequest.cs
  44. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPromotionTransfersRequest.cs
  45. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayQueryBankRequest.cs
  46. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayQueryCouponStockRequest.cs
  47. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayQueryCouponsInfoRequest.cs
  48. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayQueryWorkWxRedPackRequest.cs
  49. 17 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayRefundQueryRequest.cs
  50. 17 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayRefundRequest.cs
  51. 17 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayReverseRequest.cs
  52. 13 2
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayRiskGetPublicKeyRequest.cs
  53. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPaySendCouponRequest.cs
  54. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPaySendGroupRedPackRequest.cs
  55. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPaySendMiniProgramHbRequest.cs
  56. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPaySendRedPackRequest.cs
  57. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPaySendWorkWxRedPackRequest.cs
  58. 16 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayToolsAuthCodeToOpenIdRequest.cs
  59. 17 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayToolsShortUrlRequest.cs
  60. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayTransitPartnerPayPayApplyRequest.cs
  61. 12 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayTransitPartnerPayQueryOrderRequest.cs
  62. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayTransitPartnerPayQueryStateRequest.cs
  63. 17 1
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayUnifiedOrderRequest.cs
  64. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayVehiclePartnerPayNotificationRequest.cs
  65. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayVehiclePartnerPayPayApplyRequest.cs
  66. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayVehiclePartnerPayQueryStateRequest.cs
  67. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayVehiclePayNotificationRequest.cs
  68. 13 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayVehiclePayPayApplyRequest.cs
  69. 9 7
      src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayVehiclePayQueryStateRequest.cs
  70. 5 10
      src/Essensoft.Paylink.WeChatPay/V2/WeChatPayClient.cs
  71. 2 2
      src/Essensoft.Paylink.WeChatPay/V2/WeChatPaySignType.cs

+ 13 - 2
src/Essensoft.Paylink.WeChatPay/V2/IWeChatPayCertRequest.cs

@@ -11,37 +11,48 @@ namespace Essensoft.Paylink.WeChatPay.V2
         /// <summary>
         /// 获取请求接口地址
         /// </summary>
+        /// <returns>接口地址</returns>
         string GetRequestUrl();
 
         /// <summary>
         /// 设置请求接口地址
         /// </summary>
+        /// <param name="url">接口地址</param>
         void SetRequestUrl(string url);
 
         /// <summary>
         /// 获取文本请求参数字典
         /// </summary>
+        /// <returns>文本请求参数字典</returns>
         IDictionary<string, string> GetParameters();
 
         /// <summary>
         /// 获取签名类型
         /// </summary>
+        /// <returns>签名类型</returns>
         WeChatPaySignType GetSignType()
         {
             return WeChatPaySignType.MD5;
         }
 
+        ///// <summary>
+        ///// 设置签名类型
+        ///// </summary>
+        ///// <param name="signType">签名类型</param>
+        //void SetSignType(WeChatPaySignType signType);
+
         /// <summary>
         /// 参数处理器
         /// </summary>
         /// <param name="sortedTxtParams">排序文本参数</param>
         /// <param name="signType">签名类型</param>
         /// <param name="options">配置选项</param>
-        void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options);
+        void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options);
 
         /// <summary>
-        /// 是否需要检查响应内容签名
+        /// 获取是否需要对响应内容验签
         /// </summary>
+        /// <returns>是否需要对响应内容验签</returns>
         bool GetNeedCheckSign()
         {
             return true;

+ 14 - 6
src/Essensoft.Paylink.WeChatPay/V2/IWeChatPayRequest.cs

@@ -11,25 +11,32 @@ namespace Essensoft.Paylink.WeChatPay.V2
         /// <summary>
         /// 获取请求接口地址
         /// </summary>
+        /// <returns>接口地址</returns>
         string GetRequestUrl();
 
         /// <summary>
         /// 设置请求接口地址
         /// </summary>
+        /// <param name="url">接口地址</param>
         void SetRequestUrl(string url);
 
         /// <summary>
         /// 获取文本请求参数字典
         /// </summary>
+        /// <returns>文本请求参数字典</returns>
         IDictionary<string, string> GetParameters();
 
         /// <summary>
         /// 获取签名类型
         /// </summary>
-        WeChatPaySignType GetSignType()
-        {
-            return WeChatPaySignType.MD5;
-        }
+        /// <returns>签名类型</returns>
+        WeChatPaySignType GetSignType();
+
+        /// <summary>
+        /// 设置签名类型
+        /// </summary>
+        /// <param name="signType">签名类型</param>
+        void SetSignType(WeChatPaySignType signType);
 
         /// <summary>
         /// 参数处理器
@@ -37,11 +44,12 @@ namespace Essensoft.Paylink.WeChatPay.V2
         /// <param name="sortedTxtParams">排序文本参数</param>
         /// <param name="signType">签名类型</param>
         /// <param name="options">配置选项</param>
-        void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options);
+        void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options);
 
         /// <summary>
-        /// 是否需要检查响应内容签名
+        /// 获取是否需要对响应内容验签
         /// </summary>
+        /// <returns>是否需要对响应内容验签</returns>
         bool GetNeedCheckSign()
         {
             return true;

+ 13 - 0
src/Essensoft.Paylink.WeChatPay/V2/IWeChatPaySdkRequest.cs

@@ -10,8 +10,21 @@ namespace Essensoft.Paylink.WeChatPay.V2
         /// <summary>
         /// 获取文本请求参数字典
         /// </summary>
+        /// <returns>文本请求参数字典</returns>
         IDictionary<string, string> GetParameters();
 
+        /// <summary>
+        /// 获取签名类型
+        /// </summary>
+        /// <returns>签名类型</returns>
+        WeChatPaySignType GetSignType();
+
+        /// <summary>
+        /// 设置签名类型
+        /// </summary>
+        /// <param name="signType">签名类型</param>
+        void SetSignType(WeChatPaySignType signType);
+
         /// <summary>
         /// 参数处理器
         /// </summary>

+ 13 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayAppSdkRequest.cs

@@ -19,6 +19,8 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         #region IWeChatPaySdkRequest Members
 
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
+
         public IDictionary<string, string> GetParameters()
         {
             var parameters = new WeChatPayDictionary
@@ -29,6 +31,16 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
         public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.noncestr, WeChatPayUtility.GenerateNonceStr());
@@ -45,7 +57,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
                 sortedTxtParams.Add(WeChatPayConsts.partnerid, options.MchId);
             }
 
-            sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, WeChatPaySignType.MD5));
+            sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 
         #endregion

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayBillCommentSpBatchQueryCommentRequest.cs

@@ -31,6 +31,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/billcommentsp/batchquerycomment";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -54,7 +55,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 17 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayCloseOrderRequest.cs

@@ -16,6 +16,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/closeorder";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -36,7 +37,17 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -44,6 +55,11 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
+            if (signType == WeChatPaySignType.HMAC_SHA256)
+            {
+                sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
+            }
+
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositConsumeRequest.cs

@@ -36,6 +36,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/deposit/consume";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -62,10 +63,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -73,11 +83,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositFacePayRequest.cs

@@ -85,6 +85,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/deposit/facepay";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -121,10 +122,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -132,11 +142,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositMicroPayRequest.cs

@@ -85,6 +85,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/deposit/micropay";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -121,10 +122,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -132,11 +142,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositOrderQueryRequest.cs

@@ -21,6 +21,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/deposit/orderquery";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -44,10 +45,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -55,11 +65,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositRefundQueryRequest.cs

@@ -21,6 +21,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/deposit/refundquery";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -44,10 +45,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -55,11 +65,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositRefundRequest.cs

@@ -46,6 +46,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/deposit/refund";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -74,10 +75,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -85,11 +95,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositReverseRequest.cs

@@ -21,6 +21,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/deposit/reverse";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -44,10 +45,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -55,11 +65,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 9 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDepositUnifiedorderRequest.cs

@@ -101,6 +101,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/deposit/unifiedorder";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -140,10 +141,15 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -151,11 +157,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 17 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDownloadBillRequest.cs

@@ -26,6 +26,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/downloadbill";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -48,7 +49,17 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -56,6 +67,11 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
+            if (signType == WeChatPaySignType.HMAC_SHA256)
+            {
+                sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
+            }
+
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 12 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayDownloadFundFlowRequest.cs

@@ -32,6 +32,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/downloadfundflow";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -56,20 +57,24 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayGetHBInfoRequest.cs

@@ -21,6 +21,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gethbinfo";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -42,7 +43,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayGetTransferInfoRequest.cs

@@ -16,6 +16,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -36,7 +37,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 14 - 2
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayJsApiSdkRequest.cs

@@ -14,6 +14,8 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         #region IWeChatPaySdkRequest Members
 
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
+
         public IDictionary<string, string> GetParameters()
         {
             var parameters = new WeChatPayDictionary
@@ -23,6 +25,16 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
         public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.timeStamp, WeChatPayUtility.GetTimeStamp());
@@ -37,8 +49,8 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
                 sortedTxtParams.Add(WeChatPayConsts.appId, options.AppId);
             }
 
-            sortedTxtParams.Add(WeChatPayConsts.signType, WeChatPayConsts.MD5);
-            sortedTxtParams.Add(WeChatPayConsts.paySign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, WeChatPaySignType.MD5));
+            sortedTxtParams.Add(WeChatPayConsts.signType, signType.ToString());
+            sortedTxtParams.Add(WeChatPayConsts.paySign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 
         #endregion

+ 17 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayMicroPayRequest.cs

@@ -86,6 +86,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/micropay";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -120,7 +121,17 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -128,6 +139,11 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
+            if (signType == WeChatPaySignType.HMAC_SHA256)
+            {
+                sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
+            }
+
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 18 - 2
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayMiniProgramReceiveRedPacketSdkRequest.cs

@@ -14,6 +14,8 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         #region IWeChatPaySdkRequest Members
 
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
+
         public IDictionary<string, string> GetParameters()
         {
             var parameters = new WeChatPayDictionary
@@ -23,13 +25,27 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
         public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.timeStamp, WeChatPayUtility.GetTimeStamp());
             sortedTxtParams.Add(WeChatPayConsts.nonceStr, WeChatPayUtility.GenerateNonceStr());
 
-            sortedTxtParams.Add(WeChatPayConsts.signType, WeChatPayConsts.MD5);
-            sortedTxtParams.Add(WeChatPayConsts.paySign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, WeChatPaySignType.MD5));
+            sortedTxtParams.Add(WeChatPayConsts.signType, signType.ToString());
+            sortedTxtParams.Add(WeChatPayConsts.paySign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 
         #endregion

+ 14 - 2
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayMiniProgramSdkRequest.cs

@@ -14,6 +14,8 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         #region IWeChatPaySdkRequest Members
 
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
+
         public IDictionary<string, string> GetParameters()
         {
             var parameters = new WeChatPayDictionary
@@ -23,6 +25,16 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
         public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.timeStamp, WeChatPayUtility.GetTimeStamp());
@@ -37,8 +49,8 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
                 sortedTxtParams.Add(WeChatPayConsts.appId, options.AppId);
             }
 
-            sortedTxtParams.Add(WeChatPayConsts.signType, WeChatPayConsts.MD5);
-            sortedTxtParams.Add(WeChatPayConsts.paySign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, WeChatPaySignType.MD5));
+            sortedTxtParams.Add(WeChatPayConsts.signType, signType.ToString());
+            sortedTxtParams.Add(WeChatPayConsts.paySign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 
         #endregion

+ 12 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayMultiProfitSharingRequest.cs

@@ -26,6 +26,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/secapi/pay/multiprofitsharing";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -50,10 +51,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -61,11 +71,6 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 17 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayOrderQueryRequest.cs

@@ -21,6 +21,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/orderquery";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -42,7 +43,17 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -50,6 +61,11 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
+            if (signType == WeChatPaySignType.HMAC_SHA256)
+            {
+                sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
+            }
+
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPaPayPartnerDeleteContractRequest.cs

@@ -36,6 +36,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/papay/partner/deletecontract";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -60,7 +61,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPaPayPartnerEntrustWebRequest.cs

@@ -46,6 +46,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/papay/partner/entrustweb";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -72,7 +73,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 14 - 4
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPaPayPartnerH5EntrustWebRequest.cs

@@ -86,6 +86,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/papay/partner/entrustweb";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -121,10 +122,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -135,7 +145,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
             if (signType == WeChatPaySignType.HMAC_SHA256)
             {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
+                sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             }
 
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
@@ -148,4 +158,4 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         #endregion
     }
-}
+}

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPaPayPartnerQueryContractRequest.cs

@@ -31,6 +31,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/papay/partner/querycontract";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -54,7 +55,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPartnerPapOrderQueryRequest.cs

@@ -21,6 +21,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/partner/paporderquery";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -42,7 +43,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPartnerPapPayApplyRequest.cs

@@ -76,6 +76,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/partner/pappayapply";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -108,7 +109,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 17 - 2
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPayBankRequest.cs

@@ -42,6 +42,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -65,11 +66,25 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             if (string.IsNullOrEmpty(options.RsaPublicKey))
             {
-                throw new WeChatPayException($"{nameof(WeChatPayPayBankRequest)}.{nameof(PrimaryHandler)}: {nameof(options.RsaPublicKey)} is null or empty!");
+                throw new WeChatPayException($"{nameof(WeChatPayPayBankRequest)}.{nameof(PrimaryHandler)}: {nameof(options.RsaPublicKey)} is empty!");
             }
 
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());

+ 17 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPayitilReportRequest.cs

@@ -66,6 +66,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/payitil/report";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -96,7 +97,17 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -104,6 +115,11 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
+            if (signType == WeChatPaySignType.HMAC_SHA256)
+            {
+                sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
+            }
+
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 12 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingAddReceiverRequest.cs

@@ -16,6 +16,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -38,10 +39,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -49,11 +59,6 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 12 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingFinishRequest.cs

@@ -26,6 +26,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/secapi/pay/profitsharingfinish";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -50,21 +51,25 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 12 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingMerchantRatioQueryRequest.cs

@@ -16,6 +16,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/profitsharingmerchantratioquery";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -38,20 +39,24 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 12 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingOrderAmountQueryRequest.cs

@@ -16,6 +16,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/profitsharingorderamountquery";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -38,19 +39,23 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 12 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingQueryRequest.cs

@@ -21,6 +21,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/profitsharingquery";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -44,20 +45,24 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 12 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingRemoveReceiverRequest.cs

@@ -16,6 +16,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/profitsharingremovereceiver";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -38,10 +39,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -49,11 +59,6 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 12 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingRequest.cs

@@ -31,6 +31,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/secapi/pay/profitsharing";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -56,10 +57,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -67,11 +77,6 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 12 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingReturnQueryRequest.cs

@@ -26,6 +26,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/profitsharingreturnquery";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -50,21 +51,25 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 12 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayProfitSharingReturnRequest.cs

@@ -46,6 +46,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/secapi/pay/profitsharingreturn";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -74,10 +75,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -85,11 +95,6 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 17 - 2
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPromotionPayWwSpTrans2PockeRequest.cs

@@ -76,6 +76,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/paywwsptrans2pocket";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -108,7 +109,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -137,4 +152,4 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         #endregion
     }
-}
+}

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPromotionQueryWwSpTrans2PockeRequest.cs

@@ -16,6 +16,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/querywwsptrans2pocket";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -36,7 +37,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayPromotionTransfersRequest.cs

@@ -51,6 +51,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -78,7 +79,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.mch_appid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayQueryBankRequest.cs

@@ -16,6 +16,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaysptrans/query_bank";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -36,7 +37,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayQueryCouponStockRequest.cs

@@ -36,6 +36,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/query_coupon_stock";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -60,7 +61,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayQueryCouponsInfoRequest.cs

@@ -46,6 +46,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/querycouponsinfo";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -72,7 +73,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayQueryWorkWxRedPackRequest.cs

@@ -16,6 +16,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/queryworkwxredpack";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -36,7 +37,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 17 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayRefundQueryRequest.cs

@@ -36,6 +36,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/refundquery";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -60,7 +61,17 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -68,6 +79,11 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
+            if (signType == WeChatPaySignType.HMAC_SHA256)
+            {
+                sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
+            }
+
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 17 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayRefundRequest.cs

@@ -56,6 +56,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/secapi/pay/refund";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -84,7 +85,17 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -92,6 +103,11 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
+            if (signType == WeChatPaySignType.HMAC_SHA256)
+            {
+                sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
+            }
+
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 17 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayReverseRequest.cs

@@ -21,6 +21,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/secapi/pay/reverse";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -42,7 +43,17 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -50,6 +61,11 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
+            if (signType == WeChatPaySignType.HMAC_SHA256)
+            {
+                sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
+            }
+
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 2
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayRiskGetPublicKeyRequest.cs

@@ -11,6 +11,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://fraud.mch.weixin.qq.com/risk/getpublickey";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -30,12 +31,22 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
 
-            sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.MD5);
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPaySendCouponRequest.cs

@@ -51,6 +51,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/send_coupon";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -78,7 +79,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPaySendGroupRedPackRequest.cs

@@ -71,6 +71,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -102,7 +103,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.wxappid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPaySendMiniProgramHbRequest.cs

@@ -76,6 +76,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendminiprogramhb";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -107,7 +108,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPaySendRedPackRequest.cs

@@ -71,6 +71,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -102,7 +103,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.wxappid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPaySendWorkWxRedPackRequest.cs

@@ -61,6 +61,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayCertRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendworkwxredpack";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -90,7 +91,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.wxappid, options.AppId);

+ 16 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayToolsAuthCodeToOpenIdRequest.cs

@@ -16,6 +16,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/tools/authcodetoopenid";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -36,7 +37,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.MD5 => signType,
+                _ => throw new WeChatPayException("api only support MD5!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);

+ 17 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayToolsShortUrlRequest.cs

@@ -16,6 +16,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/tools/shorturl";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -36,7 +37,17 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -44,6 +55,11 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
+            if (signType == WeChatPaySignType.HMAC_SHA256)
+            {
+                sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
+            }
+
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayTransitPartnerPayPayApplyRequest.cs

@@ -81,6 +81,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/vehicle/partnerpay/payapply";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -116,10 +117,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -127,11 +137,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 12 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayTransitPartnerPayQueryOrderRequest.cs

@@ -26,6 +26,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/transit/partnerpay/queryorder";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -50,10 +51,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -61,11 +71,6 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayTransitPartnerPayQueryStateRequest.cs

@@ -21,6 +21,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/transit/partnerpay/querystate";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -44,10 +45,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -55,11 +65,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 17 - 1
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayUnifiedOrderRequest.cs

@@ -112,6 +112,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/pay/unifiedorder";
+        private WeChatPaySignType signType = WeChatPaySignType.MD5;
 
         public string GetRequestUrl()
         {
@@ -151,7 +152,17 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             return parameters;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public WeChatPaySignType GetSignType()
+        {
+            return signType;
+        }
+
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -159,6 +170,11 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
+            if (signType == WeChatPaySignType.HMAC_SHA256)
+            {
+                sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
+            }
+
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayVehiclePartnerPayNotificationRequest.cs

@@ -26,6 +26,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/vehicle/partnerpay/notification";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -50,10 +51,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -61,11 +71,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayVehiclePartnerPayPayApplyRequest.cs

@@ -81,6 +81,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/vehicle/partnerpay/payapply";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -116,10 +117,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -127,11 +137,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayVehiclePartnerPayQueryStateRequest.cs

@@ -41,6 +41,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/vehicle/partnerpay/querystate";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -68,10 +69,19 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
@@ -79,11 +89,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
             sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayVehiclePayNotificationRequest.cs

@@ -26,6 +26,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/vehicle/pay/notification";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -50,20 +51,25 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 13 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayVehiclePayPayApplyRequest.cs

@@ -77,6 +77,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/vehicle/pay/payapply";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -111,20 +112,25 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType switch
+            {
+                WeChatPaySignType.HMAC_SHA256 => signType,
+                _ => throw new WeChatPayException("api only support HMAC_SHA256!"),
+            };
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 9 - 7
src/Essensoft.Paylink.WeChatPay/V2/Request/WeChatPayVehiclePayQueryStateRequest.cs

@@ -41,6 +41,7 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
         #region IWeChatPayRequest Members
 
         private string requestUrl = "https://api.mch.weixin.qq.com/vehicle/pay/querystate";
+        private WeChatPaySignType signType = WeChatPaySignType.HMAC_SHA256;
 
         public string GetRequestUrl()
         {
@@ -68,20 +69,21 @@ namespace Essensoft.Paylink.WeChatPay.V2.Request
 
         public WeChatPaySignType GetSignType()
         {
-            return WeChatPaySignType.HMAC_SHA256;
+            return signType;
         }
 
-        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
+        public void SetSignType(WeChatPaySignType signType)
+        {
+            this.signType = signType;
+        }
+
+        public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
         {
             sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
             sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
             sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
 
-            if (signType == WeChatPaySignType.HMAC_SHA256)
-            {
-                sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
-            }
-
+            sortedTxtParams.Add(WeChatPayConsts.sign_type, signType.ToString());
             sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
         }
 

+ 5 - 10
src/Essensoft.Paylink.WeChatPay/V2/WeChatPayClient.cs

@@ -48,10 +48,8 @@ namespace Essensoft.Paylink.WeChatPay.V2
                 throw new WeChatPayException($"options.{nameof(WeChatPayOptions.APIKey)} is Empty!");
             }
 
-            var signType = request.GetSignType();
             var sortedTxtParams = new WeChatPayDictionary(request.GetParameters());
-
-            request.PrimaryHandler(sortedTxtParams, signType, options);
+            request.PrimaryHandler(sortedTxtParams, options);
 
             var client = _httpClientFactory.CreateClient(Name);
             var body = await client.PostAsync(request, sortedTxtParams);
@@ -60,6 +58,7 @@ namespace Essensoft.Paylink.WeChatPay.V2
 
             if (request.GetNeedCheckSign())
             {
+                var signType = request.GetSignType();
                 CheckResponseSign(response, options, signType);
             }
 
@@ -92,10 +91,8 @@ namespace Essensoft.Paylink.WeChatPay.V2
                 throw new WeChatPayException($"options.{nameof(WeChatPayOptions.APIKey)} is Empty!");
             }
 
-            var signType = request.GetSignType();
             var sortedTxtParams = new WeChatPayDictionary(request.GetParameters());
-
-            request.PrimaryHandler(sortedTxtParams, signType, options);
+            request.PrimaryHandler(sortedTxtParams, options);
 
             var url = request.GetRequestUrl();
             if (url.Contains("?"))
@@ -143,10 +140,8 @@ namespace Essensoft.Paylink.WeChatPay.V2
                 throw new WeChatPayException($"options.{nameof(WeChatPayOptions.Certificate)} is Empty!");
             }
 
-            var signType = request.GetSignType();
             var sortedTxtParams = new WeChatPayDictionary(request.GetParameters());
-
-            request.PrimaryHandler(sortedTxtParams, signType, options);
+            request.PrimaryHandler(sortedTxtParams, options);
 
             if (!_clientCertificateManager.ContainsKey(options.CertificateSerialNo))
             {
@@ -160,6 +155,7 @@ namespace Essensoft.Paylink.WeChatPay.V2
 
             if (request.GetNeedCheckSign())
             {
+                var signType = request.GetSignType();
                 CheckResponseSign(response, options, signType);
             }
 
@@ -193,7 +189,6 @@ namespace Essensoft.Paylink.WeChatPay.V2
             }
 
             var sortedTxtParams = new WeChatPayDictionary(request.GetParameters());
-
             request.PrimaryHandler(sortedTxtParams, options);
 
             return Task.FromResult(sortedTxtParams);

+ 2 - 2
src/Essensoft.Paylink.WeChatPay/V2/WeChatPaySignType.cs

@@ -5,7 +5,7 @@
     /// </summary>
     public enum WeChatPaySignType
     {
-        MD5 = 1,
-        HMAC_SHA256 = 2
+        MD5 = 0,
+        HMAC_SHA256 = 1
     }
 }