public JsonResult CheckPay(string orderId, string resultType)
        {
            try
            {
                if (!Request.IsAjaxRequest())
                {
                    return(Json(new { status = -2, msg = "非法请求!" }));
                }

                var requestInfo = PayRequestDAL.GetValidPayRequest(orderId, this._payType);
                if (requestInfo == null || requestInfo.SysNo <= 0)
                {
                    return(Json(new { status = -2, msg = "系统不存在该订单的支付请求,请自行返回下单页面!" }));
                }

                var notifyInfo = new PayNotifyInfo()
                {
                    OrderId    = requestInfo.OrderId,
                    PaymentAmt = requestInfo.PaymentAmt.ToString(),
                    TradeNo    = "",
                    ExtTradeNo = "",
                    Result     = ((int)ResultStatus.Failure).ToString(),
                };

                int status     = 0;
                var resultInfo = PayResultDAL.GetValidPayResult(orderId, this._payType);
                if (resultInfo != null && resultInfo.SysNo > 0)
                {
                    status                = 1;//有支付成功记录
                    notifyInfo.TradeNo    = resultInfo.TradeNo;
                    notifyInfo.ExtTradeNo = resultInfo.ExtTradeNo;
                    notifyInfo.Result     = resultInfo.ExecuteResult.ToString();
                }

                //当支付页面收到的支付结果为成功时,不管有没有收到支付成功的异步回执,返回到支付结果着陆页时都提示支付成功
                if (string.Equals(resultType, "ok", StringComparison.CurrentCultureIgnoreCase))
                {
                    notifyInfo.Result = ((int)ResultStatus.Success).ToString();
                }

                var resultInterface = Builder.BuildWeChatPayResult();
                var url             = resultInterface.GetReturnUrl(requestInfo, notifyInfo);
                return(Json(new { status = status, url = url }));
            }
            catch (Exception ex)
            {
                string log = string.Format(@"校验支付结果发生异常!{0}异常描述:{1}{0}异常堆栈:{2}{0}请求参数:orderId={3}",
                                           Environment.NewLine, ex.Message, ex.StackTrace, orderId);
                LogWriter.WriteLog(log, AppConfig.Global.SwiftPassWeChatPayLogFolder, ExceptionHelper.ExceptionLevel.Exception);
                return(Json(new { status = -1, msg = "系统执行时发生异常!", error = ex.Message }));
            }
        }
Example #2
0
        public ActionResult AllinpayRefund(string appId, string appSecret, string orderId)
        {
            if (appSecret != AppCache.GetAppSecret(appId))
            {
                return(Json(new { msg = "非法appSecret" }));
            }

            var resultInfo = PayResultDAL.GetValidPayResult(orderId, AppEnum.PayType.Allinpay);

            if (resultInfo == null || resultInfo.SysNo <= 0)
            {
                return(Json(new { msg = "订单无支付记录" }));
            }

            var             requestInfo = PayRequestDAL.GetPayRequest(resultInfo.RequestSysNo);
            var             orderTime   = JsonHelper.Deserialize <PayOrderInfo>(requestInfo.RequestData).OrderTime;
            RefundOrderInfo info        = new RefundOrderInfo()
            {
                OrderId       = orderId,
                OrderTime     = orderTime ?? DateTime.Now.ToString("yyyyMMddHHmmss"),
                TradeNo       = resultInfo.TradeNo,
                PaymentAmt    = resultInfo.PaymentAmt.ToString(),
                RefundOrderId = DateTime.Now.ToString("yyyyMMddHHmmssfff"),
                RefundAmt     = resultInfo.PaymentAmt.ToString(),
                NotifyUrl     = string.Format("http://{0}/Test/RefundNotify?type=0", AppConfig.Global.Domain),
            };
            var setting = JsonHelper.GetDefaultSettings();

            setting.NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore;
            string data = JsonHelper.Serialize(info, setting);
            string sign = SignManager.CreateSign(appId, data).Data;

            ViewBag.AppId = appId;
            ViewBag.Sign  = sign;
            ViewBag.Data  = data;
            ViewBag.Title = "通联支付退款(测试)";
            ViewBag.Url   = "/allinpay/syncrefund";
            return(View("Pay"));
        }