AlipayController.cs 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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.MainModels;
  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(new AlipayFunction(_accessor.HttpContext).AlipayPublicKey, requestMes);
  31. }
  32. public string PayCallBack(string publickey, string requestMes, bool IsRedis = false)
  33. {
  34. // Library.function.WriteLog(requestMes, "支付宝回调日志");
  35. var result = "fail";
  36. var sPara = GetRequestPost(requestMes);
  37. if (sPara.Count > 0) //判断是否有带返回参数
  38. {
  39. // Library.function.WriteLog("有参数", "支付宝回调日志");
  40. bool verifyResult = false;
  41. var aliNotify = new Com.Alipay.Notify();
  42. string signtype = sPara["sign_type"];
  43. var total_fee = 0m;
  44. string strPrice = sPara["total_amount"];//金额
  45. decimal.TryParse(strPrice, out total_fee);
  46. verifyResult = AlipaySignature.RSACheckV1(sPara, publickey, "UTF-8", signtype, false);
  47. // Library.function.WriteLog(verifyResult.ToString(), "支付宝回调日志");
  48. if (verifyResult) //验证成功
  49. {
  50. // Library.function.WriteLog("验证成功\r\n\r\n", "支付宝回调日志");
  51. //商户订单号
  52. string out_trade_no = sPara["out_trade_no"];
  53. //支付宝交易号
  54. string trade_no = sPara["trade_no"];
  55. //交易状态 TRADE_SUCCESS
  56. string trade_status = sPara["trade_status"];
  57. //交易成功
  58. if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS")
  59. {
  60. RedisDbconn.Instance.AddList("PayCallBack", "{\"out_trade_no\":\"" + out_trade_no + "\",\"transaction_id\":\"" + trade_no + "\",\"total_fee\":\"" + total_fee + "\",\"pay_mode\":\"1\",\"openid\":\"\",\"attach\":\"\"}");
  61. result = "success";
  62. }
  63. }
  64. }
  65. return result;
  66. }
  67. private SortedDictionary<string, string> GetRequestPost(string canshu)
  68. {
  69. var sArray = new SortedDictionary<string, string>();
  70. string[] canshulist = canshu.Split('&');
  71. foreach (var substring in canshulist)
  72. {
  73. string[] datalist = substring.Split('=');
  74. sArray.Add(datalist[0], HttpUtility.UrlDecode(datalist[1]));
  75. }
  76. return sArray;
  77. }
  78. #endregion
  79. }
  80. }