/// <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); }
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)); } }