Ejemplo n.º 1
0
        /// <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");
                }
            }
        }
Ejemplo n.º 2
0
        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"));
        }
Ejemplo n.º 4
0
        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}验签名失败");
                }
            }
        }