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