public ActionResult PayReturn_Charge(string id) { string result = string.Empty; try { id = DecodePaymentId(id); var payPlugin = PluginsManagement.GetPlugin <IPaymentPlugin>(id); if (payPlugin != null) { var paymentInfo = payPlugin.Biz.ProcessReturn(Request); var service = _iMemberCapitalService; var chargeInfo = service.GetChargeDetail(paymentInfo.OrderIds.FirstOrDefault()); if (chargeInfo != null && chargeInfo.ChargeStatus != Himall.Entities.ChargeDetailInfo.ChargeDetailStatus.ChargeSuccess) { //chargeInfo.ChargeWay = payPlugin.PluginInfo.DisplayName; chargeInfo.ChargeWay = PaymentApplication.GetForeGroundPaymentName(payPlugin.PluginInfo.Description); chargeInfo.ChargeStatus = Himall.Entities.ChargeDetailInfo.ChargeDetailStatus.ChargeSuccess; chargeInfo.ChargeTime = paymentInfo.TradeTime.HasValue ? paymentInfo.TradeTime.Value : DateTime.Now; service.UpdateChargeDetail(chargeInfo); result = payPlugin.Biz.ConfirmPayResult(); string payStateKey = CacheKeyCollection.PaymentState(chargeInfo.Id.ToString()); //获取支付状态缓存键 Cache.Insert(payStateKey, true, 15); //标记为已支付 } } } catch (Exception ex) { Log.Error("预存款充值回调出错:" + ex.Message); } ViewBag.Keyword = SiteSettings.Keyword; return(View()); }
// GET: Mobile/Payment public JsonResult Get(string orderIds) { var mobilePayments = Core.PluginsManagement.GetPlugins <IPaymentPlugin>(true).Where(item => item.Biz.SupportPlatforms.Contains(PlatformType)); string webRoot = CurrentUrlHelper.CurrentUrlNoPort(); string urlPre = webRoot + "/m-" + PlatformType + "/Payment/"; //获取待支付的所有订单 var orderService = _iOrderService; var orders = orderService.GetOrders(orderIds.Split(',').Select(t => long.Parse(t))).ToList(); var waitPayOrders = orders.Where(p => p.OrderStatus == Entities.OrderInfo.OrderOperateStatus.WaitPay); var totalAmount = waitPayOrders.Sum(t => t.OrderTotalAmount - t.CapitalAmount); /* 移到 Payment/pay实现 lly * //获取所有订单中的商品名称 * string productInfos = GetProductNameDescriptionFromOrders(orders); * string openId = Core.Helper.WebHelper.GetCookie(CookieKeysCollection.Mall_USER_OpenID); * if (!string.IsNullOrWhiteSpace(openId)) * { * openId = Core.Helper.SecureHelper.AESDecrypt(openId, "Mobile"); * } * else * { * var openUserInfo = _iMemberService.GetMember(CurrentUser.Id).MemberOpenIdInfo.FirstOrDefault(item => item.AppIdType == MemberOpenIdInfo.AppIdTypeEnum.Payment); * if (openUserInfo != null) * openId = openUserInfo.OpenId; * } * string[] strIds = orderIds.Split(','); * string notifyPre = urlPre + "Notify/", returnPre = webRoot + "/m-" + PlatformType + "/Member/PaymentToOrders?ids=" + orderIds; * * var orderPayModel = waitPayOrders.Select(p => new OrderPayInfo * { * PayId = 0, * OrderId = p.Id * }); * * //保存支付订单 * var payid = orderService.SaveOrderPayInfo(orderPayModel, PlatformType); * var ids = payid.ToString(); * */ var model = mobilePayments.ToArray().Select(item => { string url = string.Empty; return(new { id = item.PluginInfo.PluginId, //name = item.PluginInfo.DisplayName, name = PaymentApplication.GetForeGroundPaymentName(item.PluginInfo.DisplayName), logo = item.Biz.Logo, url = url }); }).OrderByDescending(d => d.id); foreach (var item in model) { Core.Log.Debug(item.id + " " + item.name); } return(Json(new { data = model, totalAmount = totalAmount })); }
public JsonResult Charge(string pluginId, decimal amount, bool ispresent = false) { amount = Math.Round(amount, 2); if (amount <= 0) { return(Json(new { success = false, msg = "请输入正确的金额" })); } var plugin = Core.PluginsManagement.GetPlugin <IPaymentPlugin>(pluginId); var chargeDetail = new DTO.ChargeDetail(); chargeDetail.ChargeAmount = amount; chargeDetail.ChargeStatus = ChargeDetailInfo.ChargeDetailStatus.WaitPay; chargeDetail.ChargeWay = PaymentApplication.GetForeGroundPaymentName(plugin.PluginInfo.Description); chargeDetail.CreateTime = DateTime.Now; chargeDetail.MemId = CurrentUser.Id; if (ispresent && SiteSettings.IsOpenRechargePresent) { var rule = RechargePresentRuleApplication.GetRules().FirstOrDefault(d => d.ChargeAmount == amount); if (rule != null) { chargeDetail.PresentAmount = rule.PresentAmount; } } var id = MemberCapitalApplication.AddChargeApply(chargeDetail); string openId = Core.Helper.WebHelper.GetCookie(CookieKeysCollection.HIMALL_USER_OpenID); if (!string.IsNullOrWhiteSpace(openId)) { openId = Core.Helper.SecureHelper.AESDecrypt(openId, "Mobile"); } else { var openUserInfo = Application.MemberApplication.GetMemberOpenIdInfoByuserId(CurrentUser.Id, Entities.MemberOpenIdInfo.AppIdTypeEnum.Payment); if (openUserInfo != null) { openId = openUserInfo.OpenId; } } string webRoot = Request.Url.Scheme + "://" + Request.Url.Authority; string notifyUrl = webRoot + "/m-" + PlatformType + "/Payment/CapitalChargeNotify/" + plugin.PluginInfo.PluginId.Replace(".", "-") + "/"; string returnUrl = webRoot + "/m-" + PlatformType + "/Capital/Index"; var requestUrl = plugin.Biz.GetRequestUrl(returnUrl, notifyUrl, id.ToString(), amount, "会员充值", openId); return(Json(new { href = requestUrl, success = true })); }
public object GetPaymentList(string orderIds, string typeid) { var mobilePayments = Core.PluginsManagement.GetPlugins <IPaymentPlugin>(true).OrderByDescending(d => d.PluginInfo.PluginId).Where(item => item.Biz.SupportPlatforms.Contains(Core.PlatformType.Android)); string webRoot = CurrentUrlHelper.CurrentUrlNoPort(); string urlPre = webRoot + "/m-" + Core.PlatformType.Android + "/Payment/"; //获取待支付的所有订单 var orderService = ServiceProvider.Instance <IOrderService> .Create; var orders = orderService.GetOrders(orderIds.Split(',').Select(t => long.Parse(t))).Where(r => r.OrderStatus == Entities.OrderInfo.OrderOperateStatus.WaitPay); var totalAmount = orders.Sum(t => t.OrderTotalAmount - t.CapitalAmount); //获取所有订单中的商品名称 string productInfos = GetProductNameDescriptionFromOrders(orders); string[] strIds = orderIds.Split(','); string notifyPre = urlPre + "Notify/", returnPre = webRoot + "/m-" + Core.PlatformType.Android + "/Member/PaymentToOrders?ids=" + orderIds; var orderPayModel = strIds.Select(item => new Entities.OrderPayInfo { PayId = 0, OrderId = long.Parse(item) }); //保存支付订单 var payid = orderService.SaveOrderPayInfo(orderPayModel, Core.PlatformType.Android); var ids = payid.ToString(); var model = mobilePayments.ToArray().Select(item => { string url = string.Empty; try { url = item.Biz.GetRequestUrl(returnPre, notifyPre + item.PluginInfo.PluginId.Replace(".", "-") + "/", ids, totalAmount, productInfos); } catch (Exception ex) { Core.Log.Error("获取支付方式错误:", ex); } return(new { id = item.PluginInfo.PluginId, //name = item.PluginInfo.DisplayName, name = PaymentApplication.GetForeGroundPaymentName(item.PluginInfo.DisplayName), logo = item.Biz.Logo, url = url }); }); model = model.Where(item => !string.IsNullOrWhiteSpace(item.url) && item.id.Contains(typeid)).OrderByDescending(d => d.id); return(new { success = true, data = model }); }
public object GetEnablePaymentList() { var mobilePayments = Core.PluginsManagement.GetPlugins <IPaymentPlugin>(true).OrderByDescending(d => d.PluginInfo.PluginId).Where(item => item.Biz.SupportPlatforms.Contains(Core.PlatformType.Android)); string webRoot = CurrentUrlHelper.CurrentUrlNoPort(); string urlPre = webRoot + "/m-" + Core.PlatformType.Android + "/Payment/"; var model = mobilePayments.ToArray().Select(item => { string url = string.Empty; return(new { id = item.PluginInfo.PluginId, name = PaymentApplication.GetForeGroundPaymentName(item.PluginInfo.DisplayName), logo = item.Biz.Logo, url = url }); }).OrderByDescending(d => d.id); return(new { success = true, data = model }); }
public ActionResult QRPay(string url, string id) { ViewBag.Logo = SiteSettings.Logo;//获取Logo var payment = Core.PluginsManagement.GetPlugin <IPaymentPlugin>(id); //ViewBag.Title = payment.PluginInfo.DisplayName + "支付"; //ViewBag.Name = payment.PluginInfo.DisplayName; ViewBag.Title = PaymentApplication.GetForeGroundPaymentName(payment.PluginInfo.DisplayName) + "支付"; ViewBag.Name = PaymentApplication.GetForeGroundPaymentName(payment.PluginInfo.DisplayName); //生成二维码 var qrCode = Core.Helper.QRCodeHelper.Create(url); string fileName = DateTime.Now.ToString("yyMMddHHmmssffffff") + ".jpg"; var qrCodeImagePath = "/temp/" + fileName; //qrCode.Save(Server.MapPath("~/temp/") + fileName); MemoryStream ms = new MemoryStream(); qrCode.Save(ms, ImageFormat.Gif); ms.Flush(); MemoryStream mem = new MemoryStream(ms.ToArray()); //通过IO策略来保存图片 Core.HimallIO.CreateFile(qrCodeImagePath, mem, FileCreateType.Create); ms.Dispose(); mem.Dispose(); //通过IO策略返回图片绝对地址 ViewBag.QRCode = Core.HimallIO.GetFilePath(qrCodeImagePath); ViewBag.HelpImage = "/Plugins/Payment/" + payment.PluginInfo.ClassFullName.Split(',')[1] + "/" + payment.Biz.HelpImage; ViewBag.Step = 2;//支付第二步 ViewBag.Keyword = SiteSettings.Keyword; return(View()); }
public object PostCharge(PaymentChargeModel para) { para.amount = Math.Round(para.amount, 2); if (para.amount <= 0) { return(Json(ErrorResult <dynamic>("请输入正确的金额"))); } if (string.IsNullOrWhiteSpace(para.openId)) { return(Json(ErrorResult <dynamic>("缺少OpenId"))); } try { //获取支付插件 var mobilePayments = Core.PluginsManagement.GetPlugins <IPaymentPlugin>(true).Where(item => item.Biz.SupportPlatforms.Contains(Core.PlatformType.WeiXinSmallProg)); if (mobilePayments.Any()) { var plugin = mobilePayments.Where(x => x.PluginInfo.PluginId.Contains(para.typeId)).FirstOrDefault(); //添加充值明细 var chargeDetail = new DTO.ChargeDetail(); chargeDetail.ChargeAmount = para.amount; chargeDetail.ChargeStatus = ChargeDetailInfo.ChargeDetailStatus.WaitPay; chargeDetail.ChargeWay = PaymentApplication.GetForeGroundPaymentName(plugin.PluginInfo.Description); chargeDetail.CreateTime = DateTime.Now; chargeDetail.MemId = CurrentUser.Id; var sitesetting = SiteSettingApplication.SiteSettings; if (para.ispresent && sitesetting.IsOpenRechargePresent) { var rule = RechargePresentRuleApplication.GetRules().FirstOrDefault(d => d.ChargeAmount == para.amount); if (rule != null) { chargeDetail.PresentAmount = rule.PresentAmount; } } var id = MemberCapitalApplication.AddChargeApply(chargeDetail); string webRoot = CurrentUrlHelper.CurrentUrlNoPort(); string urlPre = webRoot + "/m-" + Core.PlatformType.Android + "/Payment/"; string notifyPre = urlPre + "CapitalChargeNotify/"; string returnPre = ""; var models = mobilePayments.ToArray().Select(item => { string url = string.Empty; try { url = item.Biz.GetRequestUrl(returnPre, notifyPre + item.PluginInfo.PluginId.Replace(".", "-") + "/", id.ToString(), para.amount, "会员充值", openId: para.openId); } catch (Exception ex) { Core.Log.Error("获取支付方式错误:", ex); } //适配小程序接口,从支付插件里解析出相应参数 //字符串格式:prepayId:234320480,partnerid:32423489,nonceStr=dslkfjsld #region 适配小程序接口,从支付插件里解析出相应参数 var prepayId = string.Empty; var nonceStr = string.Empty; var timeStamp = string.Empty; var sign = string.Empty; if (!string.IsNullOrWhiteSpace(url)) { var paras = url.Split(','); foreach (var str in paras) { var keyValuePair = str.Split(':'); if (keyValuePair.Length == 2) { switch (keyValuePair[0]) { case "prepayId": prepayId = keyValuePair[1]; break; case "nonceStr": nonceStr = keyValuePair[1]; break; case "timeStamp": timeStamp = keyValuePair[1]; break; case "sign": sign = keyValuePair[1]; break; } } } } #endregion return(new { prepayId = prepayId, nonceStr = nonceStr, timeStamp = timeStamp, sign = sign }); }); var model = models.FirstOrDefault(); if (null == model) { return(Json(ErrorResult <dynamic>("获取支付方式失败,请与管理员联系"))); } return(Json(model)); } else { Core.Log.Error("暂未配置支付方式"); return(Json(ErrorResult <dynamic>("暂未配置支付方式"))); } } catch (Exception ex) { Core.Log.Error("预账户充值报错:", ex); return(Json(ErrorResult <dynamic>("预账户充值报错"))); } }
/// <summary> /// 预账户充值接口 /// </summary> /// <param name="pluginId">支付插件Id</param> /// <param name="amount">充值金额</param> /// <returns></returns> public object Charge(PaymentChargeModel para) { para.amount = Math.Round(para.amount, 2); if (para.amount <= 0) { return(ErrorResult("请输入正确的金额")); } try { //获取支付插件 var mobilePayments = Core.PluginsManagement.GetPlugins <IPaymentPlugin>(true).OrderByDescending(d => d.PluginInfo.PluginId).Where(item => item.Biz.SupportPlatforms.Contains(Core.PlatformType.Android)); var plugin = mobilePayments.Where(x => x.PluginInfo.PluginId.Contains(para.typeid)).FirstOrDefault(); //添加充值明细 var chargeDetail = new DTO.ChargeDetail(); chargeDetail.ChargeAmount = para.amount; chargeDetail.ChargeStatus = ChargeDetailInfo.ChargeDetailStatus.WaitPay; //chargeDetail.ChargeWay = plugin.PluginInfo.DisplayName; chargeDetail.ChargeWay = PaymentApplication.GetForeGroundPaymentName(plugin.PluginInfo.Description); chargeDetail.CreateTime = DateTime.Now; chargeDetail.MemId = CurrentUser.Id; var sitesetting = SiteSettingApplication.SiteSettings; if (para.ispresent && sitesetting.IsOpenRechargePresent) { var rule = RechargePresentRuleApplication.GetRules().FirstOrDefault(d => d.ChargeAmount == para.amount); if (rule != null) { chargeDetail.PresentAmount = rule.PresentAmount; } } var id = MemberCapitalApplication.AddChargeApply(chargeDetail); string webRoot = CurrentUrlHelper.CurrentUrlNoPort(); string urlPre = webRoot + "/m-" + Core.PlatformType.Android + "/Payment/"; string notifyPre = urlPre + "CapitalChargeNotify/"; string returnPre = webRoot + "/m-" + Core.PlatformType.Android; var model = mobilePayments.ToArray().Select(item => { string url = string.Empty; try { url = item.Biz.GetRequestUrl(returnPre, notifyPre + item.PluginInfo.PluginId.Replace(".", "-") + "/", id.ToString(), para.amount, "会员充值"); } catch (Exception ex) { Core.Log.Error("获取支付方式错误:", ex); } return(new { id = item.PluginInfo.PluginId, //name = item.PluginInfo.DisplayName, name = PaymentApplication.GetForeGroundPaymentName(item.PluginInfo.DisplayName), logo = item.Biz.Logo, url = url }); }); model = model.Where(item => !string.IsNullOrWhiteSpace(item.url) && item.id.Contains(para.typeid)).OrderByDescending(d => d.id); dynamic result = SuccessResult(); result.data = model; return(result); } catch (Exception ex) { Core.Log.Error("预账户充值报错:", ex); return(ErrorResult("预账户充值报错")); } }