/// <summary> /// 获取支付时使用的Html /// 交易不存在等错误发生时返回错误信息 /// </summary> public virtual HtmlString GetPaymentHtml(long transactionId) { // 获取交易和支付接口 PaymentTransaction transaction = null; PaymentApi api = null; UnitOfWork.ReadData <PaymentTransaction>(r => { transaction = r.GetById(transactionId); api = transaction == null ? null : transaction.Api; var _ = api == null ? null : api.Type; // 在数据库连接关闭前抓取类型 }); // 检查交易和接口是否存在 if (transaction == null) { return(BuildErrorHtml(new T("Payment transaction not found"))); } else if (api == null) { return(BuildErrorHtml(new T("Payment api not exist"))); } // 检查当前登录用户是否可以支付 var result = transaction.Check(c => c.IsPayerLoggedIn); if (!result.First) { return(BuildErrorHtml(result.Second)); } result = transaction.Check(c => c.IsPayable); if (!result.First) { return(BuildErrorHtml(result.Second)); } // 调用接口处理器生成支付html var html = new HtmlString("No Result"); var handlers = api.GetHandlers(); handlers.ForEach(h => h.GetPaymentHtml(transaction, ref html)); return(html); }
/// <summary> /// 获取显示交易结果的Html /// </summary> public void GetResultHtml(PaymentTransaction transaction, IList <HtmlString> html) { // 显示内容 // 根据订单状态显示 // - WaitingBuyerPay: 订单创建成功,请付款 // - WaitingSellerSendGoods: 您已付款成功,请等待卖家发货 // - WaitingBuyerConfirm: 卖家已发货,请在收到货物后确认收货 // - Success: 订单交易成功,感谢您的惠顾 // - Cancelled: 订单已取消 // - Invalid: 订单已作废 // 订单编号: {编号} 订单金额: {金额} 账单金额: {金额} // [[使用{接口}支付]] // 获取关联订单 var templateManager = Application.Ioc.Resolve <TemplateManager>(); var sellerOrderManager = Application.Ioc.Resolve <SellerOrderManager>(); var sellerOrder = sellerOrderManager.Get(transaction.ReleatedId ?? Guid.Empty); if (sellerOrder == null) { html.Add(new HtmlString(templateManager.RenderTemplate( "shopping.order/order_checkout.html", null))); return; } // 可支付时,显示支付按钮跳转到支付页面 // 不可支付时,跳转到订单详情页(按流水号而不是买家订单Id) var transactionManager = Application.Ioc.Resolve <PaymentTransactionManager>(); var currencyManager = Application.Ioc.Resolve <CurrencyManager>(); html.Add(new HtmlString(templateManager.RenderTemplate( "shopping.order/order_checkout.html", new { orderSerial = sellerOrder.Serial, orderState = sellerOrder.State.ToString(), orderAmount = currencyManager .GetCurrency(sellerOrder.Currency).Format(sellerOrder.TotalCost), transactionAmount = currencyManager .GetCurrency(transaction.CurrencyType).Format(transaction.Amount), isPayable = transaction.Check(x => x.IsPayable).First, apiName = new T(transaction.Api.Name), paymentUrl = transactionManager.GetPaymentUrl(transaction.Id) }))); }
/// <summary> /// 获取显示交易结果的Html /// </summary> public override void GetResultHtml(PaymentTransaction transaction, IList <HtmlString> html) { // 显示内容 // 如果交易本身不可支付 // - 如果交易已支付,延迟跳转到订单列表 // - 否则显示交易状态信息 // 如果交易本身可支付 // - 如果所有订单可支付,则显示支付按钮 // - 否则显示交易状态信息 var templateManager = Application.Ioc.Resolve <TemplateManager>(); var currencyManager = Application.Ioc.Resolve <CurrencyManager>(); var transactionManager = Application.Ioc.Resolve <PaymentTransactionManager>(); var orderManager = Application.Ioc.Resolve <SellerOrderManager>(); var orderIds = transaction.ReleatedTransactions.Select(t => t.ReleatedId); var orders = orderManager .GetMany(o => orderIds.Contains(o.Id)) .Select(o => new { id = o.Id, serial = o.Serial, state = o.State.ToString(), amount = currencyManager.GetCurrency(o.Currency).Format(o.TotalCost), payable = o.Check(c => c.CanPay).First }) .ToList(); html.Add(new HtmlString(templateManager.RenderTemplate( "shopping.order/order_checkout_merged.html", new { transactionSerial = transaction.Serial, transactionState = transaction.State.ToString(), transactionAmount = currencyManager .GetCurrency(transaction.CurrencyType).Format(transaction.Amount), orders = orders, isPayable = transaction.Check(x => x.IsPayable).First, isAllOrderPayable = orders.Any() && orders.All(o => o.payable), apiName = new T(transaction.Api.Name), paymentUrl = transactionManager.GetPaymentUrl(transaction.Id) }))); }