示例#1
0
        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);
        }
示例#2
0
        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 }));
            }
        }
示例#3
0
        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);
        }