WeChatPayMiniProgramSdkRequest.cs 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. using System.Collections.Generic;
  2. using Essensoft.Paylink.Security;
  3. namespace Essensoft.Paylink.WeChatPay.V3.Request
  4. {
  5. /// <summary>
  6. /// 基础支付 - 小程序支付 - 小程序调起支付
  7. /// </summary>
  8. /// <remarks>
  9. /// <para><a href="https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_5_4.shtml">小程序支付 - 小程序调起支付API</a> - 最新更新时间:2020.05.26</para>
  10. /// </remarks>
  11. public class WeChatPayMiniProgramSdkRequest : IWeChatPaySdkRequest
  12. {
  13. /// <summary>
  14. /// 订单详情扩展字符串
  15. /// </summary>
  16. /// <remarks>
  17. /// 统一下单接口返回的prepay_id参数值,提交格式如:prepay_id=***
  18. /// <para>示例值:prepay_id=wx201410272009395522657a690389285100\</para>
  19. /// </remarks>
  20. public string Package { get; set; }
  21. #region IWeChatPaySdkRequest Members
  22. public IDictionary<string, string> GetParameters()
  23. {
  24. var parameters = new WeChatPayDictionary
  25. {
  26. { "package", Package }
  27. };
  28. return parameters;
  29. }
  30. public void PrimaryHandler(WeChatPayDictionary sortedTxtParams, WeChatPayOptions options)
  31. {
  32. if (!string.IsNullOrEmpty(options.SubAppId))
  33. {
  34. sortedTxtParams.Add(WeChatPayConsts.appId, options.SubAppId);
  35. }
  36. else
  37. {
  38. sortedTxtParams.Add(WeChatPayConsts.appId, options.AppId);
  39. }
  40. sortedTxtParams.Add(WeChatPayConsts.timeStamp, WeChatPayUtility.GetTimeStamp());
  41. sortedTxtParams.Add(WeChatPayConsts.nonceStr, WeChatPayUtility.GenerateNonceStr());
  42. sortedTxtParams.Add(WeChatPayConsts.signType, WeChatPayConsts.RSA);
  43. var signatureSourceData = BuildSignatureSourceData(sortedTxtParams);
  44. sortedTxtParams.Add(WeChatPayConsts.paySign, SHA256WithRSA.Sign(signatureSourceData, options.RSAPrivateKey));
  45. }
  46. private static string BuildSignatureSourceData(WeChatPayDictionary sortedTxtParams)
  47. {
  48. return $"{sortedTxtParams.GetValue(WeChatPayConsts.appId)}\n{sortedTxtParams.GetValue(WeChatPayConsts.timeStamp)}\n{sortedTxtParams.GetValue(WeChatPayConsts.nonceStr)}\n{sortedTxtParams.GetValue(WeChatPayConsts.package)}\n";
  49. }
  50. #endregion
  51. }
  52. }