Exemplo n.º 1
0
        /// <summary>
        /// 检查
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public override bool Check(PaylineEntity info)
        {
            if (string.IsNullOrEmpty(info.OutNumber) || info.Status != PaylineStatusType.Waiting || string.IsNullOrEmpty(info.Number))
            {
                return(false);
            }
            var result = GetPayResult(info.Number);

            if (result == null || !result.ContainsKey("trade_state"))
            {
                return(false);
            }
            if (result["trade_state"] == "USERPAYING")
            {
                return(false);
            }
            if (result["trade_state"] == "SUCCESS")
            {
                info.Status = PaylineStatusType.Success;
            }
            else
            {
                info.Status = PaylineStatusType.Failure;
            }
            info.OutNumber = result.ContainsKey("transaction_id") ? result["transaction_id"] : "";
            info.SaveType  = SaveType.Modify;
            info.SetProperty(it => it.Status);
            info.SetProperty(it => it.OutNumber);
            return(true);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 手机支付
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        protected virtual bool CreateByWap(PaylineEntity info)
        {
            var builder = new StringBuilder("{");

            builder.AppendFormat("\"body\":\"{0}\",", info.TypeName);
            builder.AppendFormat("\"subject\":\"{0}\",", info.TypeName);
            builder.AppendFormat("\"out_trade_no\":\"{0}\",", info.Number);
            builder.AppendFormat("\"total_amount\":\"{0}\",", info.Amount != 0 || info.PaylineItems == null ? info.Amount : info.PaylineItems.Sum(it => it.Amount));
            builder.AppendFormat("\"product_code\":\"{0}\",", "QUICK_WAP_PAY");//FAST_INSTANT_TRADE_PAY
            builder.Append("}");

            AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();

            request.BizContent = builder.ToString();
            var processUrl = string.Format("{0}/AliPay/Process",
                                           ConfigurationManager.GetSetting <string>("DistributedOutsidePayUrl"));
            var returnUrl = string.Format("{0}?returnurl={1}&returntitle={2}&autoreturnurl={3}&autoreturntitle={4}"
                                          , processUrl, HttpContext.Current.Request["returnurl"]
                                          , HttpContext.Current.Request["returntitle"]
                                          , HttpContext.Current.Request["autoreturnurl"]
                                          , HttpContext.Current.Request["autoreturntitle"]);

            request.SetReturnUrl(returnUrl);
            request.SetNotifyUrl(processUrl);
            AlipayTradeWapPayResponse response = AopClient.pageExecute(request);

            info.Request = response.Body;

            return(true);
        }
Exemplo n.º 3
0
        /// <summary>
        /// PC 支付
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        protected virtual bool CreateByPage(PaylineEntity info)
        {
            var builder = new StringBuilder("{");

            //订单描述,可空
            builder.AppendFormat("\"body\":\"订单支付{0}\",", info.Number);
            //订单标题
            builder.AppendFormat("\"subject\":\"订单支付{0}\",", info.Number);
            //商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复
            builder.AppendFormat("\"out_trade_no\":\"{0}\",", info.Number);
            //订单总金额
            builder.AppendFormat("\"total_amount\":\"{0}\",", info.Amount != 0 || info.PaylineItems == null ? info.Amount : info.PaylineItems.Sum(it => it.Amount));
            //销售产品码,与支付宝签约的产品码名称。 注:目前仅支持FAST_INSTANT_TRADE_PAY
            builder.AppendFormat("\"product_code\":\"{0}\"", "FAST_INSTANT_TRADE_PAY");
            builder.Append("}");

            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();

            request.BizContent = builder.ToString();
            var processUrl = string.Format("{0}/AliPay/Process",
                                           ConfigurationManager.GetSetting <string>("DistributedOutsidePayUrl"));

            request.SetReturnUrl(processUrl);
            request.SetNotifyUrl(processUrl);
            AlipayTradePagePayResponse response = AopClient.pageExecute(request);

            info.Request = response.Body;
            return(true);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 退款
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public override bool Refund(PaylineEntity info)
        {
            string url           = "https://api.mch.weixin.qq.com/pay/orderquery";
            var    requsetParams = new SortedDictionary <string, string>();

            requsetParams.Add("total_fee ", Math.Abs(info.Amount * 100).ToString());
            requsetParams.Add("refund_fee ", Math.Abs(info.Amount * 100).ToString());
            requsetParams.Add("out_refund_no ", info.Number);
            requsetParams.Add("transaction_id ", info.OutNumber);
            requsetParams.Add("appid", AppId);
            requsetParams.Add("mch_id", PartnerKey);
            requsetParams.Add("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));//随机字符串
            requsetParams.Add("sign", MakeSign(requsetParams, PaySignKey));
            string xml      = ToRequestXml(requsetParams);
            string response = WebRequestHelper.SendPostRequest(url, Encoding.UTF8, xml);
            var    result   = FromResponseXml(response);

            if (result == null || !result.ContainsKey("return_code") || result["return_code"] != "SUCCESS")
            {
                return(false);
            }
            info.Status    = PaylineStatusType.Success;
            info.OutNumber = result.ContainsKey("refund_id") ? result["refund_id"] : "";
            return(true);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 得到输出结果
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        protected virtual string GetRequest(PaylineEntity info)
        {
            var url = string.Format("{0}/{1}Payline/Create",
                                    ConfigurationManager.GetSetting <string>("DistributedOutsidePayUrl"), info.Type);
            var requset = (HttpWebRequest)WebRequest.Create(url);
            var cookies = new CookieCollection();

            foreach (Cookie cookie in HttpContext.Current.Request.Cookies)
            {
                cookies.Add(cookie);
            }
            requset.CookieContainer.Add(new Uri(ConfigurationManager.GetSetting <string>("Domain")), cookies);
            return(WebRequestHelper.SendPostRequest(requset, Encoding.UTF8, new Dictionary <string, string>
            {
                { "ChannelType", info.ChannelType.ToString() },
                { "AccountId", info.Account == null ? "0" : info.Account.Id.ToString() },
                { "Amount", info.Amount.ToString() },
                {
                    "OrderIds",
                    info.PaylineItems == null
                        ? ""
                        : string.Join(",",
                                      info.PaylineItems.Where(it => it.Order != null).Select(it => it.Order.Id).ToArray())
                }
            }));
        }
Exemplo n.º 6
0
 /// <summary>
 /// 预下单
 /// </summary>
 /// <param name="info"></param>
 protected virtual SortedDictionary <string, string> CreateWechatOrder(PaylineEntity info)
 {
     try
     {
         string url        = "https://api.mch.weixin.qq.com/pay/unifiedorder";
         var    processUrl = string.Format("{0}/WechartPay/Process",
                                           ConfigurationManager.GetSetting <string>("DistributedOutsidePayUrl"));
         var amount        = info.Amount != 0 || info.PaylineItems == null ? info.Amount : info.PaylineItems.Sum(it => it.Amount);
         var requsetParams = new SortedDictionary <string, string>();
         requsetParams.Add("body", info.Number);
         requsetParams.Add("attach", info.Number);
         requsetParams.Add("out_trade_no", info.Number);
         requsetParams.Add("total_fee", (amount * 100).Convert <int>().ToString());
         requsetParams.Add("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
         requsetParams.Add("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
         requsetParams.Add("trade_type", HttpContext.Current.Request["trade_type"]);
         requsetParams.Add("openid", info.Forms == null || !info.Forms.ContainsKey("openid") ? null: info.Forms["openid"]);
         requsetParams.Add("appid", AppId);
         requsetParams.Add("mch_id", PartnerKey);
         requsetParams.Add("spbill_create_ip", HttpContext.Current.Request.UserHostAddress);
         requsetParams.Add("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));
         requsetParams.Add("notify_url", processUrl);
         requsetParams.Add("sign", MakeSign(requsetParams, PaySignKey).ToUpper());
         string xml      = ToRequestXml(requsetParams);
         string response = WebRequestHelper.SendPostRequest(url, Encoding.UTF8, xml);
         return(FromResponseXml(response));
     }
     catch (Exception ex)
     {
         Winner.Creator.Get <Winner.Log.ILog>().AddException(ex);
     }
     return(null);
 }
Exemplo n.º 7
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public override bool Create(PaylineEntity info)
        {
            var resParams = CreateWechatOrder(info);

            if (resParams == null || !resParams.ContainsKey("appid") || !resParams.ContainsKey("prepay_id") ||
                string.IsNullOrEmpty(resParams["appid"]) || string.IsNullOrEmpty(resParams["prepay_id"]))
            {
                return(false);
            }
            var paraTemp = new SortedDictionary <string, string>
            {
                { "appId", resParams["appid"] },
                { "timeStamp", (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds.Convert <long>().ToString() },
                { "nonceStr", Guid.NewGuid().ToString().Replace("-", "") },
                { "package", string.Format("prepay_id={0}", resParams["prepay_id"]) },
                { "signType", "MD5" }
            };

            paraTemp.Add("paySign", MakeSign(paraTemp, PaySignKey));
            info.Forms     = paraTemp;
            info.OutNumber = resParams["prepay_id"];
            info.Status    = PaylineStatusType.Waiting;
            info.Request   = GetRequest(info, resParams);
            return(true);
        }
Exemplo n.º 8
0
        /// <summary>
        /// 退款
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public override bool Refund(PaylineEntity info)
        {
            var account = Creator.Get <IContext>().Get <AccountEntity>(info.Account.Id);

            if (account == null)
            {
                info.AddErrorByName(typeof(AccountEntity).FullName, "NoExist");
                return(false);
            }
            info.AccountItem = new AccountItemEntity
            {
                Account  = account,
                Amount   = info.Amount,
                Data     = info,
                Name     = info.TypeName,
                Remark   = info.Remark,
                SaveType = SaveType.Add,
            };
            info.Forms     = null;
            info.Request   = "";
            info.OutNumber = info.Number;
            info.Status    = PaylineStatusType.Success;
            info.Response  = "";
            info.Amount    = 0;
            return(true);
        }
Exemplo n.º 9
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public override bool Create(PaylineEntity info)
        {
            var resParams = CreateWechatOrder(info);

            if (resParams == null || !resParams.ContainsKey("appid") || !resParams.ContainsKey("prepay_id") ||
                string.IsNullOrEmpty(resParams["appid"]) || string.IsNullOrEmpty(resParams["prepay_id"]))
            {
                return(false);
            }
            var paraTemp = new SortedDictionary <string, string>
            {
                { "appId", resParams["appid"] },
                { "timeStamp", (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0)).TotalSeconds.Convert <long>().ToString() },
                { "nonceStr", Guid.NewGuid().ToString().Replace("-", "") },
                { "package", string.Format("prepay_id={0}", resParams["prepay_id"]) },
                { "signType", "MD5" }
            };

            paraTemp.Add("paySign", MakeSign(paraTemp, MchKey));
            info.Forms     = paraTemp;
            info.OutNumber = resParams["prepay_id"];
            info.Status    = PaylineStatusType.Waiting;
            info.Request   = GetRequest(info, resParams);
            LogHelper.AddEcho(new EchoEntity
            {
                Method   = "Beeant.Repository.Services.Finance.WechatPaylineRepository.Create",
                Request  = info.Request,
                Response = "",
                Remark   = "",
                Url      = HttpContext.Current.Request.Url.ToString(),
                Key      = info.Number,
                SaveType = SaveType.Add
            });
            return(true);
        }
Exemplo n.º 10
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        public override bool Create(PaylineEntity info)
        {
            if (info == null || info.Account == null)
            {
                return(false);
            }
            var account = Creator.Get <IContext>().Get <AccountEntity>(info.Account.Id);

            if (account == null || account.Balance < info.Amount)
            {
                info.AddErrorByName(typeof(AccountEntity).FullName, "BalanceEnough");
                return(false);
            }
            info.AccountItem = new AccountItemEntity
            {
                Account  = account,
                Amount   = 0 - info.Amount,
                Number   = info.Number,
                Name     = info.TypeName,
                Remark   = info.Remark,
                SaveType = SaveType.Add,
            };
            info.Forms     = null;
            info.Request   = "";
            info.OutNumber = info.Number;
            info.Status    = PaylineStatusType.Success;
            info.Amount    = 0;
            return(true);
        }
Exemplo n.º 11
0
        public virtual void Order()
        {
            var payline = new PaylineEntity
            {
                Account = new AccountEntity {
                    Id = 30310
                },
                ChannelType = ChannelType.Website,
                Type        = PaylineType.Wechat,
                Status      = PaylineStatusType.Create,
                OutNumber   = "4008932001201706125466991385"
            };

            payline.PaylineItems = new List <PaylineItemEntity>
            {
                {
                    new PaylineItemEntity
                    {
                        Order = new OrderEntity {
                            Id = 31317
                        },
                        Payline  = payline,
                        Amount   = (decimal) - 0.01,
                        SaveType = SaveType.Add
                    }
                }
            };
            payline.Amount = payline.PaylineItems.Sum(it => it.Amount);
            Ioc.Resolve <IPaylineApplicationService>("Beeant.Application.Services.Finance.IWechatPaylineApplicationService").Refund(payline);
        }
Exemplo n.º 12
0
        /// <summary>
        /// 填充明细
        /// </summary>
        protected virtual void FillRefundPaylineItems(PaylineEntity payline, OrderPayEntity orderPay, PaylineModel model)
        {
            if (orderPay == null)
            {
                return;
            }
            if (orderPay.Order == null || orderPay.Amount <= 0)
            {
                return;
            }
            var ammount = model.Amount.HasValue ? model.Amount.Value : orderPay.Amount;

            if (ammount > orderPay.Amount)
            {
                ammount = orderPay.Amount;
            }
            var paylineItem = new PaylineItemEntity
            {
                Order = string.IsNullOrWhiteSpace(model.RefundOrderId) ? orderPay.Order : new OrderEntity {
                    Id = model.RefundOrderId.Convert <long>()
                },
                Payline  = payline,
                Key      = orderPay.Key,
                Amount   = 0 - ammount,
                SaveType = SaveType.Add
            };

            payline.PaylineItems.Add(paylineItem);
            payline.OutNumber = orderPay.Number;
        }
Exemplo n.º 13
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="model"></param>
        /// <param name="paylineType"></param>
        /// <returns></returns>

        protected virtual PaylineEntity CreatePayline(PaylineModel model, PaylineType paylineType)
        {
            var info = new PaylineEntity
            {
                Account = new AccountEntity {
                    Id = Identity.Id
                },
                ChannelType  = model.ChannelType,
                Status       = PaylineStatusType.Create,
                Remark       = "",
                Type         = paylineType,
                SaveType     = SaveType.Add,
                PaylineItems = new List <PaylineItemEntity>(),
                Forms        = model.Forms ?? new Dictionary <string, string>()
            };
            var orders = GetOrders(model);

            FillPaylineItems(info, orders);
            if (model.Amount.HasValue)
            {
                info.Amount = model.Amount.Value;
            }
            GetPaylineApp(paylineType).Create(info);
            return(info);
        }
Exemplo n.º 14
0
 /// <summary>
 /// 得到输出
 /// </summary>
 /// <param name="info"></param>
 /// <param name="resParas"></param>
 /// <returns></returns>
 protected virtual string GetRequest(PaylineEntity info, IDictionary <string, string> resParas)
 {
     if (HttpContext.Current.Request["trade_type"] == "JSAPI")
     {
         return(GetJsApiRequest(info));
     }
     return(GetNativeRequest(info, resParas));
 }
Exemplo n.º 15
0
        /// <summary>
        /// 得到请求
        /// </summary>
        /// <param name="info"></param>
        /// <param name="resParas"></param>
        /// <returns></returns>
        protected virtual string GetNativeRequest(PaylineEntity info, IDictionary <string, string> resParas)
        {
            var builder = new StringBuilder();

            builder.Append("<script>");
            builder.AppendFormat("window.location.href='{0}';", resParas["code_url"]);
            builder.Append("</script>");
            return(builder.ToString());
        }
Exemplo n.º 16
0
 public PaylineUnitofwork(PaylineEntity payline, IWcfService wcfService)
 {
     if (payline == null)
     {
         return;
     }
     Payline    = payline;
     WcfService = wcfService;
 }
Exemplo n.º 17
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public virtual bool Check(PaylineEntity info)
 {
     if (info.Status == PaylineStatusType.Waiting)
     {
         info.Status   = PaylineStatusType.Failure;
         info.SaveType = SaveType.Modify;
         info.SetProperty(it => it.Status);
     }
     return(true);
 }
Exemplo n.º 18
0
 /// <summary>
 /// 参加接口
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public virtual bool Create(PaylineEntity info)
 {
     try
     {
         info.Request = GetRequest(info);
     }
     catch (Exception ex)
     {
         Winner.Creator.Get <Winner.Log.ILog>().AddException(ex);
     }
     return(true);
 }
Exemplo n.º 19
0
        /// <summary>
        /// 扫码支付 输出二维码
        /// 生成直接支付url,支付url有效期为2小时
        /// </summary>
        /// <param name="info"></param>
        /// <param name="resParas"></param>
        /// <returns></returns>
        protected virtual string GetNativeRequest(PaylineEntity info, IDictionary <string, string> resParas)
        {
            var builder = new StringBuilder();

            builder.AppendFormat("{0}/WechatPay/Qr",
                                 ConfigurationManager.GetSetting <string>("DistributedOutsidePayUrl"));
            builder.AppendFormat("?url={0}", resParas.ContainsKey("code_url") ? resParas["code_url"] : "");
            builder.AppendFormat("&returnurl={0}&returntitle={1}&autoreturnurl={2}&autoreturntitle={3}", HttpContext.Current.Request["returnurl"]
                                 , HttpContext.Current.Request["returntitle"]
                                 , HttpContext.Current.Request["autoreturnurl"]
                                 , HttpContext.Current.Request["autoreturntitle"]);
            return(builder.ToString());
        }
Exemplo n.º 20
0
        /// <summary>
        /// 支付失败
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        protected virtual ActionResult PayError(PaylineEntity info)
        {
            var message = info?.Errors?.FirstOrDefault()?.Message;

            message = string.IsNullOrWhiteSpace(message) ? "支付失败" : message;
            if (!string.IsNullOrEmpty(Request["failhandle"]))
            {
                return(Content(string.Format("<script  type=\"text/javascript\" >document.domain='{0}';{1}('{2}');</script>", ConfigurationManager.GetSetting <string>("Domain"), Request["failhandle"], message)));
            }
            var url = string.Format("{0}/Home/Index", HttpContext.Request.Browser.IsMobileDevice ? this.GetUrl("PresentationWebsiteOrderUrl") : this.GetUrl("PresentationMobileOrderUrl"));

            return(Content(string.Format("<script  type=\"text/javascript\" >alert('{0}');window.location.href='{1}'</script>", message, url)));
        }
Exemplo n.º 21
0
        /// <summary>
        /// 处理
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        protected virtual ActionResult Process(PaylineEntity info)
        {
            if (info == null || info.Status != PaylineStatusType.Success)
            {
                return(PayError(info));
            }
            var url = string.Format("{0}/Home/Index", info.ChannelType == ChannelType.Website ? this.GetUrl("PresentationWebsiteOrderUrl") : this.GetUrl("PresentationMobileOrderUrl"));

            if (!string.IsNullOrEmpty(Request["successhandle"]))
            {
                return(Content(string.Format("<script  type=\"text/javascript\" >document.domain='{0}';{1}('{2}');</script>", ConfigurationManager.GetSetting <string>("Domain"), Request["success"], info.Id)));
            }
            return(new RedirectResult(url));
        }
Exemplo n.º 22
0
        /// <summary>
        /// 支付
        /// </summary>
        /// <param name="info"></param>
        protected virtual PaylineEntity Pay(PaylineEntity info)
        {
            if (info.SaveType == SaveType.None)
            {
                return(info);
            }
            var unitofworks = DomainService.Handle(info);

            if (unitofworks != null)
            {
                Commit(unitofworks);
            }
            return(info);
        }
Exemplo n.º 23
0
 /// <summary>
 /// 退款
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public virtual bool Refund(PaylineEntity info)
 {
     if (info == null || info.PaylineItems == null || info.Amount == 0)
     {
         return(false);
     }
     info.SaveType = SaveType.Add;
     info.SetNumber();
     if (!PaylineRepository.Refund(info))
     {
         return(false);
     }
     Pay(info);
     return(true);
 }
Exemplo n.º 24
0
 /// <summary>
 /// 同步接口
 /// </summary>
 /// <param name="info"></param>
 /// <returns></returns>
 public virtual bool Create(PaylineEntity info)
 {
     if (info == null)
     {
         return(false);
     }
     info.SaveType = SaveType.Add;
     info.SetNumber();
     if (!PaylineRepository.Create(info))
     {
         return(false);
     }
     Pay(info);
     return(true);
 }
Exemplo n.º 25
0
        /// <summary>
        /// 处理接口
        /// </summary>
        /// <returns></returns>
        public virtual PaylineEntity Process()
        {
            var inputparas = GetResponse();
            var info       = new PaylineEntity
            {
                Number    = HttpContext.Current.Request["Number"],
                OutNumber = HttpContext.Current.Request["OutNumber"],
                Status    = VerifyProcess(inputparas) ? PaylineStatusType.Success : PaylineStatusType.Failure
            };

            info.SetProperty(it => it.OutNumber);
            info.SetProperty(it => it.Status);
            info.SaveType = SaveType.Modify;
            return(info);
        }
Exemplo n.º 26
0
        public override bool Refund(PaylineEntity info)
        {
            var builder = new StringBuilder("{");

            //订单支付时传入的商户订单号,不能和 trade_no同时为空。
            builder.AppendFormat("\"out_trade_no\":\"{0}\",", info.Number);
            //支付宝交易号,和商户订单号不能同时为空  2017开头
            builder.AppendFormat("\"trade_no\":\"{0}\",", info.OutNumber);
            //需要退款的金额,该金额不能大于订单金额,单位为元,支持两位小数
            builder.AppendFormat("\"refund_amount\":\"{0}\",", 0 - info.Amount);
            //	退款的原因说明
            builder.AppendFormat("\"refund_reason\":\"{0}\",", "测试退款");
            //	标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传。
            builder.AppendFormat("\"out_request_no\":\"{0}\"", info.Number);
            ////商户的操作员编号
            //builder.AppendFormat("\"operator_id\":\"{0}\"", "FAST_INSTANT_TRADE_PAY");
            ////	商户的门店编号
            //builder.AppendFormat("\"store_id\":\"{0}\"", "FAST_INSTANT_TRADE_PAY");
            ////商户的终端编号
            //builder.AppendFormat("\"terminal_id\":\"{0}\"", "FAST_INSTANT_TRADE_PAY");
            builder.Append("}");

            AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();

            request.BizContent = builder.ToString();

            AlipayTradeRefundResponse response = AopClient.Execute(request);

            info.Request = response.Body;
            LogHelper.AddEcho(new EchoEntity
            {
                Method   = "Beeant.Repository.Services.Finance.AliPaylineRepository.Refund",
                Request  = request.BizContent,
                Response = response.Body,
                Remark   = "",
                Url      = HttpContext.Current.Request.Url.ToString(),
                Key      = info.Number,
                SaveType = SaveType.Add
            });
            if (response.Msg == "Success")
            {
                info.OutNumber = response.TradeNo;
                info.Status    = PaylineStatusType.Success;
                return(true);
            }

            return(false);
        }
Exemplo n.º 27
0
 /// <summary>
 /// 填充明细
 /// </summary>
 /// <param name="payline"></param>
 /// <param name="orders"></param>
 protected virtual void FillPaylineItems(PaylineEntity payline, IList <OrderEntity> orders)
 {
     if (orders == null)
     {
         return;
     }
     foreach (var order in orders)
     {
         var paylineItem = new PaylineItemEntity
         {
             Order    = order,
             Payline  = payline,
             Amount   = order.PayAmount == 0 && order.Deposit > 0 ? order.Deposit: order.TotalPayAmount - order.PayAmount,
             SaveType = SaveType.Add
         };
         payline.PaylineItems.Add(paylineItem);
     }
 }
Exemplo n.º 28
0
        /// <summary>
        /// 验证手机号码
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        protected virtual bool ValidateExist(PaylineEntity info)
        {
            if (info == null || info.Status == PaylineStatusType.Success || info.Status == PaylineStatusType.Failure)
            {
                return(false);
            }
            var query = new QueryInfo();

            query.Query <AccountIdentityEntity>().Where(it => it.Id != info.Id &&
                                                        it.Number == info.Number);
            var dataInfo = GetEntities <PaylineEntity>(query)?.FirstOrDefault();

            if (dataInfo == null || dataInfo.Status == PaylineStatusType.Success || dataInfo.Status == PaylineStatusType.Failure)
            {
                info.AddError("StatusAlreadyTrue");
                return(false);
            }
            return(true);
        }
Exemplo n.º 29
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="model"></param>
        /// <param name="paylineType"></param>
        /// <returns></returns>

        protected virtual PaylineEntity CreateRefund(PaylineModel model, PaylineType paylineType)
        {
            var info = new PaylineEntity
            {
                Account = new AccountEntity {
                    Id = Identity.Id
                },
                ChannelType  = model.ChannelType,
                Status       = PaylineStatusType.Create,
                Remark       = "",
                Type         = paylineType,
                SaveType     = SaveType.Add,
                PaylineItems = new List <PaylineItemEntity>(),
                Forms        = model.Forms ?? new Dictionary <string, string>()
            };
            var orderPays = GetOrderPays(model);

            FillRefundPaylineItems(info, orderPays);
            info.Amount = info.PaylineItems.Sum(it => it.Amount);
            GetPaylineApp(paylineType).Refund(info);
            return(info);
        }
Exemplo n.º 30
0
        /// <summary>
        /// 得到请求
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        protected virtual string GetJsApiRequest(PaylineEntity info)
        {
            var builder = new StringBuilder();
            var ticket  = Guid.NewGuid().ToString().Replace("-", "");

            Winner.Creator.Get <Winner.Cache.ICache>().Set(ticket, ticket, DateTime.Now.AddMinutes(5));
            builder.Append("<script type=\"text/javascript\"> function onBridgeReady(){");
            builder.AppendFormat("WeixinJSBridge.invoke('getBrandWCPayRequest',{0}", info.Forms.SerializeJson());
            builder.Append(",function(res){");
            builder.Append("if (res.err_msg == \"get_brand_wcpay_request:ok\") { ");
            builder.AppendFormat("window.location.href='{0}/WechatPay/Process?number={1}&ticket={2}';",
                                 ConfigurationManager.GetSetting <string>("DistributedOutsidePayUrl"),
                                 info.Number, ticket);
            builder.Append(" }})}");
            builder.Append(" if (typeof WeixinJSBridge == \"undefined\")");
            builder.Append(" {if (document.addEventListener) {");
            builder.Append(" document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);}");
            builder.Append(
                " else if (document.attachEvent) { document.attachEvent('WeixinJSBridgeReady', onBridgeReady);");
            builder.Append(" document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); } }");
            builder.Append("else{ onBridgeReady();}</script> ");
            return(builder.ToString());
        }