示例#1
0
 public ActionResult ZYOrderAliPay(Enums.Enums.OrderType body, string ordercode, string userID)
 {
     try
     {
         var ordermodel = db.zyorder.FirstOrDefault(s => s.OrderCode == ordercode);//查询订单信息
         if (!db.tb_userinfos.Any(s => s.UserID == userID))
         {
             return(Json(Comm.ToJsonResult("Error", "用户不存在"), JsonRequestBehavior.AllowGet));
         }
         if (body != Enums.Enums.OrderType.Recharge && body != Enums.Enums.OrderType.OrderPay)
         {
             return(Json(Comm.ToJsonResult("Error", "请求参数错误"), JsonRequestBehavior.AllowGet));
         }
         if (ordermodel == null)
         {
             return(Json(Comm.ToJsonResult("Error", "订单不存在"), JsonRequestBehavior.AllowGet));
         }
         string     appid             = AliPayConfig.appid;                //appid
         string     app_private_key   = AliPayConfig.app_private_key;      //私钥
         string     alipay_public_key = AliPayConfig.app_public_key;       //公钥
         string     charset           = "utf-8";
         string     outtradeno        = AliPayConfig.GenerateOutTradeNo(); //订单号
         string     notifyurl         = AliPayConfig.notifyurl;            //回调通知页面地址
         IAopClient client            = new DefaultAopClient("https://openapi.alipay.com/gateway.do", appid, app_private_key.Trim(), "json", "1.0", "RSA2", alipay_public_key.Trim(), charset, false);
         //实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称如:alipay.trade.app.pay
         AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
         //SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
         AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
         model.Body           = ((Enums.Enums.OrderType)body).GetDisplayName();
         model.Subject        = "自营订单支付";
         model.TotalAmount    = ordermodel.total_fee.ToString(); //type.GetDisplayName();
         model.ProductCode    = AliPayConfig.productcode;
         model.OutTradeNo     = outtradeno;
         model.TimeoutExpress = "30m";
         request.SetBizModel(model);
         request.SetNotifyUrl(notifyurl);
         //这里和普通的接口调用不同,使用的是sdkExecute
         AlipayTradeAppPayResponse response = client.SdkExecute(request);
         //HttpUtility.HtmlEncode是为了输出到页面时防止被浏览器将关键参数html转义,实际打印到日志以及http传输不会有这个问题
         //Response.Write(HttpUtility.HtmlEncode(response.Body));
         string resultcode = HttpUtility.HtmlEncode(response.Body);
         if (!string.IsNullOrWhiteSpace(resultcode))
         {
             //保存下单信息到数据库
             PayOrder paymodel = new PayOrder();
             paymodel.OrderState           = Enums.Enums.OrderState.UnHandle;
             paymodel.out_trade_no         = outtradeno;
             paymodel.Paynoncestr          = string.Empty;
             paymodel.PayPrepay_id         = outtradeno;
             paymodel.settlement_total_fee = ordermodel.total_fee;
             paymodel.CreateTime           = DateTime.Now;
             paymodel.Sign       = resultcode;
             paymodel.total_fee  = ordermodel.total_fee;
             paymodel.User_ID    = userID;
             paymodel.OrderType  = body;
             paymodel.RelationID = ordermodel.ID;
             db.PayOrders.Add(paymodel);
             int resultrow = db.SaveChanges();
             if (resultrow > 0)
             {
                 string tempresult = resultcode.Replace("amp;", "");
                 var    returndata = new
                 {
                     result    = tempresult,
                     prepay_id = outtradeno
                 };
                 return(Json(Comm.ToJsonResult("Success", "成功", returndata), JsonRequestBehavior.AllowGet));
             }
             else
             {
                 return(Json(Comm.ToJsonResult("Error", "下单失败"), JsonRequestBehavior.AllowGet));
             }
         }
         else
         {
             return(Json(Comm.ToJsonResult("Error", "下单失败"), JsonRequestBehavior.AllowGet));
         }
     }
     catch (Exception ex)
     {
         return(Json(Comm.ToJsonResult("Error", ex.Message), JsonRequestBehavior.AllowGet));
     }
 }
示例#2
0
        public ActionResult ZYOrderBalance(Enums.Enums.OrderType body, string ordercode, string userID)
        {
            try
            {
                var ordermodel = db.zyorder.FirstOrDefault(s => s.OrderCode == ordercode);//查询订单信息
                if (!db.tb_userinfos.Any(s => s.UserID == userID))
                {
                    return(Json(Comm.ToJsonResult("UserNotFind", "用户不存在"), JsonRequestBehavior.AllowGet));
                }
                if (body != Enums.Enums.OrderType.Recharge && body != Enums.Enums.OrderType.OrderPay)
                {
                    return(Json(Comm.ToJsonResult("Error", "请求参数错误"), JsonRequestBehavior.AllowGet));
                }
                if (ordermodel == null)
                {
                    return(Json(Comm.ToJsonResult("OrderNotFind", "订单不存在"), JsonRequestBehavior.AllowGet));
                }
                var usmodel = db.tb_userinfos.FirstOrDefault(s => s.UserID == userID);
                if (usmodel.Balance < ordermodel.total_fee)
                {
                    return(Json(Comm.ToJsonResult("BalanceShortage", "余额不足"), JsonRequestBehavior.AllowGet));
                }
                usmodel.Balance = usmodel.Balance - ordermodel.total_fee;

                BalanceDetail model = new BalanceDetail();
                model.MoverBalance = ordermodel.total_fee;
                model.MoverTime    = DateTime.Now;
                model.MoverType    = 1;
                model.Remark       = "自营订单支付";
                model.UserID       = ordermodel.User_ID;
                model.CountBalance = usmodel.Balance - ordermodel.total_fee;
                db.BalanceDetail.Add(model);


                //保存下单信息到数据库
                PayOrder paymodel = new PayOrder();
                paymodel.OrderState           = Enums.Enums.OrderState.Success;
                paymodel.out_trade_no         = "";
                paymodel.Paynoncestr          = string.Empty;
                paymodel.PayPrepay_id         = "";
                paymodel.settlement_total_fee = ordermodel.total_fee;
                paymodel.CreateTime           = DateTime.Now;
                paymodel.Sign       = "";
                paymodel.total_fee  = ordermodel.total_fee;
                paymodel.User_ID    = userID;
                paymodel.OrderType  = body;
                paymodel.RelationID = ordermodel.ID;
                db.PayOrders.Add(paymodel);
                int resultrow = db.SaveChanges();
                if (resultrow > 0)
                {
                    return(Json(Comm.ToJsonResult("Success", "成功"), JsonRequestBehavior.AllowGet));
                }
                else
                {
                    return(Json(Comm.ToJsonResult("Error", "下单失败"), JsonRequestBehavior.AllowGet));
                }
            }
            catch (Exception ex)
            {
                return(Json(Comm.ToJsonResult("Error", ex.Message), JsonRequestBehavior.AllowGet));
            }
        }
示例#3
0
        public ActionResult ToOrder(Enums.Enums.OrderType body, RechargeType type, string userID)
        {
            if (!db.tb_userinfos.Any(s => s.UserID == userID))
            {
                return(Json(Comm.ToJsonResult("Error", "用户不存在"), JsonRequestBehavior.AllowGet));
            }
            if (body != Enums.Enums.OrderType.Recharge && body != Enums.Enums.OrderType.OrderPay)
            {
                return(Json(Comm.ToJsonResult("Error", "请求参数错误"), JsonRequestBehavior.AllowGet));
            }
            if (type != Enums.Enums.RechargeType.Fifty && type != Enums.Enums.RechargeType.FiveHundred && type != Enums.Enums.RechargeType.Hundred && type != Enums.Enums.RechargeType.Ten && type != Enums.Enums.RechargeType.Thirty && type != Enums.Enums.RechargeType.TwoHundred)
            {
                return(Json(Comm.ToJsonResult("Error", "请求参数错误"), JsonRequestBehavior.AllowGet));
            }
            WxPayData parmdata     = new WxPayData();
            string    out_trade_no = WxPayApi.GenerateOutTradeNo();

            parmdata.SetValue("body", ((Enums.Enums.OrderType)body).GetDisplayName());                //商品描述
            parmdata.SetValue("attach", "逸趣网络科技有限公司");                                                //附加数据
            parmdata.SetValue("out_trade_no", out_trade_no);                                          //商户订单号
            parmdata.SetValue("total_fee", Convert.ToInt32(type.GetDisplayName()));                   //总金额 * 100
            parmdata.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));                 //交易起始时间
            parmdata.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss")); //交易结束时间
            parmdata.SetValue("goods_tag", "");                                                       //商品标记
            parmdata.SetValue("trade_type", "APP");                                                   //交易类型
            //parmdata.SetValue("product_id", productid);//商品ID

            WxPayData resultdata = WxPayApi.UnifiedOrder(parmdata);
            string    resultcode = resultdata.GetValue("return_code").ToString();

            if (resultcode.Equals("SUCCESS"))
            {
                string signstr     = resultdata.GetValue("sign").ToString();
                string noncestr    = WxPayApi.GenerateNonceStr();
                string result_code = resultdata.GetValue("result_code").ToString();
                string prepay_id   = string.Empty;
                if (result_code.Equals("SUCCESS"))
                {
                    prepay_id = resultdata.GetValue("prepay_id").ToString();
                    //var stringA = $"appid={WxPayConfig.APPID}&noncestr={noncestr}&package=Sign=WXPay&partnerid={WxPayConfig.MCHID}&prepayid={prepay_id}&timestamp={Unite.GenerateTimeStamp(DateTime.Now)}&key={WxPayConfig.KEY}";
                    //var sign = Unite.ToMD5New(stringA).ToUpper();

                    //保存下单信息到数据库
                    PayOrder model = new PayOrder();
                    model.OrderState           = Enums.Enums.OrderState.UnHandle;
                    model.out_trade_no         = out_trade_no;
                    model.Paynoncestr          = noncestr;
                    model.PayPrepay_id         = prepay_id;
                    model.settlement_total_fee = Convert.ToInt32(type.GetDisplayName());
                    model.CreateTime           = DateTime.Now;
                    model.Sign      = signstr;
                    model.total_fee = Convert.ToInt32(type.GetDisplayName());
                    model.User_ID   = userID;
                    model.OrderType = body;
                    db.PayOrders.Add(model);
                    int resultrow = db.SaveChanges();
                    //保存订单数据结果
                    if (resultrow > 0)
                    {
                        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={resultdata.GetValue("appid")?.ToString()}");
                        paySignpar.Append($"&noncestr={noncestr}");
                        paySignpar.Append($"&package=Sign=WXPay&partnerid={WxPayConfig.MCHID}");
                        paySignpar.Append($"&prepayid={resultdata.GetValue("prepay_id")?.ToString()}");
                        //paySignpar.Append($"&signType=MD5");
                        paySignpar.Append($"&timestamp={ts.ToString()}");
                        paySignpar.Append($"&key={WxPayConfig.KEY ?? string.Empty}");
                        string strPaySignpar = paySignpar.ToString();

                        var sign = Unite.GetMd5Hash(strPaySignpar).ToUpper();
                        //dynamic retModel = new
                        //{
                        //    timeStamp = ts.ToString(),
                        //    nonceStr = resultdata.GetValue("nonce_str")?.ToString(),
                        //    package = "prepay_id=" + resultdata.GetValue("prepay_id")?.ToString(),
                        //    signType = "MD5",
                        //    paySign = sign,
                        //    total_fee = model.total_fee / 100m,
                        //};

                        var returndata = new
                        {
                            result    = resultcode,
                            timestamp = ts.ToString(),
                            prepay_id = prepay_id,
                            noncestr  = noncestr,
                            sign      = sign
                        };
                        return(Json(Comm.ToJsonResult("Success", "成功", returndata), JsonRequestBehavior.AllowGet));
                    }
                    else
                    {
                        return(Json(Comm.ToJsonResult("Error", "下单失败"), JsonRequestBehavior.AllowGet));
                    }
                }
                else
                {
                    return(Json(Comm.ToJsonResult("Error", "下单失败"), JsonRequestBehavior.AllowGet));
                }
            }
            else
            {
                return(Json(Comm.ToJsonResult("Error", "下单失败"), JsonRequestBehavior.AllowGet));
            }
        }