TransferToBankRequest.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using System.Security.Cryptography;
  3. using System.Text;
  4. using Org.BouncyCastle.Asn1;
  5. using Org.BouncyCastle.Asn1.X509;
  6. using PaySharp.Core.Exceptions;
  7. using PaySharp.Wechatpay.Domain;
  8. using PaySharp.Wechatpay.Response;
  9. namespace PaySharp.Wechatpay.Request
  10. {
  11. public class TransferToBankRequest : BaseRequest<TransferToBankModel, TransferToBankResponse>
  12. {
  13. private static RSACryptoServiceProvider _rSACryptoServiceProvider;
  14. public TransferToBankRequest()
  15. {
  16. RequestUrl = "/mmpaysptrans/pay_bank";
  17. IsUseCert = true;
  18. }
  19. internal override void Execute(Merchant merchant)
  20. {
  21. if (string.IsNullOrEmpty(merchant.PublicKey))
  22. {
  23. throw new GatewayException("请设置商户公钥");
  24. }
  25. if (_rSACryptoServiceProvider == null)
  26. {
  27. var rsaPubStructure = RsaPublicKeyStructure.GetInstance(
  28. Asn1Object.FromByteArray(Convert.FromBase64String(merchant.PublicKey)));
  29. var rSAParameters = new RSAParameters()
  30. {
  31. Exponent = rsaPubStructure.PublicExponent.ToByteArrayUnsigned(),
  32. Modulus = rsaPubStructure.Modulus.ToByteArrayUnsigned()
  33. };
  34. _rSACryptoServiceProvider = new RSACryptoServiceProvider();
  35. _rSACryptoServiceProvider.ImportParameters(rSAParameters);
  36. }
  37. GatewayData.Add("enc_bank_no", Convert.ToBase64String(
  38. _rSACryptoServiceProvider.Encrypt(Encoding.UTF8.GetBytes(Model.BankNo), false)));
  39. GatewayData.Add("enc_true_name", Convert.ToBase64String(
  40. _rSACryptoServiceProvider.Encrypt(Encoding.UTF8.GetBytes(Model.TrueName), false)));
  41. GatewayData.Remove("notify_url");
  42. GatewayData.Remove("appid");
  43. GatewayData.Remove("sign_type");
  44. }
  45. }
  46. }