Beispiel #1
0
        /// <summary>
        /// 创建充值订单
        /// </summary>
        /// <param name="orderInfo"></param>
        /// <param name="log"></param>
        /// <returns></returns>
        public static RevOrderResult SaveOrder(HWOrder orderInfo, ILogger log)
        {
            OracleParameter[] pars =
            {
                new OracleParameter(":flow_type",         OracleDbType.Varchar2)
                {
                    Value = orderInfo.flow_type
                },
                new OracleParameter(":partner_order_no",  OracleDbType.Varchar2)
                {
                    Value = orderInfo.orderno
                },
                new OracleParameter(":card_type",         OracleDbType.Decimal)
                {
                    Value = orderInfo.card_type
                },
                new OracleParameter(":pay_type",          OracleDbType.Decimal)
                {
                    Value = orderInfo.pay_type
                },
                new OracleParameter(":product_name",      OracleDbType.Varchar2)
                {
                    Value = orderInfo.product_name
                },
                new OracleParameter(":v_notify_url",      OracleDbType.Varchar2)
                {
                    Value = string.Empty
                },
                new OracleParameter(":mobile",            OracleDbType.Varchar2)
                {
                    Value = orderInfo.mobile
                },
                new OracleParameter(":account",           OracleDbType.Varchar2)
                {
                    Value = orderInfo.account
                },
                new OracleParameter(":product_id",        OracleDbType.Varchar2)
                {
                    Value = orderInfo.product_id
                },
                new OracleParameter(":face",              OracleDbType.Decimal)
                {
                    Value = orderInfo.face
                },
                new OracleParameter(":price",             OracleDbType.Decimal)
                {
                    Value = orderInfo.price
                },
                new OracleParameter(":couponprice",       OracleDbType.Decimal)
                {
                    Value = 0
                },
                new OracleParameter(":couponid",          OracleDbType.Varchar2)
                {
                    Value = string.Empty
                },
                new OracleParameter(":couponch",          OracleDbType.Varchar2)
                {
                    Value = string.Empty
                },
                new OracleParameter(":ordertime",         OracleDbType.Varchar2)
                {
                    Value = DateTime.Now.ToString("yyyyMMddHHmmss")
                },
                new OracleParameter(":v_user_ip",         OracleDbType.Varchar2)
                {
                    Value = orderInfo.user_ip
                },
                new OracleParameter(":v_DOWN_CHANNEL_NO", OracleDbType.Varchar2)
                {
                    Value = orderInfo.down_channel_no
                },
                new OracleParameter(":v_business_type",   OracleDbType.Decimal)
                {
                    Value = orderInfo.businessType
                },
                new OracleParameter(":out_status",        OracleDbType.Decimal)
                {
                    Direction = System.Data.ParameterDirection.Output
                },
                new OracleParameter(":out_msg",           OracleDbType.Varchar2, 1024)
                {
                    Direction = System.Data.ParameterDirection.Output
                },
                new OracleParameter(":out_order_no",      OracleDbType.Varchar2, 64)
                {
                    Direction = System.Data.ParameterDirection.Output
                },
                new OracleParameter(":out_payed_fee",     OracleDbType.Decimal)
                {
                    Direction = System.Data.ParameterDirection.Output
                },
                new OracleParameter(":out_sync_url",      OracleDbType.Varchar2, 1024)
                {
                    Direction = System.Data.ParameterDirection.Output
                },
                new OracleParameter(":out_nonsync_url",   OracleDbType.Varchar2, 1024)
                {
                    Direction = System.Data.ParameterDirection.Output
                },
                new OracleParameter(":out_appid",         OracleDbType.Varchar2, 128)
                {
                    Direction = System.Data.ParameterDirection.Output
                },
                new OracleParameter(":out_account_type",  OracleDbType.Decimal)
                {
                    Direction = System.Data.ParameterDirection.Output
                }
            };
            log.Info("存储过程sp_recv_order输入参数:");
            foreach (var item in pars.Where(v => v.Direction != System.Data.ParameterDirection.Output).ToList())
            {
                log.Info(string.Format("{0}:{1}", item.ParameterName, item.Value));
            }
            SqlHelper.ExecuteNonQuery("sp_recv_order", System.Data.CommandType.StoredProcedure, pars);
            log.Info("存储过程sp_recv_order输出参数:");
            foreach (var item in pars.Where(v => v.Direction == System.Data.ParameterDirection.Output).ToList())
            {
                log.Info(string.Format("{0}:{1}", item.ParameterName, item.Value));
            }
            RevOrderResult result = new RevOrderResult();

            result.Status    = pars[pars.Length - 8].Value.ToString() == "100";
            result.ResultMsg = pars[pars.Length - 7].Value.ToString();
            if (result.Status)
            {
                result.AccountType = Convert.ToInt32(pars[pars.Length - 1].Value.ToString());
                result.AppId       = pars[pars.Length - 2].Value.ToString();
                result.AsyncUrl    = pars[pars.Length - 3].Value.ToString();
                result.SyncUrl     = pars[pars.Length - 4].Value.ToString();
                result.PayFee      = Convert.ToDecimal(pars[pars.Length - 5].Value.ToString());
                result.OrderNo     = pars[pars.Length - 6].Value.ToString();
                if (string.IsNullOrEmpty(result.SyncUrl) || result.SyncUrl == "null")
                {
                    result.SyncUrl = null;
                }
            }
            return(result);
        }
Beispiel #2
0
 public void ProcessRequest(HttpContext context)
 {
     try
     {
         var result = string.Empty;//返回结果
         //创建订单
         string requestData = context.Request.Form["orderInfo"];
         logger.Info("华为支付请求参数:" + requestData);
         HWOrder orderInfo = JsonConvert.DeserializeObject <HWOrder>(requestData);
         if (!string.IsNullOrEmpty(orderInfo.orderno))
         {//订单编号不为空
             //根据订单编号获取订单数据
             orderInfo = Server.GetOrderInfo(orderInfo.orderno, orderInfo.pay_type);
             if (orderInfo == null)
             {
                 logger.Info("订单数据异常");
                 result = JsonConvert.SerializeObject(new { success = false, info = "订单数据异常" });
             }
         }
         //获取用户的真实IP
         string ip = context.Request.UserHostAddress;
         if (context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
         {
             ip = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].Split(',')[0];//获取用户的真实的IP
         }
         orderInfo.user_ip         = ip.Split(':')[0];
         orderInfo.down_channel_no = ConfigurationManager.AppSettings["hw_channel_no"];//获取下游渠道编号
         RevOrderResult revOrderResult = null;
         //判断是否是慢充
         //if (orderInfo.recharge_mode == 0)
         //    revOrderResult = Server.SaveOrder(orderInfo, logger);
         //else
         revOrderResult = Server.SaveSlowOrder(orderInfo, logger);
         logger.Info(string.Format("订单状态:{0},消息:{1}", revOrderResult.Status, revOrderResult.ResultMsg));
         if (revOrderResult.Status)
         {
             logger.Info("订单保存成功");
             QueryAccountResult accountResult = ApiHelper.QueryPayAccount(revOrderResult.AppId, revOrderResult.AccountType, logger);
             if (!accountResult.Status)
             {
                 logger.Info("获取支付信息失败");
                 result = JsonConvert.SerializeObject(new { success = false, info = "获取支付信息失败" });
             }
             //请求支付
             var message = PayRequest.Instance.bookOrder(new TenPayConfig()
             {
                 appid  = accountResult.Appid,
                 mch_id = accountResult.Mchid,
                 key    = accountResult.Pubkey,
                 merchant_private_key = accountResult.Prikey
             }, orderInfo.user_ip, revOrderResult.OrderNo, orderInfo.product_name, revOrderResult.PayFee, revOrderResult.AsyncUrl, revOrderResult.SyncUrl, Convert.ToInt32(orderInfo.pay_type), 6);
             if (message.state)
             {
                 logger.Info("支付请求成功");
                 result = JsonConvert.SerializeObject(new { success      = true,
                                                            url          = message.data,
                                                            info         = "支付请求成功",
                                                            orderno      = revOrderResult.OrderNo,
                                                            appid        = revOrderResult.AppId,
                                                            account_type = revOrderResult.AccountType });
             }
             else
             {
                 logger.Info("支付请求失败");
                 logger.Info("支付返回的数据:" + message.error);
                 result = JsonConvert.SerializeObject(new { success = false, info = "支付请求失败" });
             }
         }
         else
         {
             logger.Info("订单保存失败");
             result = JsonConvert.SerializeObject(new { success = false, info = "订单保存失败" });
             ApiHelper.SetFail(revOrderResult.OrderNo, revOrderResult.ResultMsg, logger);
         }
         context.Response.ContentType = "text/plain";
         context.Response.Write(result);
     }
     catch (Exception e)
     {
         logger.Info(e.Message);
         logger.Fatal(e.Message, e);
         var res = new { code = 200, msg = "服务错误" };
         context.Response.ContentType = "text/plain";
         context.Response.Write(JsonConvert.SerializeObject(res));
     }
 }