/// <summary> /// 支付异步回调通知 需配置域名 因为是支付宝主动post请求这个action 所以要通过域名访问或者公网ip /// </summary> public async void Notify() { /* 实际验证过程建议商户添加以下校验。 * 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号, * 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额), * 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email) * 4、验证app_id是否为该商户本身。 */ Dictionary <string, string> sArray = GetRequestPost(); if (sArray.Count != 0) { bool flag = _alipayService.RSACheckV1(sArray); if (flag) { //交易状态 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //请务必判断请求时的total_amount与通知时获取的total_fee为一致的 //如果有做过处理,不执行商户的业务程序 //注意: //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 Console.WriteLine(Request.Form["trade_status"]); await Response.WriteAsync("success"); } else { await Response.WriteAsync("fail"); } } }
public async Task <PayRequestCheckOutput> PayRequestCheck(HttpRequest request) { await Task.Yield(); var result = new PayRequestCheckOutput(); if (request.Method.ToLower() == "post") { result.SArray = GetRequestPost(request); } else { result.SArray = GetRequestGet(request); } if (result.SArray.Count != 0) { result.IsSuccess = _alipayService.RSACheckV1(result.SArray); } return(result); }
//[Route("alinotify")] public async void AliNotify() { /* 实际验证过程建议商户添加以下校验。 * 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号, * 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额), * 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email) * 4、验证app_id是否为该商户本身。 */ var tradeResult = string.Empty; try { var sArray = GetRequestPost(); Logger.Info($"array:{sArray}"); if (sArray.Count != 0) { //var flag = AlipaySignature.RSACheckV1(sArray, Config.alipay_public_key, Config.charset, Config.sign_type, false); bool flag = _alipayService.RSACheckV1(sArray); Logger.Info($"判断异步:{flag}"); if (flag) { Logger.Info($"支付状态:{Request.Form["trade_status"]},{Request.Form["out_trade_no"]},{Request.Form["app_id"]}"); //交易状态 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //请务必判断请求时的total_amount与通知时获取的total_fee为一致的 //如果有做过处理,不执行商户的业务程序 //注意: //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 string trade_status = Request.Form["trade_status"]; var out_trade_no = Request.Form["out_trade_no"]; //商户订单号 var trade_no = Request.Form["trade_no"]; //支付宝交易号 var seller_id = Request.Form["seller_id"]; //支付宝账号//卖家支付宝用户ID 2088102170353417 var total_amount = Request.Form["total_amount"]; //金额 var timestamp = Request.Form["timestamp"]; //交易时间 var value = Request.Form["value"]; //数量 var appid = Request.Form["app_id"]; //appid //根据订单号取数据 var order = _rechargeService.GetNumber(out_trade_no); var price = _prodService.GetNumber(decimal.ToInt32(Convert.ToDecimal(total_amount))).Price; //var price = _customerService.Get(LoginInfo.Id).Price;//todo:单价怎么取 var salesMan = _customerService.Get(LoginInfo.Id).SalesMan; #region switch (trade_status) { case "TRADE_FINISHED": //支付完成 case "TRADE_SUCCESS": //支付成功 //注意: //付款完成后,支付宝系统发送该交易状态通知 var app_id = _configuration.GetValue("Alipay:AppId", "2016080700188416"); Logger.Info($"appid:{app_id}"); if (app_id.Equals(appid)) //账号对比//todo:seller_id需要改 { if (order != null) //订单对比 { var balance = new BalanceDto { SalesMan = salesMan, UserId = LoginInfo.Id, Value = Convert.ToInt32(total_amount) / Convert.ToInt32(price), Money = Convert.ToInt32(total_amount), OperatorId = LoginInfo.Id, ModifyDate = DateTime.Now, Remark = "客户端购买", }; await _balanceService.Rechange(balance, UserType.Admin); //更改客户余额 await _redisHelper.StringGetAsync(RedisKeyName.CreateUserAmountKey(LoginInfo.Id)); await _redisHelper.StringIncrementAsync(RedisKeyName.CreateUserAmountKey(LoginInfo.Id), balance.Value); order.TradeResult = TradeResult.Success; //修改订单结果 order.OrderDate = Convert.ToDateTime(timestamp); //添加交易时间 _rechargeService.Update(order); Json("success"); } else //无效订单 { order.TradeResult = TradeResult.Invalid; //修改订单结果 order.OrderDate = Convert.ToDateTime(timestamp); //添加交易时间 _rechargeService.Update(order); Json("fail"); } } break; case "TRADE_CLOSED": //订单关闭/买家未在规定时间内付款 order.TradeResult = TradeResult.Cancel; //修改订单结果 order.OrderDate = Convert.ToDateTime(timestamp); //添加交易时间 _rechargeService.Update(order); Json("fail"); break; default: //支付失败 order.TradeResult = TradeResult.Fail; //修改订单结果 order.OrderDate = Convert.ToDateTime(timestamp); //添加交易时间 _rechargeService.Update(order); Json("fail"); break; } #endregion #region // if (order != null)//订单对比 // { // //if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS") // if (Config.app_id.Equals(appid)) // { //#if DEBUG // var val = Convert.ToDecimal(total_amount) / price; // var s = Math.Ceiling(val);//Math.Ceiling:向上取整,只要有小数都加1 // var balance = new BalanceDto // { // SalesMan = salesMan, // UserId = LoginInfo.Id, // Value = decimal.ToInt32(s), // Money = decimal.ToInt32(Convert.ToDecimal(total_amount)), // OperatorId = LoginInfo.Id, // ModifyDate = DateTime.Now, // Remark = "客户端" // }; // await _balanceService.OnlineRechange(balance, UserType.Admin);//更改客户余额//todo:充值表两条,考虑加订单表 // // await _redisHelper.StringGetAsync(RedisKeyName.CreateUserAmountKey(LoginInfo.Id)); // //await _redisHelper.StringIncrementAsync(RedisKeyName.CreateUserAmountKey(LoginInfo.Id), balance.Value); // order.TradeResult = TradeResult.Success;//修改订单结果 // order.OrderDate = Convert.ToDateTime(timestamp);//添加交易时间 // _rechargeService.Update(order); // tradeResult = "支付成功!"; // Json("success"); //#else // tradeResult = "支付成功!"; // Json("success"); //#endif // } // else // { //#if DEBUG // order.TradeResult = TradeResult.Fail;//修改订单结果 // order.OrderDate = Convert.ToDateTime(timestamp);//添加交易时间 // _rechargeService.Update(order); // tradeResult = "支付失败!"; // Json("fail"); //#else // tradeResult = "支付失败!"; // Json("fail"); //#endif // } // } // else//无效订单 // { // order.TradeResult = TradeResult.Invalid;//修改订单结果 // order.OrderDate = Convert.ToDateTime(timestamp);//添加交易时间 // _rechargeService.Update(order); // Json("fail"); // } #endregion //Json("success"); } else { Json("fail"); } } } catch (Exception ex) { Logger.Error("zfb 异步:", ex); } }
//[Route("alireturn")] public IActionResult AliReturn() { var tradeResult = string.Empty; try { /* 实际验证过程建议商户添加以下校验。 * 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号, * 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额), * 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email) * 4、验证app_id是否为该商户本身。 */ var sArray = GetRequestGet(); if (sArray.Count != 0) { //var flag = AlipaySignature.RSACheckV1(sArray, Config.alipay_public_key, Config.charset, Config.sign_type, false); bool flag = _alipayService.RSACheckV1(sArray); if (flag) { string trade_status = Request.Query["trade_status"]; var out_trade_no = Request.Query["out_trade_no"]; //商户订单号 var trade_no = Request.Query["trade_no"]; //支付宝交易号 var seller_id = Request.Query["seller_id"]; //支付宝账号//卖家支付宝用户ID 2088102170353417 var total_amount = Request.Query["total_amount"]; //金额 var timestamp = Request.Query["timestamp"]; //交易时间 var appid = Request.Query["app_id"]; //交易时间 var value = Request.Query["value"]; //数量 var order = _rechargeService.GetNumber(out_trade_no); var price = _customerService.Get(LoginInfo.Id).Price; var salesMan = _customerService.Get(LoginInfo.Id).SalesMan; //todo:充值表,redis 余额 if (order != null)//订单对比 { //if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS") // if (Config.app_id.Equals(appid)) var app_id = _configuration.GetValue("Alipay:AppId", "2016080700188416"); if (app_id.Equals(appid)) { #if DEBUG //var val = Convert.ToDecimal(total_amount) / price; //var s = Math.Ceiling(val);//Math.Ceiling:向上取整,只要有小数都加1 //var balance = new BalanceDto //{ // SalesMan = salesMan, // UserId = LoginInfo.Id, // Value = decimal.ToInt32(s), // Money = decimal.ToInt32(Convert.ToDecimal(total_amount)), // OperatorId = LoginInfo.Id, // ModifyDate = DateTime.Now, // Remark = "客户端" //}; //await _balanceService.OnlineRechange(balance, UserType.Admin);//更改客户余额//todo:充值表两条,考虑加订单表 // await _redisHelper.StringGetAsync(RedisKeyName.CreateUserAmountKey(LoginInfo.Id)); //await _redisHelper.StringIncrementAsync(RedisKeyName.CreateUserAmountKey(LoginInfo.Id), balance.Value); order.TradeResult = TradeResult.Success; //修改订单结果 order.OrderDate = Convert.ToDateTime(timestamp); //添加交易时间 order.TranId = trade_no; //支付宝交易号 _rechargeService.Update(order); tradeResult = "支付成功!"; Json("success"); #else tradeResult = "支付成功!"; Json("success"); #endif } else { #if DEBUG order.TradeResult = TradeResult.Fail; //修改订单结果 order.OrderDate = Convert.ToDateTime(timestamp); //添加交易时间 order.TranId = trade_no; //支付宝交易号 _rechargeService.Update(order); tradeResult = "支付失败!"; Json("fail"); #else tradeResult = "支付失败!"; Json("fail"); #endif } } else//无效订单 { order.TradeResult = TradeResult.Invalid;//修改订单结果 order.OrderDate = Convert.ToDateTime(timestamp); //添加交易时间 order.TranId = trade_no; //支付宝交易号 _rechargeService.Update(order); Json("fail"); } // Json("同步验证通过"); } else { tradeResult = "验证失败!"; Json("同步验证失败"); } } ViewBag.TradeResult = tradeResult; return(View()); } catch (Exception ex) { Logger.Error("zfb 同步:", ex); ViewBag.TradeResult = tradeResult; return(View()); } }