Example #1
0
        /// <summary>
        /// 同步回调
        /// </summary>
        public ActionResult Callback()
        {
            Dictionary <string, string> sArray = GetRequestGet();

            if (sArray.Count != 0)
            {
                bool flag = AlipaySignature.RSACheckV1(sArray, AlipayPublicKey, CharSet, SignType, false);
                if (flag)
                {
                    Console.WriteLine($"同步验证通过,订单号:{sArray["out_trade_no"]}");
                    ViewData["PayResult"] = "同步验证通过";
                }
                else
                {
                    Console.WriteLine($"同步验证失败,订单号:{sArray["out_trade_no"]}");
                    ViewData["PayResult"] = "同步验证失败";
                }

                AlipayTradeQueryResponseViewModel traceState = GetTraceMsg(sArray["out_trade_no"], sArray["trade_no"]);
                if (traceState.alipay_trade_query_response.code != "10000")
                {
                    Console.WriteLine($"获取订单失败,失败原因:{traceState.alipay_trade_query_response.msg}");
                }
            }
            return(View());
        }
Example #2
0
        /// <summary>
        /// 支付异步回调通知 需配置域名 因为是支付宝主动post请求这个action 所以要通过域名访问或者公网ip
        /// </summary>
        public ActionResult 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(Request);

            if (sArray.Count != 0)
            {
                bool flag = AlipaySignature.RSACheckV1(sArray, AlipayPublicKey, CharSet, SignType, false);
                if (flag)
                {
                    AlipayTradeQueryResponseViewModel traceState = GetTraceMsg(sArray["out_trade_no"], sArray["trade_no"]);
                    if (traceState.alipay_trade_query_response.code != "10000")
                    {
                        Console.WriteLine($"获取订单失败,失败原因:{traceState.alipay_trade_query_response.msg}");
                    }

                    //交易状态
                    //判断该笔订单是否在商户网站中已经做过处理
                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                    //请务必判断请求时的total_amount与通知时获取的total_fee为一致的
                    //如果有做过处理,不执行商户的业务程序

                    //注意:
                    //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
                    Console.WriteLine(Request.Form["trade_status"]);

                    return(View("Success"));
                }
                else
                {
                    return(View("Fail"));
                }
            }

            return(View("Fail"));
        }