コード例 #1
0
        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());
        }
コード例 #2
0
ファイル: PaymentController.cs プロジェクト: redpanda321/Mall
        // 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 }));
        }
コード例 #3
0
        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
            }));
        }
コード例 #4
0
        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 });
        }
コード例 #5
0
        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 });
        }
コード例 #6
0
        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());
        }
コード例 #7
0
        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>("预账户充值报错")));
            }
        }
コード例 #8
0
        /// <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("预账户充值报错"));
            }
        }