/// <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"); } } }
private bool ProcessOrder(Dictionary <string, string> sArray, out string orderId) { bool flag = _alipayService.RSACheckV1(sArray); if (flag) { orderId = sArray["out_trade_no"]; var order = _orderService.Get(orderId); if (order != null && order.OrderStatus == (int)OrderStatus.UnPaid && order.Total == Decimal.Parse(sArray["total_amount"]) && _alipayService.Options.AppId == sArray["app_id"]) { _orderService.CompletePay(order, Gateways.AliPay, sArray["trade_no"]); return(true); } else if (order != null && order.OrderStatus == (int)OrderStatus.Paid) { return(true); } } orderId = string.Empty; return(false); }
public async Task <string> 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(); string result = GetJsonString(sArray); AlipayTradePayResponse response = JsonConvert.DeserializeObject <AlipayTradePayResponse>(result); if (sArray.Count != 0) { //验证请求是否从支付宝发过来(安全) bool flag = _alipayService.RSACheckV1(sArray); if (flag) { //交易状态 //判断该笔订单是否在商户网站中已经做过处理 //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序 //请务必判断请求时的total_amount与通知时获取的total_fee为一致的 //如果有做过处理,不执行商户的业务程序 await _backgroundJobManager.EnqueueAsync <ProcessAlipayPaymentJob, AlipayTradePayResponse>(response); //注意: //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 //Console.WriteLine(Request.Form["trade_status"]); return(await Task.FromResult("success")); } else { return(await Task.FromResult("fail")); } } return(await Task.FromResult("fail")); }
public async Task Notify(Dictionary <string, string> sArray) { _log.Info($"支付宝回调{sArray}"); AliPayOrderDto aliPayOrder = new AliPayOrderDto(); if (sArray.Count != 0) { string out_trade_no = sArray["out_trade_no"]; bool flag = _alipayService.RSACheckV1(sArray); if (flag) { string status = "1"; //查询订单是否存在 aliPayOrder = await _recharge.GetAliPayOrderByIdAsync(out_trade_no); //查询商品信息 var rechargeCommodity = await _recharge.GetRechargeCommodityByIdAsync(int.Parse(aliPayOrder.Commodity_id.ToString())); if (aliPayOrder.Out_trade_no == "" && aliPayOrder.Out_trade_no == null) { /*订单不存在*/ return; } aliPayOrder.Out_trade_no = sArray["out_trade_no"]; //商户订单号 aliPayOrder.Fund_channel = sArray["fund_bill_list"]; aliPayOrder.Trade_no = sArray["trade_no"]; //支付宝交易订单号 aliPayOrder.Gmt_payment = DateTime.Parse(sArray["gmt_payment"]); //付款时间 aliPayOrder.Updatetime = DateTime.Now; aliPayOrder.Trade_status = sArray["trade_status"]; aliPayOrder.Buyer_id = sArray["buyer_logon_id"]; //买家支付宝账号 //更新数据库的支付宝订单状态 await _recharge.UpdateAlipayOrderAsync(aliPayOrder); //判断支付状态 switch (aliPayOrder.Trade_status) { case "TRADE_SUCCESS": status = "2"; break; case "TRADE_CLOSED": status = "3"; break; case "WAIT_BUYER_PAY": status = "1"; break; case "TRADE_FINISHED": status = "2"; break; default: break; } if (status == "2") { //关闭章鱼充值 // if (_biz.Recharge(aliPayOrder.Userid, aliPayOrder.Out_trade_no, double.Parse(rechargeCommodity.Amount.ToString()), "hiAlipay")) if (_accout.Recharge_php(aliPayOrder.Userid, aliPayOrder.Out_trade_no, double.Parse(rechargeCommodity.Amount.ToString()), "充值", "yibiyibaidekey")) { await _recharge.UpdateRechargeLogAsync(status, aliPayOrder.Out_trade_no); } } } else { _log.Info($"{out_trade_no}验签名失败"); } } }