예제 #1
0
        public ActionResult Edit(CardCreateEditViewModel model)
        {
            Sidebar();
            var temp = db.Cards.FirstOrDefault(s => s.ID == model.ID);

            var          tempenterprise = db.Enterprises.FirstOrDefault(s => s.ID == temp.EnterpriseID);
            IConfig      config         = new ConfigMini();
            WeChatMinApi w = new WeChatMinApi(config);

            //防止企业用户串号修改
            if (AccontData.UserType == UserType.Enterprise &&
                temp.EnterpriseID != AccontData.EnterpriseID)
            {
                return(this.ToError("错误", "没有该操作权限", Url.Action("Index")));
            }
            if (ModelState.IsValid)
            {
                var t = db.Cards.FirstOrDefault(s => s.ID == model.ID);
                t.Name        = model.Name;
                t.Gender      = model.Gender;
                t.Avatar      = string.Join(",", model.Avatar.Images);
                t.PhoneNumber = model.PhoneNumber;
                t.Email       = model.Email;
                t.WeChatCode  = model.WeChatCode;
                t.Mobile      = model.Mobile;
                t.Position    = model.Position;
                t.Remark      = model.Remark;
                t.Info        = model.Info;
                t.Enable      = model.Enable;
                t.Voice       = string.Join(",", model.Voice.Images);
                t.Video       = string.Join(",", model.Video.Images);
                t.Images      = string.Join(",", model.Images.Images);
                t.Sort        = model.Sort;
                if (string.IsNullOrWhiteSpace(temp.WeChatMiniQrCode))
                {
                    var scene = new Dictionary <string, string>();
                    scene.Add("CardId", model.ID.ToString());

                    t.WeChatMiniQrCode = w.GetWXACodeUnlimit(Common.WeChat.WeChatPage.CardDetail, scene);
                }
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            return(View(model));
        }
예제 #2
0
파일: OrderBLL.cs 프로젝트: radtek/Aicard
        /// <summary>
        /// 创建升级支付订单
        /// </summary>
        /// <param name="code"></param>
        /// <param name="userID"></param>
        /// <returns></returns>
        public object CreateUpGradeOrder(string code, string userID)
        {
            //1.调用小程序登录API,获取openID
            IConfig              config       = new ConfigMiniPersonal();
            WeChatMinApi         miniApi      = new WeChatMinApi(config);
            Jscode2sessionResult openIDResule = miniApi.Jscode2session(code);

            if (openIDResule == null || string.IsNullOrWhiteSpace(openIDResule.OpenID))
            {
                return(new { retCode = "Error", retMsg = "无法获取openID,请确认code是否正确", objectData = "" });
            }
            //using (ApplicationDbContext db = new ApplicationDbContext())
            //{
            //    //防止用户重复提交订单,把Vip状态设为升级中
            //    var vip = db.Vips.FirstOrDefault(s => s.UserID == userID);
            //    vip.State = Common.Enums.VipState.Uploading;
            //    db.SaveChanges();
            //}
            string  OrderCode = CreateOrderCode(userID); //创建订单号
            decimal Amount    = Comm.UpGradeAmount();    //升级费用

            if (string.IsNullOrEmpty(OrderCode))
            {
                return(new { retCode = "Error", retMsg = "订单号生成失败", objectData = "" });
            }
            //2.调用支付统一下单API
            #region 调用支付统一下单API
            UnifiedPayData payData = new UnifiedPayData()
            {
                attach       = string.Empty,
                body         = "个人升级成为VIP,提交支付费用",
                goods_tag    = string.Empty,
                openid       = openIDResule.OpenID,
                out_trade_no = OrderCode,
                total_fee    = (int)Amount * 100,
                //total_fee = 1,//测试10分订单
                trade_type = "JSAPI"
            };

            RequestResult payResult     = payment.GetUnifiedOrderResult(payData);
            WxPayData     payreturnData = payResult.objectData;
            if (payResult.retCode != ReqResultCode.success || payreturnData == null)
            {
                return(new { retCode = "Error", retMsg = "请求微信支付统一下单失败", objectData = "" });
            }
            #endregion

            //3.生成商户订单
            #region 生成商户订单
            int rows = 0;
            using (ApplicationDbContext db = new ApplicationDbContext())
            {
                //2.生成商户订单
                Order order = new Order()
                {
                    Amount           = 0,
                    Code             = OrderCode,
                    ReceivableAmount = Amount,
                    State            = Common.Enums.OrderState.UnHandle,
                    Channel          = Common.Enums.PayChannel.WxPay,
                    Type             = Common.Enums.OrderType.Receivable,
                    UserID           = userID,
                    CreateDateTime   = DateTime.Now,
                    PayCode          = string.Empty,
                    PayInput         = JsonConvert.SerializeObject(payData)
                };
                db.Orders.Add(order);
                rows = db.SaveChanges();
            }
            if (rows <= 0)
            {
                return(new { retCode = "Error", retMsg = "保存订单数据失败", objectData = "" });
            }
            #endregion
            //4.返回支付参数:5个参数,生成签名再返回
            System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
            long            ts        = (long)(DateTime.Now - startTime).TotalSeconds;                         // 相差秒数

            System.Text.StringBuilder paySignpar = new System.Text.StringBuilder();
            paySignpar.Append($"appId={payreturnData.GetValue("appid")?.ToString()}");
            paySignpar.Append($"&nonceStr={payreturnData.GetValue("nonce_str")?.ToString()}");
            paySignpar.Append($"&package=prepay_id={payreturnData.GetValue("prepay_id")?.ToString()}");
            paySignpar.Append($"&signType=MD5");
            paySignpar.Append($"&timeStamp={ts.ToString()}");
            paySignpar.Append($"&key={ConfigurationManager.AppSettings["wxPayKey"] ?? string.Empty}");
            string strPaySignpar = paySignpar.ToString();

            var     sign     = GetMd5Hash(strPaySignpar).ToUpper();
            dynamic retModel = new
            {
                timeStamp = ts.ToString(),
                nonceStr  = payreturnData.GetValue("nonce_str")?.ToString(),
                package   = "prepay_id=" + payreturnData.GetValue("prepay_id")?.ToString(),
                signType  = "MD5",
                paySign   = sign,
                total_fee = payData.total_fee / 100m,
            };
            return(new { retCode = "Success", retMsg = "成功", objectData = retModel });
        }