WeChatPayVehiclePartnerPayPayApplyRequest.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. using System.Collections.Generic;
  2. using Essensoft.Paylink.WeChatPay.V2.Response;
  3. namespace Essensoft.Paylink.WeChatPay.V2.Request
  4. {
  5. /// <summary>
  6. /// 微信代扣 - 车主平台 - 申请扣款 (服务商)
  7. /// </summary>
  8. public class WeChatPayVehiclePartnerPayPayApplyRequest : IWeChatPayRequest<WeChatPayVehiclePartnerPayPayApplyResponse>
  9. {
  10. /// <summary>
  11. /// 商品描述
  12. /// </summary>
  13. public string Body { get; set; }
  14. /// <summary>
  15. /// 商品详情
  16. /// </summary>
  17. public string Detail { get; set; }
  18. /// <summary>
  19. /// 附加数据
  20. /// </summary>
  21. public string Attach { get; set; }
  22. /// <summary>
  23. /// 商户订单号
  24. /// </summary>
  25. public string OutTradeNo { get; set; }
  26. /// <summary>
  27. /// 总金额
  28. /// </summary>
  29. public int TotalFee { get; set; }
  30. /// <summary>
  31. /// 货币类型
  32. /// </summary>
  33. public int FeeType { get; set; }
  34. /// <summary>
  35. /// 终端IP
  36. /// </summary>
  37. public int SpBillCreateIp { get; set; }
  38. /// <summary>
  39. /// 商品标记
  40. /// </summary>
  41. public int GoodsTag { get; set; }
  42. /// <summary>
  43. /// 回调通知url
  44. /// </summary>
  45. public int NotifyUrl { get; set; }
  46. /// <summary>
  47. /// 交易类型
  48. /// </summary>
  49. public int TradeType { get; set; }
  50. /// <summary>
  51. /// 版本号
  52. /// </summary>
  53. public string Version { get; set; }
  54. /// <summary>
  55. /// 交易场景
  56. /// </summary>
  57. public string TradeScene { get; set; }
  58. /// <summary>
  59. /// 场景信息
  60. /// </summary>
  61. public string SceneInfo { get; set; }
  62. /// <summary>
  63. /// 是否指定服务商分账
  64. /// </summary>
  65. public string ProfitSharing { get; set; }
  66. #region IWeChatPayRequest Members
  67. private string requestUrl = "https://api.mch.weixin.qq.com/vehicle/partnerpay/payapply";
  68. public string GetRequestUrl()
  69. {
  70. return requestUrl;
  71. }
  72. public void SetRequestUrl(string url)
  73. {
  74. requestUrl = url;
  75. }
  76. public IDictionary<string, string> GetParameters()
  77. {
  78. var parameters = new WeChatPayDictionary
  79. {
  80. { "body", Body },
  81. { "detail", Detail },
  82. { "attach", Attach },
  83. { "out_trade_no", OutTradeNo },
  84. { "total_fee", TotalFee },
  85. { "fee_type", FeeType },
  86. { "spbill_create_ip", SpBillCreateIp },
  87. { "goods_tag", GoodsTag },
  88. { "notify_url", NotifyUrl },
  89. { "trade_type", TradeType },
  90. { "version", Version },
  91. { "trade_scene", TradeScene },
  92. { "scene_info", SceneInfo },
  93. { "profit_sharing", ProfitSharing }
  94. };
  95. return parameters;
  96. }
  97. public WeChatPaySignType GetSignType()
  98. {
  99. return WeChatPaySignType.HMAC_SHA256;
  100. }
  101. public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPaySignType signType, WeChatPayOptions options)
  102. {
  103. sortedTxtParams.Add(WeChatPayConsts.nonce_str, WeChatPayUtility.GenerateNonceStr());
  104. sortedTxtParams.Add(WeChatPayConsts.appid, options.AppId);
  105. sortedTxtParams.Add(WeChatPayConsts.sub_appid, options.SubAppId);
  106. sortedTxtParams.Add(WeChatPayConsts.mch_id, options.MchId);
  107. sortedTxtParams.Add(WeChatPayConsts.sub_mch_id, options.SubMchId);
  108. if (signType == WeChatPaySignType.HMAC_SHA256)
  109. {
  110. sortedTxtParams.Add(WeChatPayConsts.sign_type, WeChatPayConsts.HMAC_SHA256);
  111. }
  112. sortedTxtParams.Add(WeChatPayConsts.sign, WeChatPaySignature.SignWithKey(sortedTxtParams, options.APIKey, signType));
  113. }
  114. #endregion
  115. }
  116. }