AlipayController.cs 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Microsoft.AspNetCore.Http;
  6. using Microsoft.Extensions.Logging;
  7. using Microsoft.Extensions.Options;
  8. using Microsoft.AspNetCore.Authorization;
  9. using System.Web;
  10. using MySystem.Areas.Admin.Controllers;
  11. using LitJson;
  12. using Library;
  13. using System.IO;
  14. using Aop.Api.Util;
  15. namespace MySystem.Areas.Api.Controllers.v1
  16. {
  17. [Area("Api")]
  18. [Route("Api/[controller]/[action]")]
  19. public class AlipayController : BaseController
  20. {
  21. public AlipayController(IHttpContextAccessor accessor, ILogger<BaseController> logger, IOptions<Setting> setting) : base(accessor, logger, setting)
  22. {
  23. }
  24. #region 支付宝支付回调
  25. public string Notice()
  26. {
  27. StreamReader sr = new StreamReader(Request.Body);
  28. string requestMes = sr.ReadToEnd();
  29. // function.WriteLog(DateTime.Now.ToString() + "\r\n" + requestMes + "\r\n\r\n", "支付宝支付回调");
  30. return PayCallBack("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxycehrmnTl2IaIAECP+0HWc1eWGM/T6x022K7K6fdf+xoyC97TBJaG4G3Bcon4gsJX+Sad5IA9OJIQ4eN1joM35hIlwcFZ6MmCuVXx/SMAKThIjK0jsRc6aTxVQG+GVCgS7dXMKb4Sm+vK2wEM6xtDeqcfYMB0BqGZRvxbIV59a2ooPrha4FkV6nNC9DQefzC0picHXV64oYUjMM2ed4ASTQVds7HP9BZfalz//APZcWdBV08f+xv7n79Twz/gNtVAadfuTAlcjsS6aK+G/OrZtr/diuemeRPRUKlVhcr5xOQDhqBgtdIw8M9Wp6I4ULXRlthKVBWToH9j6n9vDIiwIDAQAB", requestMes);
  31. }
  32. // 商城支付回调
  33. public string NoticePay()
  34. {
  35. StreamReader sr = new StreamReader(Request.Body);
  36. string requestMes = sr.ReadToEnd();
  37. function.WriteLog(DateTime.Now.ToString() + "\r\n" + requestMes + "\r\n\r\n", "支付宝支付回调2");
  38. return PayCallBack2("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnw14hKejqS+si/XZpNQpFAVOVXJIThj5Qn7H14n/vsb7uRLug1+Jcve8ehTkaN3s5ibrrELCnz0dvshi3cOz9svDSbLG5OdC1biAvZzpDkvVPswOd9f9jO8Jvqk3QTXTI3MSN9gOpKomI0te3qs5kkOQx6kRozzKjU/G//o/PbJCxpBxf/QNRV3XmCwJLZMBE7ukYqi1WO9Jra8jdczFKwrd/nhiKBKdupAtVVeKlylGD2i2YLkGAH1cLsPUN9DtzrXNblGXm2HK3l9SnMDjqnakiVdEQJTNYNpEiHaOJsVmPQL38nM6miz5wNd4gTchKzXPtoZWqto+eIvYaEA/KwIDAQAB", requestMes);
  39. }
  40. // public string test()
  41. // {
  42. // string requestMes = "gmt_create=2022-03-30+12%3A06%3A39&charset=utf-8&seller_email=kexiaoshaung%40163.com&subject=%E5%BC%80%E5%BA%97%E5%AE%9D%E7%94%B5%E7%AD%BE&sign=vdGlzDoCNwidgdpH7xgRdCF%2BcSqDx%2Fm8dS7vZy%2BtMjQ7wr10KtbcjKgMRwW3fBclWWJjwisv28JD10Ejrvzjq5PCNbWhgD%2F0IuAkVeL%2FHsd0fTS7JZ8nQJPHBTCu42s0BREZEgf%2FY9gT23G7xIOpkw%2FWdcJYNo3rQyt%2Bcu380tY0KpghJBz2N06fow9vSjZLP7UmJQ%2FXe7uuIZvHvWRr61q%2FGRhewSgrhll1JvTVPu3c8mn3dFtAsiQJLrzFKfE0btroXOPqWqxjjmp5Ve0d0Cisdpa%2B9buRiuaADtxkVdFiI8TIDCFRkwmgnPqPQ6c93fxrstLYBJW4ntHVFRQEmw%3D%3D&body=%E5%BC%80%E5%BA%97%E5%AE%9D%E7%94%B5%E7%AD%BE&buyer_id=2088032351438405&invoice_amount=600.00&notify_id=2022033000222120640038401447445102&fund_bill_list=%5B%7B%22amount%22%3A%22600.00%22%2C%22fundChannel%22%3A%22PCREDIT%22%7D%5D&notify_type=trade_status_sync&trade_status=TRADE_SUCCESS&receipt_amount=600.00&app_id=2021003122642236&buyer_pay_amount=600.00&sign_type=RSA2&seller_id=2088141704579033&gmt_payment=2022-03-30+12%3A06%3A40&notify_time=2022-03-30+12%3A06%3A40&version=1.0&out_trade_no=BM2022033012054623271756674&total_amount=600.00&trade_no=2022033022001438401438676038&auth_app_id=2021003122642236&buyer_logon_id=189****0372&point_amount=0.00";
  43. // return PayCallBack2("MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxycehrmnTl2IaIAECP+0HWc1eWGM/T6x022K7K6fdf+xoyC97TBJaG4G3Bcon4gsJX+Sad5IA9OJIQ4eN1joM35hIlwcFZ6MmCuVXx/SMAKThIjK0jsRc6aTxVQG+GVCgS7dXMKb4Sm+vK2wEM6xtDeqcfYMB0BqGZRvxbIV59a2ooPrha4FkV6nNC9DQefzC0picHXV64oYUjMM2ed4ASTQVds7HP9BZfalz//APZcWdBV08f+xv7n79Twz/gNtVAadfuTAlcjsS6aK+G/OrZtr/diuemeRPRUKlVhcr5xOQDhqBgtdIw8M9Wp6I4ULXRlthKVBWToH9j6n9vDIiwIDAQAB", requestMes);
  44. // }
  45. public string PayCallBack(string publickey, string requestMes, bool IsRedis = false)
  46. {
  47. // Library.function.WriteLog(requestMes, "支付宝回调日志");
  48. var result = "fail";
  49. var sPara = GetRequestPost(requestMes);
  50. if (sPara.Count > 0) //判断是否有带返回参数
  51. {
  52. // Library.function.WriteLog("有参数", "支付宝回调日志");
  53. bool verifyResult = false;
  54. var aliNotify = new Com.Alipay.Notify();
  55. string signtype = sPara["sign_type"];
  56. var total_fee = 0m;
  57. string strPrice = sPara["total_amount"];//金额
  58. decimal.TryParse(strPrice, out total_fee);
  59. verifyResult = AlipaySignature.RSACheckV1(sPara, publickey, "UTF-8", signtype, false);
  60. // Library.function.WriteLog(verifyResult.ToString(), "支付宝回调日志");
  61. if (verifyResult) //验证成功
  62. {
  63. // Library.function.WriteLog("验证成功\r\n\r\n", "支付宝回调日志");
  64. //商户订单号
  65. string out_trade_no = sPara["out_trade_no"];
  66. //支付宝交易号
  67. string trade_no = sPara["trade_no"];
  68. //交易状态 TRADE_SUCCESS
  69. string trade_status = sPara["trade_status"];
  70. //交易成功
  71. if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS")
  72. {
  73. RedisDbconn.Instance.AddList("PayCallBack", "{\"out_trade_no\":\"" + out_trade_no + "\",\"transaction_id\":\"" + trade_no + "\",\"total_fee\":\"" + total_fee + "\",\"pay_mode\":\"1\",\"openid\":\"\",\"attach\":\"\"}");
  74. result = "success";
  75. }
  76. }
  77. }
  78. return result;
  79. }
  80. public string PayCallBack2(string publickey, string requestMes, bool IsRedis = false)
  81. {
  82. // Library.function.WriteLog(requestMes, "支付宝回调日志");
  83. var result = "fail";
  84. var sPara = GetRequestPost(requestMes);
  85. if (sPara.Count > 0) //判断是否有带返回参数
  86. {
  87. // Library.function.WriteLog("有参数", "支付宝回调日志");
  88. bool verifyResult = false;
  89. var aliNotify = new Com.Alipay.Notify();
  90. string signtype = sPara["sign_type"];
  91. var total_fee = 0m;
  92. string strPrice = sPara["total_amount"];//金额
  93. decimal.TryParse(strPrice, out total_fee);
  94. verifyResult = AlipaySignature.RSACheckV1(sPara, publickey, "UTF-8", signtype, false);
  95. // Library.function.WriteLog(verifyResult.ToString(), "支付宝回调日志");
  96. if (verifyResult) //验证成功
  97. {
  98. // Library.function.WriteLog("验证成功\r\n\r\n", "支付宝回调日志");
  99. //商户订单号
  100. string out_trade_no = sPara["out_trade_no"];
  101. //支付宝交易号
  102. string trade_no = sPara["trade_no"];
  103. //交易状态 TRADE_SUCCESS
  104. string trade_status = sPara["trade_status"];
  105. //交易成功
  106. if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS")
  107. {
  108. RedisDbconn.Instance.AddList("PayCallBack2", "{\"out_trade_no\":\"" + out_trade_no + "\",\"transaction_id\":\"" + trade_no + "\",\"total_fee\":\"" + total_fee + "\",\"pay_mode\":\"1\",\"openid\":\"\",\"attach\":\"\"}");
  109. result = "success";
  110. }
  111. }
  112. }
  113. return result;
  114. }
  115. private SortedDictionary<string, string> GetRequestPost(string canshu)
  116. {
  117. var sArray = new SortedDictionary<string, string>();
  118. string[] canshulist = canshu.Split('&');
  119. foreach (var substring in canshulist)
  120. {
  121. string[] datalist = substring.Split('=');
  122. sArray.Add(datalist[0], HttpUtility.UrlDecode(datalist[1]));
  123. }
  124. return sArray;
  125. }
  126. #endregion
  127. }
  128. }