using System; using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Microsoft.AspNetCore.Authorization; using System.Web; using MySystem.MainModels; using LitJson; using Library; using System.IO; using Aop.Api.Util; namespace MySystem.Areas.Api.Controllers.v1 { [Area("Api")] [Route("Api/[controller]/[action]")] public class AlipayController : BaseController { public AlipayController(IHttpContextAccessor accessor, ILogger logger, IOptions setting) : base(accessor, logger, setting) { } #region 支付宝服务平台支付回调 public string Notice() { StreamReader sr = new StreamReader(Request.Body); string requestMes = sr.ReadToEnd(); function.WriteLog(DateTime.Now.ToString() + "\r\n" + requestMes + "\r\n\r\n", "支付宝服务平台支付回调"); return PayCallBack(new AlipayFunction(_accessor.HttpContext).AlipayPublicKey, requestMes); } public string PayCallBack(string publickey, string requestMes, bool IsRedis = false) { // Library.function.WriteLog(requestMes, "支付宝回调日志"); var result = "fail"; var sPara = GetRequestPost(requestMes); if (sPara.Count > 0) //判断是否有带返回参数 { // Library.function.WriteLog("有参数", "支付宝回调日志"); bool verifyResult = false; var aliNotify = new Com.Alipay.Notify(); string signtype = sPara["sign_type"]; var total_fee = 0m; string strPrice = sPara["total_amount"];//金额 decimal.TryParse(strPrice, out total_fee); verifyResult = AlipaySignature.RSACheckV1(sPara, publickey, "UTF-8", signtype, false); // Library.function.WriteLog(verifyResult.ToString(), "支付宝回调日志"); if (verifyResult) //验证成功 { // Library.function.WriteLog("验证成功\r\n\r\n", "支付宝回调日志"); //商户订单号 string out_trade_no = sPara["out_trade_no"]; //支付宝交易号 string trade_no = sPara["trade_no"]; //交易状态 TRADE_SUCCESS string trade_status = sPara["trade_status"]; //交易成功 if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS") { RedisDbconn.Instance.AddList("PayCallBack", "{\"out_trade_no\":\"" + out_trade_no + "\",\"transaction_id\":\"" + trade_no + "\",\"total_fee\":\"" + total_fee + "\",\"pay_mode\":\"1\",\"openid\":\"\",\"attach\":\"\"}"); result = "success"; } } } return result; } private SortedDictionary GetRequestPost(string canshu) { var sArray = new SortedDictionary(); string[] canshulist = canshu.Split('&'); foreach (var substring in canshulist) { string[] datalist = substring.Split('='); sArray.Add(datalist[0], HttpUtility.UrlDecode(datalist[1])); } return sArray; } #endregion } }