public bool Pay(QueryAccountResult accountResult, RevOrderResult revOrderResult, dynamic obj, out string msg) { logger.Info(accountResult.Appid + "," + accountResult.Mchid + "," + accountResult.Pubkey + "," + accountResult.Prikey + "," + obj.userip + "," + revOrderResult.OrderNo + "," + obj.prodname + "," + revOrderResult.PayFee + "," + revOrderResult.AsyncUrl + "," + revOrderResult.SyncUrl + "," + revOrderResult.AccountType); Message message = PayRequest.Instance.bookOrder(new TenPayConfig() { appid = accountResult.Appid, mch_id = accountResult.Mchid, key = accountResult.Pubkey, merchant_private_key = accountResult.Prikey }, obj.userip, revOrderResult.OrderNo, obj.prodname, revOrderResult.PayFee, revOrderResult.AsyncUrl, revOrderResult.AccountType == 1 ? revOrderResult.SyncUrl : null, revOrderResult.AccountType); if (message.state) { msg = message.data; return(true); } msg = message.error; return(false); }
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/json"; string post_content = string.Empty; dynamic obj = null; try { using (StreamReader sr = new StreamReader(context.Request.InputStream, Encoding.UTF8)) { post_content = sr.ReadToEnd(); } logger.Info("----------------收单开始---------------------"); logger.Info("请求原串:" + post_content); try { obj = DynamicJson.Parse(post_content); } catch { logger.Info("解析数据失败"); Write(DynamicJson.Serialize(new { code = "9999", msg = "parse_fail", detailurl = "" })); return; } if (!ApiHelper.CheckOrderParams(obj)) { logger.Info("参数错误"); Write(DynamicJson.Serialize(new { code = "9999", msg = "params_fail", detailurl = obj.detailurl })); return; } if (!ApiHelper.CheckOrderSign(obj, logger)) { logger.Info("签名错误"); Write(DynamicJson.Serialize(new { code = "9999", msg = "sign_fail", detailurl = obj.detailurl })); return; } RevOrderResult revOrderResult = ApiHelper.SaveOrder(obj, 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("获取支付信息失败"); Write(DynamicJson.Serialize(new { code = "9999", msg = "pay_fail", detailurl = obj.detailur })); return; } string msg; bool status = Pay(accountResult, revOrderResult, obj, out msg); if (status) { logger.Info("收单成功"); string result = DynamicJson.Serialize(new { code = "0000", msg = "success", detailurl = obj.detailurl, orderid = revOrderResult.OrderNo, form = HttpUtility.UrlEncode(msg, Encoding.UTF8) }); Write(result); } else { logger.Info("生成支付信息失败"); Write(DynamicJson.Serialize(new { code = "9999", msg = msg, detailurl = obj.detailurl })); ApiHelper.SetFail(revOrderResult.OrderNo, "支付失败" + msg, logger); } } else { logger.Info("订单保存失败"); Write(DynamicJson.Serialize(new { code = "9999", msg = revOrderResult.ResultMsg, detailurl = obj.detailurl })); ApiHelper.SetFail(revOrderResult.OrderNo, revOrderResult.ResultMsg, logger); } } catch (Exception ex) { logger.Fatal(ex.Message, ex); Write(DynamicJson.Serialize(new { code = "9999", msg = "收单失败", detailurl = obj.detailurl })); } }
public static RevOrderResult SaveOrder(dynamic obj, ILogger log) { int business_type = Convert.ToInt32(obj.cardtype) == 1?2:5; var down_channel_no = ConfigurationManager.AppSettings["zd_channel_no"]; OracleParameter[] pars = { new OracleParameter(":flow_type", OracleDbType.Varchar2) { Value = obj.userlogin }, new OracleParameter(":partner_order_no", OracleDbType.Varchar2) { Value = obj.detailurl }, new OracleParameter(":card_type", OracleDbType.Decimal) { Value = obj.cardtype }, new OracleParameter(":pay_type", OracleDbType.Decimal) { Value = obj.payway }, new OracleParameter(":product_name", OracleDbType.Varchar2) { Value = obj.prodname }, new OracleParameter(":notify_url", OracleDbType.Varchar2) { Value = obj.notifyurl }, new OracleParameter(":mobile", OracleDbType.Varchar2) { Value = obj.mobile }, new OracleParameter(":account", OracleDbType.Varchar2) { Value = obj.account }, new OracleParameter(":product_id", OracleDbType.Varchar2) { Value = obj.productid }, new OracleParameter(":face", OracleDbType.Decimal) { Value = obj.money }, new OracleParameter(":price", OracleDbType.Decimal) { Value = Convert.ToDecimal(obj.price + "") / 100 }, new OracleParameter(":couponprice", OracleDbType.Decimal) { Value = obj.couponprice }, new OracleParameter(":couponid", OracleDbType.Varchar2) { Value = obj.couponid }, new OracleParameter(":couponch", OracleDbType.Varchar2) { Value = obj.couponch }, new OracleParameter(":ordertime", OracleDbType.Varchar2) { Value = obj.ordertime }, new OracleParameter(":v_user_ip", OracleDbType.Varchar2) { Value = obj.userip }, new OracleParameter(":v_down_channel_no", OracleDbType.Varchar2) { Value = down_channel_no }, new OracleParameter(":v_business_type", OracleDbType.Decimal) { Value = business_type }, new OracleParameter(":out_status", OracleDbType.Decimal) { Direction = ParameterDirection.Output }, new OracleParameter(":out_msg", OracleDbType.Varchar2, 1024) { Direction = ParameterDirection.Output }, new OracleParameter(":out_order_no", OracleDbType.Varchar2, 64) { Direction = ParameterDirection.Output }, new OracleParameter(":out_payed_fee", OracleDbType.Decimal) { Direction = ParameterDirection.Output }, new OracleParameter(":out_sync_url", OracleDbType.Varchar2, 1024) { Direction = ParameterDirection.Output }, new OracleParameter(":out_nonsync_url", OracleDbType.Varchar2, 1024) { Direction = ParameterDirection.Output }, new OracleParameter(":out_appid", OracleDbType.Varchar2, 128) { Direction = ParameterDirection.Output }, new OracleParameter(":out_account_type", OracleDbType.Decimal) { Direction = ParameterDirection.Output } }; log.Info("输入参数:"); foreach (var item in pars.Where(v => v.Direction != ParameterDirection.Output).ToList()) { log.Info(string.Format("{0}:{1}", item.ParameterName, item.Value)); } SqlHelper.ExecuteNonQuery("sp_recv_order", CommandType.StoredProcedure, pars); log.Info("输出参数:"); foreach (var item in pars.Where(v => v.Direction == 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(); } return(result); }