WeChatPayVehiclePartnerpayPayApplyRequest.cs 4.0 KB

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