QPayReverseRequest.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System.Collections.Generic;
  2. using Essensoft.AspNetCore.Payment.QPay.Response;
  3. using Essensoft.AspNetCore.Payment.QPay.Utility;
  4. namespace Essensoft.AspNetCore.Payment.QPay.Request
  5. {
  6. /// <summary>
  7. /// 撤销订单
  8. /// </summary>
  9. public class QPayReverseRequest : IQPayCertRequest<QPayReverseResponse>
  10. {
  11. /// <summary>
  12. /// 子商户应用ID
  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 OutTradeNo { get; set; }
  23. /// <summary>
  24. /// 操作员
  25. /// </summary>
  26. public string OpUserId { get; set; }
  27. /// <summary>
  28. /// 操作员密码的MD5
  29. /// </summary>
  30. public string OpUserPasswd { get; set; }
  31. #region IQPayCertificateRequest Members
  32. public string GetRequestUrl()
  33. {
  34. return "https://api.qpay.qq.com/cgi-bin/pay/qpay_reverse.cgi";
  35. }
  36. public IDictionary<string, string> GetParameters()
  37. {
  38. var parameters = new QPayDictionary
  39. {
  40. { "sub_appid", SubAppId },
  41. { "sub_mch_id", SubMchId },
  42. { "out_trade_no", OutTradeNo },
  43. { "op_user_id", OpUserId },
  44. { "op_user_passwd", OpUserPasswd }
  45. };
  46. return parameters;
  47. }
  48. public void PrimaryHandler(QPayOptions options, QPayDictionary sortedTxtParams)
  49. {
  50. sortedTxtParams.Add(QPayConsts.NONCE_STR, QPayUtility.GenerateNonceStr());
  51. sortedTxtParams.Add(QPayConsts.APPID, options.AppId);
  52. sortedTxtParams.Add(QPayConsts.MCH_ID, options.MchId);
  53. sortedTxtParams.Add(QPayConsts.SIGN, QPaySignature.SignWithKey(sortedTxtParams, options.Key));
  54. }
  55. public bool GetNeedCheckSign()
  56. {
  57. return true;
  58. }
  59. #endregion
  60. }
  61. }