/// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public ActionResult WechatPaidCallback()
        {
            var xml = string.Empty;

            using (var reader = new StreamReader(this.Request.InputStream))
            {
                xml = reader.ReadToEnd();
            }
            if (string.IsNullOrEmpty(xml))
            {
                return(Content(WechatProvider.FailCallbackResult));
            }

            LogManager.GetLogger().Info("==>WechatPaidCallback-0: {0}", xml);

            var paidWay       = PayWays.Wechat;
            var paymentDetail = WechatProvider.ToDictionary(xml);

            if (null == paymentDetail || false == paymentDetail.ContainsKey("out_trade_no"))
            {
                return(Content(WechatProvider.FailCallbackResult));
            }

            var tradeCode    = paymentDetail["out_trade_no"];
            var tradeJournal = ObjectIOCFactory.GetSingleton <PaymentEngine>().PaymentCompleted(tradeCode, paidWay, null, xml);
            var result       = (null != tradeJournal) ? WechatProvider.SuccessCallbackResult : WechatProvider.FailCallbackResult;

            LogManager.GetLogger().Info("==>WechatPaidCallback-1: {0}", result);
            return(Content(result));
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public ActionResult WechatPaidRedirect()
        {
            var tradeCode = this.Request.QueryString.Get("out_trade_no");

            if (string.IsNullOrEmpty(tradeCode))
            {
                return(Content("failed"));
            }

            var wechatProvider = (WechatProvider)ObjectIOCFactory.GetSingleton <PaymentEngine>().PaymentProviders[PayWays.Wechat];

            var paymentDetail = new Dictionary <string, string>();

            paymentDetail["out_trade_no"] = tradeCode;
            var xml = WechatProvider.ToXmlParams(paymentDetail);

            var tradeJournal = ObjectIOCFactory.GetSingleton <PaymentEngine>().PaymentCompleted(tradeCode, PayWays.Wechat, null, xml);

            if (null != tradeJournal)
            {
                if (false == string.IsNullOrEmpty(tradeJournal.ReturnUrl))
                {
                    return(this.Redirect(string.Format("{0}{1}out_trade_no={2}", tradeJournal.ReturnUrl, tradeJournal.ReturnUrl.Contains("?") ? "&" : "?", tradeCode)));
                }
                else
                {
                    return(Content("success"));
                }
            }
            return(Content("failed"));
        }