/// <summary> /// 诊所创建支付 /// </summary> /// <param name="shopId">诊所ID</param> /// <param name="balance">支付金额</param> /// <param name="webRoot">站点URL</param> /// <returns></returns> public static ChargePayModel PaymentList(long shopId, decimal balance, string webRoot) { ChargeDetailShopInfo model = new ChargeDetailShopInfo() { ChargeAmount = balance, ChargeStatus = Himall.Model.ChargeDetailInfo.ChargeDetailStatus.WaitPay, CreateTime = DateTime.Now, ShopId = shopId }; long orderIds = MemberCapitalApplication.AddChargeDetailShop(model); ChargePayModel viewmodel = new ChargePayModel(); //获取同步返回地址 string returnUrl = webRoot + "/SellerAdmin/Pay/CapitalChargeReturn/{0}"; //获取异步通知地址 string payNotify = webRoot + "/SellerAdmin/Pay/CapitalChargeNotify/{0}"; var payments = Core.PluginsManagement.GetPlugins <IPaymentPlugin>(true).Where(item => item.Biz.SupportPlatforms.Contains(PlatformType.PC)); const string RELATEIVE_PATH = "/Plugins/Payment/"; var models = payments.Select(item => { string requestUrl = string.Empty; try { requestUrl = item.Biz.GetRequestUrl(string.Format(returnUrl, EncodePaymentId(item.PluginInfo.PluginId)), string.Format(payNotify, EncodePaymentId(item.PluginInfo.PluginId)), orderIds.ToString(), model.ChargeAmount, "预付款充值"); } catch (Exception ex) { Core.Log.Error("支付页面加载支付插件出错", ex); } return(new PaymentModel() { Logo = RELATEIVE_PATH + item.PluginInfo.ClassFullName.Split(',')[1] + "/" + item.Biz.Logo, RequestUrl = requestUrl, UrlType = item.Biz.RequestUrlType, Id = item.PluginInfo.PluginId }); }); models = models.Where(item => !string.IsNullOrEmpty(item.RequestUrl) && item.Id != "Himall.Plugin.Payment.WeiXinPay" && item.Id != "Himall.Plugin.Payment.WeiXinPay_Native");//只选择正常加载的插件 viewmodel.OrderIds = orderIds.ToString(); viewmodel.TotalAmount = model.ChargeAmount; viewmodel.Step = 1; viewmodel.UnpaidTimeout = SiteSettingApplication.GetSiteSettings().UnpaidTimeout; viewmodel.models = models.ToList(); return(viewmodel); }
/// <summary> /// 诊所充值 /// </summary> /// <param name="Id">充值流水预约单ID</param> /// <param name="TradNo">支付流水号</param> /// <param name="ChargeWay">支付方式</param> public static void ShopRecharge(long Id, string TradNo, string ChargeWay) { //处理充值流水记录 var model = MemberCapitalApplication.GetChargeDetailShop(Id); if (model.ChargeStatus != ChargeDetailInfo.ChargeDetailStatus.ChargeSuccess) { model.ChargeStatus = ChargeDetailInfo.ChargeDetailStatus.ChargeSuccess; model.ChargeTime = DateTime.Now; model.ChargeWay = ChargeWay; MemberCapitalApplication.UpdateChargeDetailShop(model); //资金处理 _iBillingService.UpdateAccount(model.ShopId, model.ChargeAmount, Himall.CommonModel.ShopAccountType.Recharge, TradNo, ChargeWay, Id); } }
/// <summary> /// 支付提现 /// </summary> public static void PaymentWithdraw(long withdrawId) { var model = Service.GetWithdraw(withdrawId); try { switch (model.WithdrawType) { case DistributionWithdrawType.Alipay: var result = Payment(DistributionWithdrawType.Alipay, model.WithdrawAccount, model.Amount, $"(单号 {withdrawId})", model.Id.ToString(), model.WithdrawName); Service.SuccessWithdraw(withdrawId, result.TradNo.ToString()); break; case DistributionWithdrawType.Capital: var no = MemberCapitalApplication.BrokerageTransfer(model.MemberId, model.Amount, $"(单号 {withdrawId})", model.Id.ToString()); Service.SuccessWithdraw(withdrawId, no.ToString()); break; case DistributionWithdrawType.WeChat: var resultWechat = Payment(DistributionWithdrawType.WeChat, model.WithdrawAccount, model.Amount, $"(单号 {withdrawId})", model.Id.ToString()); Service.SuccessWithdraw(withdrawId, resultWechat.TradNo.ToString()); break; } } catch (Exception ex) { //支付失败(回滚提现状态) Service.FailWithdraw(withdrawId, ex.Message); throw ex; } //发送消息 var member = MemberApplication.GetMember(model.MemberId); var message = new MessageWithDrawInfo(); message.UserName = member != null ? member.UserName : ""; message.Amount = model.Amount; message.ApplyType = model.WithdrawType.GetHashCode(); message.ApplyTime = model.ApplyTime; message.Remark = model.Remark; message.SiteName = SiteSettingApplication.SiteSettings.SiteName; Task.Factory.StartNew(() => ServiceProvider.Instance <IMessageService> .Create.SendMessageOnDistributionMemberWithDrawSuccess(model.MemberId, message)); }