コード例 #1
0
ファイル: PayProvider.cs プロジェクト: KqSMea8/HS.Admin
        /// <summary>
        /// 获取微信报关返回内容实体
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        public static AliAcquireCustomsBack SaveTenpayAcquireCustomsBackData(string xml)
        {
            AliAcquireCustomsBack backMod = new AliAcquireCustomsBack();

            backMod.Type = 1;
            XmlDocument doc = new XmlDocument();

            doc.LoadXml(xml);
            XmlElement  rootElem = doc.DocumentElement;
            XmlNodeList nodeList = rootElem.ChildNodes;

            foreach (XmlNode node in nodeList)
            {
                switch (node.LocalName)
                {
                case "retcode":
                    backMod.ResultCode = node.InnerText;
                    break;

                case "retmsg":
                    backMod.DetailErrorDes = node.InnerText;
                    break;

                case "state":
                    backMod.Success = (node.InnerText);
                    break;

                case "sub_order_no":
                    backMod.OrderSysNo = Convert.ToInt32(node.InnerText.Split('_')[0]);
                    break;

                case "out_trade_no":
                    backMod.OutRequestNo = (node.InnerText);
                    break;

                case "businees_type":
                    backMod.Type = Convert.ToInt32(node.InnerText);
                    break;

                case "sub_order_id":
                    backMod.CustomsTradeNo = (node.InnerText);
                    break;
                }
            }
            return(backMod);
        }
コード例 #2
0
        /// <summary>
        /// 设置海关报关数据
        /// </summary>
        /// <param name="xml"></param>
        /// <returns></returns>
        /// <remarks>2016-06-06 杨云奕 添加</remarks>
        public static AliAcquireCustomsBack SaveAlipayAcquireCustomsBackData(string xml)
        {
            AliAcquireCustomsBack backMod = new AliAcquireCustomsBack();
            XmlDocument           doc     = new XmlDocument();

            doc.LoadXml(xml);
            XmlElement rootElem = doc.DocumentElement;

            backMod.Success = rootElem.ChildNodes[0].InnerText;
            if (rootElem.ChildNodes.Count > 2)
            {
                XmlNode     node       = rootElem.ChildNodes[2];
                XmlNode     alipayNode = node.ChildNodes[0];
                XmlNodeList list       = alipayNode.ChildNodes;
                foreach (XmlNode aliNode in list)
                {
                    switch (aliNode.LocalName)
                    {
                    case "result_code":
                        backMod.Error = aliNode.InnerText;
                        break;

                    case "trade_no":
                        backMod.CustomsTradeNo = aliNode.InnerText;
                        break;

                    case "alipay_declare_no":
                        backMod.AlipayTradeNo = aliNode.InnerText;
                        break;

                    case "detail_error_code":
                        backMod.DetailErrorCode = aliNode.InnerText;
                        break;

                    case "detail_error_des":
                        backMod.DetailErrorCode = aliNode.InnerText;
                        break;
                    }
                }
            }
            else if (rootElem.ChildNodes.Count == 2)
            {
                backMod.Error = rootElem.ChildNodes[1].InnerText;
            }
            return(backMod);
        }
コード例 #3
0
ファイル: PayProvider.cs プロジェクト: KqSMea8/HS.Admin
        /// <summary>
        /// 海关报关
        /// </summary>
        /// <returns></returns>
        /// <remarks>2015-10-12 杨浩 创建</remarks>
        public override Result ApplyToCustoms(SoOrder soorder)
        {
            Result result = new Result();

            try
            {
                IList <FnOnlinePayment> list = FinanceBo.Instance.GetOnlinePaymentList(soorder.SysNo);
                FnOnlinePayment         payment;
                if (list.Count > 0)
                {
                    payment = list[0];
                }
                else
                {
                    result.Status  = false;
                    result.Message = "付款单信息无效,请核实订单是否付款?";
                    return(result);
                }

                Hyt.Model.Manual.SoReceiveAddressMod address = SoOrderBo.Instance.GetOrderReceiveAddress2(soorder.ReceiveAddressSysNo);

                RequestHandler reqHandler = new RequestHandler(System.Web.HttpContext.Current, customsConfig.key, customsConfig.GATEWAY_NEW);
                reqHandler.init();
                //reqHandler.setGateUrl(url);
                reqHandler.setParameter("order_fee", ((int)(soorder.OrderAmount * 100)).ToString());                          //商品总金额,以分为单位
                reqHandler.setParameter("product_fee", ((int)((soorder.ProductAmount + (soorder.TaxFee)) * 100)).ToString()); //商品金额,以分为单位
                reqHandler.setParameter("transport_fee", ((int)(soorder.FreightAmount * 100)).ToString());                    //运费金额,以分为单位
                reqHandler.setParameter("duty", ((int)(soorder.TaxFee * 100)).ToString());
                //协议参数
                reqHandler.setParameter("sign_type", "MD5");
                reqHandler.setParameter("service_version", "1.0");
                reqHandler.setParameter("input_charset", "UTF-8");
                reqHandler.setParameter("sign_key_index", "1");
                // 设置支付参数
                //-----------------------------
                reqHandler.setParameter("partner", customsConfig.partner);                      //商户号

                string out_trade_no = "";
                if (string.IsNullOrEmpty(payment.BusinessOrderSysNo))
                {
                    out_trade_no = payment.SourceSysNo.ToString();
                }
                else
                {
                    out_trade_no = payment.BusinessOrderSysNo;
                }

                reqHandler.setParameter("out_trade_no", out_trade_no);                          //商家订单号
                reqHandler.setParameter("transaction_id", payment.VoucherNo);                   //财付通订单号
                reqHandler.setParameter("fee_type", "CNY");                                     //币种,1人民币
                reqHandler.setParameter("sub_order_no", out_trade_no);                          //子订单号
                reqHandler.setParameter("customs", customsConfig.customs_place);                //海关  0 无需上报海关1广州2杭州3宁波4深圳5郑州保税区(暂停)6重庆7西安8上海9 郑州
                reqHandler.setParameter("mch_customs_no", customsConfig.merchant_customs_code); //商户海关备案号IE150723865142
                reqHandler.setParameter("cert_type", "1");                                      //证件类型

                reqHandler.setParameter("cert_id", address.IDCardNo);                           //收货人身份证号
                reqHandler.setParameter("name", address.Name);                                  //收货人姓名
                reqHandler.setParameter("action_type", "1");                                    //1新增2修改

                string uriPath = reqHandler.getRequestURL();

                string xml = MyHttp.GetResponse(uriPath);
                //Game.Utils.FileManager.WriteFile(Hyt.Util.WebUtil.GetMapPath("/TenpayCustomsMdl.txt"), xml);
                //string xmlTxt = System.IO.File.ReadAllText(Hyt.Util.WebUtil.GetMapPath("/TenpayCustomsMdl.txt"));
                AliAcquireCustomsBack backMod = SaveTenpayAcquireCustomsBackData(xml);

                // backMod.PushDataInfo = uriPath;
                backMod.OutReportXML = xml;

                if (string.IsNullOrEmpty(backMod.Success))
                {
                    backMod.Success = "F";
                }
                else
                {
                    backMod.Success = Enum.GetName(typeof(Hyt.Model.WorkflowStatus.OrderStatus.海关微信申报状态), Convert.ToInt32(backMod.Success));
                }
                //backMod.Type = 1;
                //AcquireCustomsBo.Instance.InnerAcquireCustoms(backMod);

                //soorder.CustomsResult = backMod.Success;
                //SoOrderBo.Instance.UpdateOrder(soorder);
                //(int)OrderStatus.支付报关状态.处理中
                Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus(GetOrderPayCustomStatus(backMod.Success), 0, soorder.SysNo);
                BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.前台, "订单编号:" + soorder.SysNo + ",支付信息报关提交成功!" + "回执:" + backMod.OutReportXML, LogStatus.系统日志目标类型.订单支付报关, soorder.SysNo, 0);
                result.Status  = true;
                result.Message = "报关成功";
            }
            catch (Exception e)
            {
                result.Status  = false;
                result.Message = "报关失败-" + e.Message;
                try
                {
                    BLL.Log.LocalLogBo.Instance.Write(result.Message, "WeiXinCustomsERRORLog");
                }
                catch (Exception ex)
                {
                    result.Status  = false;
                    result.Message = "报关失败-" + ex.Message;
                    BLL.Log.LocalLogBo.Instance.Write(result.Message, "WeiXinCustomsERRORLog");
                }
            }
            return(result);
        }
コード例 #4
0
ファイル: PayProvider.cs プロジェクト: KqSMea8/HS.Admin
        /// <summary>
        /// 海关支付报关查询
        /// </summary>
        /// <param name="orderId">订单编号</param>
        /// <returns></returns>
        /// <remarks>2015-12-31 杨浩 创建</remarks

        public override Result CustomsQuery(int orderId)
        {
            Result result = new Result();
            //List<SoOrder> orderList = SoOrderBo.Instance.GetOrderByWeiXinCustomsData();
            SoOrder order = SoOrderBo.Instance.GetEntity(orderId);

            result.Status = false;
            try
            {
                IList <FnOnlinePayment> list = FinanceBo.Instance.GetOnlinePaymentList(order.SysNo);
                FnOnlinePayment         payment;
                if (list.Count > 0)
                {
                    payment = list[0];
                }
                else
                {
                    result.Status  = false;
                    result.Message = "付款单信息无效,请核实订单是否付款?";
                    return(result);
                }

                SoReceiveAddress address = SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo);
                //List<AliAcquireCustomsBack> payBackList = AcquireCustomsBo.Instance.GetAllAcquireCustomsBackByOrderSysNos(order.SysNo.ToString());
                RequestHandler reqHandler = new RequestHandler(System.Web.HttpContext.Current, customsConfig.key, customsConfig.GATEWAY_NEW);
                //if (payBackList.Count == 0)
                //{
                //    continue;
                //}
                reqHandler.init();

                //协议参数
                reqHandler.setParameter("sign_type", "MD5");
                reqHandler.setParameter("service_version", "1.0");
                reqHandler.setParameter("input_charset", "UTF-8");
                reqHandler.setParameter("sign_key_index", "1");
                // 设置支付参数
                //-----------------------------
                reqHandler.setParameter("partner", customsConfig.partner);                      //商户号
                string out_trade_no = "";
                if (string.IsNullOrEmpty(payment.BusinessOrderSysNo))
                {
                    out_trade_no = payment.SourceSysNo.ToString();
                }
                else
                {
                    out_trade_no = payment.BusinessOrderSysNo;
                }
                reqHandler.setParameter("out_trade_no", out_trade_no);                  //商户号 payBackList[0].OutRequestNo
                //if (list.Count > 0)
                //{
                //    reqHandler.setParameter("transaction_id", list[0].VoucherNo);		        //商户号
                //}
                //reqHandler.setParameter("sub_order_no", payBackList[0].CustomsTradeNo);		        //商户号
                //reqHandler.setParameter("sub_order_id", order.SysNo.ToString());		        //商户号
                reqHandler.setParameter("customs", customsConfig.customs_place);                        //商户号

                string uriPath = reqHandler.getRequestURL("http://mch.tenpay.com/cgi-bin/mch_custom_query.cgi");

                string xml = MyHttp.GetResponse(uriPath);

                //Game.Utils.FileManager.WriteFile(Hyt.Util.WebUtil.GetMapPath("/TenpayCustomsMdl.txt"), xml);
                ///插入更新记录
                ///Hyt.Model.Customs.AliAcquireCustomsBack backMod = Pay.SaveTenpayAcquireCustomsBackData(xml);
                ///
                AliAcquireCustomsBack cusMod = SaveTenpayAcquireCustomsBackData(xml);

                object obj = GetTenpayReturnCustomsBack(xml);
                //AliAcquireCustomsBack backMod = payBackList[0];
                string status = obj.GetType().GetProperty("state").GetValue(obj, null).ToString();
                //backMod.PushDataInfo = uriPath;
                //backMod.Success = Enum.GetName(typeof(Hyt.Model.WorkflowStatus.OrderStatus.海关微信申报状态), Convert.ToInt32(status));
                //backMod.Type = 1;
                //backMod.OutReportXML = xml;
                //AcquireCustomsBo.Instance.UpdateAcquireCustoms(backMod);

                ///更新付款人信息
                ///
                BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.前台, "订单编号:" + order.SysNo + ",支付信息查询!" + "回执:" + xml, LogStatus.系统日志目标类型.订单支付报关, order.SysNo, 0);
                if (status == "4")
                {
                    Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus(GetOrderPayCustomStatus(GetTenpayStatus(status)), 0, orderId);
                    /////获取付款人信息名称
                    //Model.Generated.SoPaymentInfo payInfo = SoPaymentInfoBo.Instance.GetPaymentInfo(order.SysNo);
                    //if (payInfo != null)
                    //{
                    //    payInfo.PaymentName = obj.GetType().GetProperty("name").GetValue(obj, null).ToString();
                    //    payInfo.PaymentIDC = obj.GetType().GetProperty("cert_id").GetValue(obj, null).ToString();
                    //    payInfo.PaymentPhone = address.MobilePhoneNumber;
                    //    SoPaymentInfoBo.Instance.UpdatePaymentInfo(payInfo);
                    //}
                    //else
                    //{
                    //    payInfo = new SoPaymentInfo();
                    //    payInfo.SoSysNo = order.SysNo;
                    //    payInfo.PaymentName = obj.GetType().GetProperty("name").GetValue(obj, null).ToString();
                    //    payInfo.PaymentIDC = obj.GetType().GetProperty("cert_id").GetValue(obj, null).ToString();
                    //    payInfo.PaymentPhone = address.MobilePhoneNumber;
                    //    SoPaymentInfoBo.Instance.InsertPaymentInfo(payInfo);
                    //}
                }

                ///更新支付报关情况。
                if (status == "5")
                {
                    Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus(GetOrderPayCustomStatus(GetTenpayStatus(status)), 0, orderId);
                    //backMod.Success = "";
                    //order.AutoPush = 0;
                }
                //order.CustomsResult = backMod.Success;
                //SoOrderBo.Instance.UpdateOrder(order);
                //content = order.SysNo + " 更新结束。";

                result.Message = xml;
                result.Status  = true;
            }
            catch (Exception e)
            {
                result.Message = e.Message;
            }
            //return Json(new { content = content });
            return(result);
        }
コード例 #5
0
        /// <summary>
        /// 支付宝报关实体
        /// </summary>
        /// <param name="payment"></param>
        /// <param name="soorder"></param>
        /// <returns></returns>
        public Result AliAcquireCustomsBackData(FnOnlinePayment payment, SoOrder soorder)
        {
            Result result = new Result();

            try
            {
                // Hyt.Model.Common.PayConfig modelConfig = Hyt.BLL.Config.Config.Instance.GetPayConfig();

                ///支付宝报关实体
                AlipayCustomsMdl mdl = new AlipayCustomsMdl();
                mdl.service               = customsConfig.service;
                mdl.partner               = customsConfig.partner;
                mdl._input_charset        = customsConfig.input_charset;
                mdl.sign_type             = customsConfig.sign_type;
                mdl.out_request_no        = payment.BusinessOrderSysNo;
                mdl.trade_no              = payment.VoucherNo;
                mdl.merchant_customs_code = customsConfig.merchant_customs_code;
                mdl.merchant_customs_name = customsConfig.merchant_customs_name;
                mdl.amount        = payment.Amount;
                mdl.customs_place = customsConfig.customs_place;

                string pushResult = "";

                string pushData      = "";
                string outReportData = "";

                #region 海关报关

                ///创建支付宝报关签名
                CreateAlipayCustomsSign(mdl);
                ///生成支付宝连接
                string uriPath = GetAlipayAcquireCustoms(mdl);
                //Game.Utils.FileManager.WriteFile(Hyt.Util.WebUtil.GetMapPath("/AliAcquireCustoms.txt"), uriPath);
                ///执行http连接获取返回的xml内容

                pushData = uriPath;
                string xml = Hyt.Util.MyHttp.GetResponse(uriPath);
                outReportData = xml;

                //Game.Utils.FileManager.WriteFile(Hyt.Util.WebUtil.GetMapPath("/AliAcquireCustomsBack.txt"), xml);
                ///返回实体内容
                AliAcquireCustomsBack backMod = SaveAlipayAcquireCustomsBackData(xml);
                backMod.OutRequestNo = mdl.out_request_no;
                backMod.OrderSysNo   = payment.SourceSysNo;
                backMod.Success      = "海关:" + backMod.Success;
                //AliAcquireCustomsBackBo.Instance.InnerAcquireCustoms(backMod);
                //pushResult = "海关:" + backMod.Success;
                if (backMod.Success != "海关:T")
                {
                    pushResult = "海关支付报关失败-" + xml;
                }
                #endregion

                #region 商检
                if (!string.IsNullOrEmpty(customsConfig.merchant_commodity_code))
                {
                    mdl.out_request_no        = "S" + soorder.OrderNo;
                    mdl.merchant_customs_code = customsConfig.merchant_commodity_code;
                    mdl.merchant_customs_name = customsConfig.merchant_commodity_name;
                    mdl.customs_place         = customsConfig.commodity_place;
                    CreateAlipayCustomsSign(mdl);
                    ///生成支付宝连接
                    uriPath = GetAlipayAcquireCustoms(mdl);
                    //Game.Utils.FileManager.WriteFile(Hyt.Util.WebUtil.GetMapPath("/AliAcquireSJ.txt"), uriPath);
                    ///执行http连接获取返回的xml内容

                    pushData      += "\r\n" + uriPath;
                    xml            = Hyt.Util.MyHttp.GetResponse(uriPath);
                    outReportData += "\r\n" + xml;

                    //Game.Utils.FileManager.WriteFile(Hyt.Util.WebUtil.GetMapPath("/AliAcquireSJBack.txt"), xml);
                    ///返回实体内容
                    backMod = SaveAlipayAcquireCustomsBackData(xml);
                    backMod.OutRequestNo = mdl.out_request_no;
                    backMod.OrderSysNo   = payment.SourceSysNo;
                    backMod.Success      = "商检:" + backMod.Success;
                    if (backMod.Success != "商检:T")
                    {
                        pushResult += "商检支付报关失败-" + xml;
                    }
                }
                //AcquireCustomsBo.Instance.InnerAcquireCustoms(backMod);
                //pushResult = "商检:" + backMod.Success;
                #endregion

                #region 将支付宝保税报关反馈信息返回到订单中
                SoOrder sorder = SoOrderBo.Instance.GetEntity(backMod.OrderSysNo);
                //sorder.CustomsResult = pushResult;
                //SoOrderBo.Instance.UpdateOrder(sorder);
                //Game.Utils.FileManager.WriteFile(Hyt.Util.WebUtil.GetMapPath("/CustomsResult.txt"), sorder.CustomsResult);

                if (string.IsNullOrEmpty(pushResult))
                {
                    result.Message = "提交成功!";
                    result.Status  = true;
                    //更新订单支付报关状态为处理中
                    Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.成功, 0, sorder.SysNo);
                    BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.前台, "订单编号:" + sorder.SysNo + ",支付信息报关提交成功!" + "回执:" + outReportData, LogStatus.系统日志目标类型.订单支付报关, sorder.SysNo, 0);
                }
                else
                {
                    result.Message = pushResult;
                    result.Status  = false;
                    BLL.Log.LocalLogBo.Instance.Write("提交失败!" + pushResult, "EhkingCustomsLog");
                }


                result.Status = true;
            }
            catch (Exception e)
            {
                result.Status  = false;
                result.Message = e.Message;
            }
            #endregion

            return(result);
        }