/// <summary> /// 获取运单号 /// </summary> /// <param name="orderId"></param> /// <returns></returns> /// <remarks>2016-07-19 陈海裕 创建</remarks> public override Result GetOrderExpressno(string orderId) { Result <string> result = new Result <string>(); result.Status = false; result.StatusCode = 0; result.Message = "接口调用失败"; string url = RequestUrl + "express/create"; try { SoOrder order = BLL.Order.SoOrderBo.Instance.GetEntity(TConvert.ToInt32(orderId)); if (order == null) { result.Message = "该订单不存在"; return(result); } LgDeliveryType deliveryType = BLL.Logistics.DeliveryTypeBo.Instance.GetDeliveryType(order.DeliveryTypeSysNo); ParaOnlinePaymentFilter filter = new ParaOnlinePaymentFilter(); filter.OrderSysNo = TConvert.ToInt32(orderId); var onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault(); CBWhWarehouse warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); string _deliveryType = ""; if (deliveryType.DeliveryTypeName.Contains("顺丰")) { _deliveryType = "SF"; //CustomerCode = SFCustomerCode; //Key = SFKey; Token = SFToken; } else if (deliveryType.DeliveryTypeName.Contains("中通")) { _deliveryType = "ZTO"; } if (_deliveryType == "") { result.Message = "友信达物流目前只有支持顺丰和中通两种快递方式"; return(result); } Dictionary <string, string> paramsData = new Dictionary <string, string>(); paramsData.Add("reference_no", onlinePayment.BusinessOrderSysNo); paramsData.Add("warehouse_id", warehouse.LogisWarehouseCode); paramsData.Add("sm_code", _deliveryType); string responseStr = GetResponse(url, InitParams(paramsData)); result = GetResult(JObject.Parse(responseStr), result); if (result.Status == true) { // 生成出库单 } return(result); } catch (Exception ex) { result.Message = "查询订单运单号报错:" + ex.StackTrace; return(result); } }
/// <summary> /// 取消订单 /// </summary> /// <param name="orderSysNo"></param> /// <returns></returns> /// <remarks>2016-07-05 陈海裕 创建</remarks> public override Result CancelOrderTrade(int orderSysNo, string reason = "") { // 订单id,用于日志记录 _orderSysNo = orderSysNo; Result <string> result = new Result <string>(); result.Status = false; result.StatusCode = 0; result.Message = "接口调用失败"; string url = RequestUrl + "order/del"; if (orderSysNo <= 0) { return(result); } try { SoOrder order = BLL.Order.SoOrderBo.Instance.GetEntity(orderSysNo); if (order == null) { result.Message = "该订单不存在"; return(result); } ParaOnlinePaymentFilter filter = new ParaOnlinePaymentFilter(); filter.OrderSysNo = orderSysNo; var onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault(); if (onlinePayment == null) { result.Message = "订单不存在在线支付记录"; return(result); } Dictionary <string, string> paramsData = new Dictionary <string, string>(); paramsData.Add("reference_no", onlinePayment.BusinessOrderSysNo); string postData = InitParams(paramsData); string responseStr = GetResponse(url, postData); result = GetResult(JObject.Parse(responseStr), result); if (result.Status == true) { // 删除物流返回订单记录 //BLL.CrossBorderLogistics.CrossBorderLogisticsOrderBo.Instance.DeleteByOrderSysNo(orderSysNo); BLL.Order.SoOrderSyncLogisticsLogBo.Instance.DeleteByOrderSysNoAndCode(orderSysNo, (int)Code); BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus(0, 3, orderSysNo); } } catch (Exception ex) { result.Message = "向" + this.Code + "物流取消订单报错:" + ex.StackTrace; return(result); } return(result); }
/// <summary> /// 分页查询 /// </summary> /// <param name="filter">查询参数</param> /// <returns>分页</returns> /// <remarks>2013-07-16 朱家宏 创建</remarks> public override Pager <CBFnOnlinePayment> GetAll(ParaOnlinePaymentFilter filter) { const string sql = @"(select a.sysno,a.sourcesysno,a.amount,b.paymentname,a.voucherno,a.createddate,a.status,a.BusinessOrderSysNo, 0 as TotalAmount,a.CreatedBy from FnOnlinePayment a left join BsPaymentType b on a.paymenttypesysno=b.sysno where (@0 is null or a.sourcesysno=@0) and --OrderSysNo (@1 is null or exists (select 1 from splitstr(@1,',') tmp where tmp.col = a.PaymentTypeSysNo)) and --支付类型 --RmaType (@2 is null or a.CreatedDate>=@2) and --创建日期(起) (@3 is null or a.CreatedDate<@3) --创建日期(止) ) tb"; var paymentTypeSysNos = filter.PaymentTypeSysNos != null?string.Join(",", filter.PaymentTypeSysNos) : null; //查询日期上限+1 filter.EndDate = filter.EndDate == null ? (DateTime?)null : filter.EndDate.Value.AddDays(1); var paras = new object[] { filter.OrderSysNo, // filter.OrderSysNo, paymentTypeSysNos, // paymentTypeSysNos, filter.BeginDate, // filter.BeginDate, filter.EndDate //, filter.EndDate }; var dataList = Context.Select <CBFnOnlinePayment>("tb.*").From(sql); var dataCount = Context.Select <int>("count(0)").From(sql); var dataSum = Context.Select <decimal>("sum(amount)").From(sql); dataList.Parameters(paras); dataCount.Parameters(paras); dataSum.Parameters(paras); var pager = new Pager <CBFnOnlinePayment> { PageSize = filter.PageSize, CurrentPage = filter.Id }; pager.TotalRows = dataCount.QuerySingle(); pager.Rows = dataList.OrderBy("tb.CreatedDate desc").Paging(pager.CurrentPage, filter.PageSize).QueryMany(); if (pager.Rows.Any()) { pager.Rows.First().TotalAmount = dataSum.QuerySingle(); } return(pager); }
/// <summary> /// 添加交易订单 /// </summary> /// <param name="orderId">销售订单系统编号</param> /// <returns></returns> /// <remarks> /// 2016-3-21 杨浩 创建 /// 2016-4-19 陈海裕 重构 /// </remarks> public override Result AddOrderTrade(int orderId) { var result = new Result() { Status = false, StatusCode = 0, Message = "向" + this.Code + "物流推送订单失败" }; try { var order = Hyt.BLL.Order.SoOrderBo.Instance.GetEntity(orderId); if (order == null) { result.Status = false; result.Message = string.Format("订单号{0}不存在!", orderId); result.StatusCode = -100; } #region 旧参数 //var receiveAddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); //if (receiveAddress == null) //{ // result.Status = false; // result.Message = string.Format("订单中的收货地址编号{0}不存在!", order.ReceiveAddressSysNo); // result.StatusCode = -101; //} //var area = BLL.Basic.BasicAreaBo.Instance.GetArea(receiveAddress.AreaSysNo); //if (area == null) //{ // result.Status = false; // result.Message = string.Format("地区({0})不存在!", receiveAddress.AreaSysNo); // result.StatusCode = -103; //} //var city = BLL.Basic.BasicAreaBo.Instance.GetArea(area.ParentSysNo); //if (city == null) //{ // result.Status = false; // result.Message = string.Format("城市({0})不存在!", area.ParentSysNo); // result.StatusCode = -104; //} //var province = BLL.Basic.BasicAreaBo.Instance.GetArea(city.ParentSysNo); //if (province == null) //{ // result.Status = false; // result.Message = string.Format("省份({0})不存在!", city.ParentSysNo); // result.StatusCode = -105; //} //if (!result.Status) // return result; //var param = "{\"orderId\":\"" + order.OrderNo + "\","; //param += "\"addr\":\"" + receiveAddress.StreetAddress + "\","; //param += "\"phone\":\"" + receiveAddress.MobilePhoneNumber + "\","; //param += "\"freight\":" + order.FreightAmount + ",";//运费 //param += "\"orderDate\":\"" + order.CreateDate.ToString("yyyy-MM-dd") + "\","; //param += "\"province\":\"" + JsonStrEscape(province.AreaName) + "\","; //param += "\"city\":\"" + JsonStrEscape(city.AreaName) + "\","; //param += "\"area\":\"" + JsonStrEscape(area.AreaName) + "\","; //param += "\"total\":" + order.ProductAmount + ",";//订单总金额 //param += "\"insuredFee\":0,"; //保价费用 //param += "\"cardType\":\"0\","; //证件类型 (默认身份证则填0) //param += "\"expressCode\":\"SF\","; //物流公司编码 //param += "\"busiMode\":\"BBC\","; //所属业务模式 (BBC/备货BC/直邮BC/个人物品) //param += "\"whCode\":\"FLC\","; //发货仓库代号 //param += "\"portCode\":\"5141\","; //口岸编码 //param += "\"platformCode\":\"IE150604146855\",";//海关企业备案号 //param += "\"cardNo\":\"" + receiveAddress.IDCardNo + "\",";//顾客身份证 //param += "\"name\":\"" + JsonStrEscape(receiveAddress.Name) + "\","; ////param += "\"senderContact\":\"测试公司\","; ////param += "\"senderPhone\":\"13500000000\","; ////param += "\"tax\":\"" + orderInfo.TaxFee + "\","; //param += "\"orderItemList\":{"; //param += "\"orderItems\":["; //var orderItemList = Hyt.BLL.Web.SoOrderBo.Instance.GetOrderItemListByOrderSysNo(orderId); //string orderItem = ""; //foreach (var item in orderItemList) //{ // if (orderItem != "") // orderItem += ","; // orderItem += "{"; // //8712400110037 // //orderItem += "\"qty\":" + item.Quantity + ",\"price\":" + item.SalesUnitPrice + ",\"total\":" + item.SalesAmount + ",\"productId\":\""+item.ErpCode+"\",\"productName\":\"" + JsonStrEscape(item.ProductName) + "\""; // orderItem += "\"qty\":" + item.Quantity + ",\"price\":" + item.SalesUnitPrice + ",\"total\":" + item.SalesAmount + ",\"productId\":\"8712400110136\",\"productName\":\"" + JsonStrEscape(item.ProductName) + "\""; // orderItem += "}"; //} //param += orderItem; //param += "]}}"; #endregion string method = "wtdex.trade.order.add"; order.ReceiveAddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); order.OrderItemList = DataAccess.Order.ISoOrderItemDao.Instance.GetOrderItemsByOrderSysNo(order.SysNo); //ParaVoucherFilter voucherFilter = new ParaVoucherFilter(); //voucherFilter.SourceSysNo = order.SysNo; //CBFnReceiptVoucher recVoucher = BLL.Finance.FinanceBo.Instance.GetReceiptVouchers(voucherFilter).Rows.FirstOrDefault(); //recVoucher.VoucherItems = BLL.Finance.FnReceiptVoucherBo.Instance.GetReceiptVoucherItem(recVoucher.SysNo); var filter = new ParaOnlinePaymentFilter(); filter.OrderSysNo = orderId; var onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault(); if (onlinePayment == null) { result.Message = "订单不存在在线支付记录"; return(result); } // 收货人 区 市 省 BsArea receiverDistrict = BLL.Basic.BasicAreaBo.Instance.GetArea(order.ReceiveAddress.AreaSysNo); BsArea receiverCity = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverDistrict.ParentSysNo); BsArea receiverProvince = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverCity.ParentSysNo); // 发货人 市 CBWhWarehouse warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); BsArea shipperCity = BLL.Basic.BasicAreaBo.Instance.GetArea(warehouse.CitySysNo); DsDealer dealer = BLL.Distribution.DsDealerBo.Instance.GetDsDealer(order.DealerSysNo); LgDeliveryType deliveryType = BLL.Logistics.DeliveryTypeBo.Instance.GetDeliveryType(order.DeliveryTypeSysNo); var newOrder = new WTDOrder(); newOrder.addr = TConvert.ToString(order.ReceiveAddress.StreetAddress).Trim(); newOrder.area = TConvert.ToString(receiverDistrict.AreaName).Trim(); newOrder.busiMode = "BC"; newOrder.cardNo = TConvert.ToString(order.ReceiveAddress.IDCardNo); newOrder.cardType = "0"; newOrder.city = TConvert.ToString(receiverCity.AreaName).Trim(); newOrder.consumerAddr = TConvert.ToString(order.ReceiveAddress.StreetAddress).Trim(); newOrder.consumerArea = TConvert.ToString(receiverDistrict.AreaName).Trim(); newOrder.consumerCity = TConvert.ToString(receiverCity.AreaName).Trim(); newOrder.consumerName = TConvert.ToString(order.ReceiveAddress.Name); newOrder.consumerPhone = !string.IsNullOrWhiteSpace(order.ReceiveAddress.MobilePhoneNumber) ? order.ReceiveAddress.MobilePhoneNumber : order.ReceiveAddress.PhoneNumber; newOrder.consumerProvince = TConvert.ToString(receiverProvince.AreaName).Trim(); newOrder.destCity = null; newOrder.expressCode = "YT";// "SF"; newOrder.expressNo = null; newOrder.freight = (double)order.FreightAmount; newOrder.ieFlag = null; newOrder.insuredFee = 0d; newOrder.invoice = null; newOrder.invoiceHead = null; newOrder.invoiceType = null; newOrder.isgac = 1; newOrder.isactpay = "0"; newOrder.isactlogistics = "1"; newOrder.mobile = null; newOrder.name = TConvert.ToString(order.ReceiveAddress.Name); newOrder.notes = TConvert.ToString(order.Remarks).Trim(); newOrder.orderDate = order.CreateDate.ToString("yyyy-MM-dd"); newOrder.orderId = onlinePayment.BusinessOrderSysNo; newOrder.paymentCode = null; newOrder.phone = !string.IsNullOrWhiteSpace(order.ReceiveAddress.MobilePhoneNumber) ? order.ReceiveAddress.MobilePhoneNumber : order.ReceiveAddress.PhoneNumber; newOrder.pickMode = "0";//BC、PS情况下必填0:散货/包裹1:大货/备货,有货物在我们仓库 newOrder.platformCode = config.PlatformCode; newOrder.portCode = config.PortCode; newOrder.prodFlag = null; newOrder.province = TConvert.ToString(receiverProvince.AreaName).Trim(); newOrder.seller = null; newOrder.senderContact = TConvert.ToString(dealer.ErpName); newOrder.senderPhone = !string.IsNullOrWhiteSpace(dealer.MobilePhoneNumber) ? dealer.MobilePhoneNumber : dealer.PhoneNumber; newOrder.tax = (double)order.TaxFee; newOrder.total = (double)order.ProductAmount; //newOrder.total = 100d; newOrder.whCode = TConvert.ToString(warehouse.LogisWarehouseCode); newOrder.zipCode = null; newOrder.orderItemList = new WTDOrderItemList(); newOrder.orderItemList.orderItems = new List <WTDOrderItem>(); WTDOrderItem orderItem = new WTDOrderItem(); foreach (var item in order.OrderItemList) { var product = BLL.Product.PdProductBo.Instance.GetProductNoCache(item.ProductSysNo); orderItem.groupBarcode = null; orderItem.isGroup = null; orderItem.postTax = null; orderItem.price = (double)item.SalesUnitPrice; orderItem.productId = product.ErpCode; orderItem.productName = TConvert.ToString(item.ProductName); orderItem.qty = item.Quantity; orderItem.total = (double)item.SalesAmount; newOrder.orderItemList.orderItems.Add(orderItem); //orderItem.groupBarcode = null; //orderItem.isGroup = null; //orderItem.postTax = null; //orderItem.price = 50d; //orderItem.productId = "8712400110136"; //orderItem.productName = TConvert.ToString(item.ProductName); //orderItem.qty = 2; //orderItem.total = 100d; //newOrder.orderItemList.orderItems.Add(orderItem); //break; } string postData = Util.Serialization.JsonUtil.ToJson2(newOrder); postData = InitParams(method, postData); var _result = Hyt.Util.WebUtil.PostForm(apiUrl, postData); result = GetResponseResult(_result); if (result.Status == true) { var soOrderSyncLogisticsLog = new SoOrderSyncLogisticsLog(); soOrderSyncLogisticsLog.OrderSysNo = orderId; soOrderSyncLogisticsLog.Code = (int)this.Code; soOrderSyncLogisticsLog.LastUpdateDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue; soOrderSyncLogisticsLog.StatusCode = ""; soOrderSyncLogisticsLog.StatusMsg = ""; soOrderSyncLogisticsLog.Packets = postData; soOrderSyncLogisticsLog.ReceiptContent = _result; soOrderSyncLogisticsLog.LastUpdateBy = 0; soOrderSyncLogisticsLog.LogisticsOrderId = ""; soOrderSyncLogisticsLog.CreateDate = DateTime.Now; soOrderSyncLogisticsLog.CreatedBy = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo; SoOrderSyncLogisticsLogBo.Instance.Insert(soOrderSyncLogisticsLog); BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus(1, 3, orderId); } } catch (Exception ex) { result.Message = "向" + this.Code + "物流推送订单报错:" + ex.StackTrace; return(result); } return(result); }
/// <summary> /// 支付报关推送 /// </summary> /// <param name="order">订单实体</param> public override Result ApplyToCustoms(SoOrder order) { Result result = new Result() { Status = false, StatusCode = 0, Message = "未知错误" }; //防止并发操作 lock (lockHelper) { try { if (order != null) { var onlinePaymentFilter = new ParaOnlinePaymentFilter() { OrderSysNo = order.SysNo, Id = 1 }; var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows; var receiveAddress = Hyt.BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); DateTime dtNow = DateTime.Now; //广州电子口岸 string xmlTemplte = "<VnbMessage>" + "<MessageHead>" + "<MessageCode>VNB3PARTY_GZEPORT</MessageCode>" + "<MessageID>" + dtNow.ToString("yyyyMMddHHmmss") + "0001" + "</MessageID>" + "<SenderID>" + payConfig.TLPaySenderID + "</SenderID>" + "<SendTime>" + dtNow.ToString("yyyy-MM-dd HH:mm:ss") + "</SendTime>" + "<ReceiptUrl>" + payConfig.TLPayReceiptUrl + "</ReceiptUrl>" + "<Sign>{0}</Sign>" + "</MessageHead>" + "<MessageBodyList>" + "<MessageBody>" + "<customICP>" + customsConfig.SenderID + "</customICP>" + "<customName>" + customsConfig.EbcName + "</customName>" + "<ciqType>00</ciqType>" + "<cbepComCode>C000000000001</cbepComCode>" + "<orderNo>" + onlinePayments.First().BusinessOrderSysNo + "</orderNo>" + "<payTransactionNo>" + onlinePayments.First().VoucherNo + "</payTransactionNo>" + "<payChnlID>" + (order.OrderSource == (int)Model.WorkflowStatus.OrderStatus.销售单来源.手机商城 ? "02" : "01") + "</payChnlID>" + "<payTime>" + onlinePayments.First().CreatedDate.ToString("yyyy-MM-dd HH:mm:ss") + "</payTime>" + "<payGoodsAmount>" + order.ProductAmount.ToString("F2") + "</payGoodsAmount>" + "<payTaxAmount>" + order.TaxFee.ToString("F2") + "</payTaxAmount>" + "<freight>" + order.FreightAmount.ToString("F2") + "</freight>" + "<payCurrency>142</payCurrency>" + "<payerName>" + receiveAddress.Name + "</payerName>" + "<payerDocumentType>01</payerDocumentType>" + "<payerDocumentNumber>" + receiveAddress.IDCardNo + "</payerDocumentNumber>" + "</MessageBody>" + "</MessageBodyList>" + "</VnbMessage>"; string sign = FormsAuthentication.HashPasswordForStoringInConfigFile(string.Format(xmlTemplte, "") + payConfig.TLPaySignKey, "MD5").ToUpper(); string xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + string.Format(xmlTemplte, sign); BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "通联支付报关推送报文:" + xmlString, LogStatus.系统日志目标类型.支付方式, order.SysNo, 0); HttpClient client = new HttpClient(payConfig.TLPayCustomsUrl); string back = client.Post(xmlString); BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "通联支付报关接口响应报文:" + back, LogStatus.系统日志目标类型.支付方式, order.SysNo, 0); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(back); XmlNode xmlNodeHead = xmlDoc.SelectSingleNode("//VnbMessage//MessageHead"); string CommCode = xmlNodeHead.SelectSingleNode("CommCode").InnerText; //通讯状态码(请求方不填, 响应方返回) string BizStatus = xmlNodeHead.SelectSingleNode("BizStatus").InnerText; //业务状态码(请求方不填, 响应方返回) if (CommCode == "000000") { if (BizStatus != "BZ0001") { XmlNode xmlNodeBody = xmlDoc.SelectSingleNode("//VnbMessage//MessageBodyList//MessageBody"); string retInfo = xmlNodeBody.SelectSingleNode("retInfo").InnerText; result.Message = retInfo; } else { result.Message = "请求已受理"; result.Status = true; //更新订单支付报关状态为处理中 Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo); BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "TLPay推送接口调试成功!", LogStatus.系统日志目标类型.支付方式, order.SysNo, 0); } } else { string retInfo = "通讯失败"; switch (CommCode) { case "HD0001": retInfo = "无效的内容长度"; break; case "HD0002": retInfo = "请求报文为空"; break; case "HD0003": retInfo = "报文头格式错误"; break; case "HD0004": retInfo = "报文头必填字段为空"; break; case "HD0005": retInfo = "无效的报文消息码"; break; case "HD0006": retInfo = "无效的接入系统代码"; break; case "HD0007": retInfo = "无效的接入主机IP"; break; case "HD0008": retInfo = "签名验签错误,报文签名域不正确"; break; default: break; } result.Message = retInfo; } } else { result.Message = "该订单不存在!"; } } catch (Exception ex) { result.Status = false; result.Message = ex.Message; BLL.Log.SysLog.Instance.Error(LogStatus.系统日志来源.后台, "通联支付报关推送异常:" + ex.Message, ex); } } return(result); }
/// <summary> /// 支付报关查询 /// </summary> /// <param name="orderId">订单id</param> public override Result CustomsQuery(int orderId) { Result result = new Result() { Status = false, StatusCode = 0, Message = "未知错误" }; //防止并发操作 lock (lockHelper) { try { var order = BLL.Order.SoOrderBo.Instance.GetEntity(orderId); if (order != null) { var onlinePaymentFilter = new ParaOnlinePaymentFilter() { OrderSysNo = order.SysNo, Id = 1 }; var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows; DateTime dtNow = DateTime.Now; string xmlTemplte = "<VnbMessage>" + "<MessageHead>" + "<MessageCode>VNB3PARTY_CUSTOMSQUERY</MessageCode>" + "<MessageID>" + dtNow.ToString("yyyyMMddHHmmss") + "0000" + "</MessageID>" + "<SenderID>" + payConfig.TLPaySenderID + "</SenderID>" + "<SendTime>" + dtNow.ToString("yyyy-MM-dd HH:mm:ss") + "</SendTime>" + "<Sign>{0}</Sign>" + "</MessageHead>" + "<MessageBodyList>" + "<MessageBody>" + "<orderNo>" + onlinePayments.First().BusinessOrderSysNo + "</orderNo>" + "<payDate>" + onlinePayments.First().CreatedDate.ToString("yyyy-MM-dd") + "</payDate>" + "</MessageBody>" + "</MessageBodyList>" + "</VnbMessage>"; string sign = FormsAuthentication.HashPasswordForStoringInConfigFile(string.Format(xmlTemplte, "") + payConfig.TLPaySignKey, "MD5").ToUpper(); string xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + string.Format(xmlTemplte, sign); BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "通联支付报关查询报文:" + xmlString, LogStatus.系统日志目标类型.支付方式, order.SysNo, 0); HttpClient client = new HttpClient(payConfig.TLPayCustomsUrl); string back = client.Post(xmlString); BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "通联支付报关查询接口响应报文:" + back, LogStatus.系统日志目标类型.支付方式, order.SysNo, 0); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(back); XmlNode xmlNodeHead = xmlDoc.SelectSingleNode("//VnbMessage//MessageHead"); string CommCode = xmlNodeHead.SelectSingleNode("CommCode").InnerText; //通讯状态码(请求方不填, 响应方返回) string BizStatus = xmlNodeHead.SelectSingleNode("BizStatus").InnerText; //业务状态码(请求方不填, 响应方返回) if (CommCode == "000000") { XmlNode xmlNodeBody = xmlDoc.SelectSingleNode("//VnbMessage//MessageBodyList//MessageBody"); if (BizStatus != "BZ0001") { string retInfo = xmlNodeBody.SelectSingleNode("retInfo").InnerText; result.Message = retInfo; } else { string returnCode = xmlNodeBody.SelectSingleNode("returnCode").InnerText; string returnInfo = xmlNodeBody.SelectSingleNode("returnInfo").InnerText; result.Message = returnInfo; if (returnCode == "C01") { result.Status = true; //更新订单支付报关状态为处理中 Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.成功, 0, order.SysNo); BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "TLPay查询接口调试成功!", LogStatus.系统日志目标类型.支付方式, order.SysNo, 0); } else { string customsStatus = xmlNodeBody.SelectSingleNode("customsStatus").InnerText; string customsStatusInfo = "未上送"; switch (customsStatus) { case "1": customsStatusInfo = "上送中"; break; case "2": customsStatusInfo = "上送完成"; break; case "3": customsStatusInfo = "已获取回执"; break; case "4": customsStatusInfo = "反馈成功"; break; case "5": customsStatusInfo = "反馈失败"; break; case "6": customsStatusInfo = "上送失败"; break; case "7": customsStatusInfo = "订单不存在"; break; default: break; } result.Message = customsStatusInfo; } } } else { string retInfo = "通讯失败"; switch (CommCode) { case "HD0001": retInfo = "无效的内容长度"; break; case "HD0002": retInfo = "请求报文为空"; break; case "HD0003": retInfo = "报文头格式错误"; break; case "HD0004": retInfo = "报文头必填字段为空"; break; case "HD0005": retInfo = "无效的报文消息码"; break; case "HD0006": retInfo = "无效的接入系统代码"; break; case "HD0007": retInfo = "无效的接入主机IP"; break; case "HD0008": retInfo = "签名验签错误,报文签名域不正确"; break; default: break; } result.Message = retInfo; } } else { result.Message = "订单不存在!"; } } catch (Exception ex) { result.Status = false; result.Message = ex.Message; BLL.Log.SysLog.Instance.Error(LogStatus.系统日志来源.后台, "通联支付报关查询异常:" + ex.Message, ex); } } return(result); }
/// <summary> /// 网上支付查询 /// </summary> /// <param name="filter">查询条件</param> /// <returns>分页查询</returns> /// <remarks>2013-07-18 朱家宏 创建</remarks> public Pager <CBFnOnlinePayment> GetOnlinePayments(ParaOnlinePaymentFilter filter) { var pager = IFnOnlinePaymentDao.Instance.GetAll(filter); return(pager); }
/// <summary> /// 海关报关 /// </summary> /// <returns></returns> /// <remarks>2015-10-12 杨浩 创建</remarks> public override Result ApplyToCustoms(SoOrder order) { Result result = new Result() { Status = false }; try { if (order != null) { var ehkingMerchantId = config.EhkingMerhantId; var ehkingKey = config.EhkingKey; var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); if (warehouse != null && warehouse.WarehouseType == (int)Model.WorkflowStatus.WarehouseStatus.仓库类型.门店) { var dealer = BLL.Stores.StoresBo.Instance.GetStoreByWarehouseId(warehouse.SysNo); if (dealer != null) { var dealerPayType = BLL.Stores.StoresBo.Instance.GetStorePayType(dealer.SysNo); if (!string.IsNullOrWhiteSpace(dealerPayType.AppKey) && !string.IsNullOrWhiteSpace(dealerPayType.AppSecret) && dealerPayType.PaymentTypeSysNo == (int)Model.CommonEnum.PayCode.易宝) { ehkingMerchantId = dealerPayType.AppKey; ehkingKey = dealerPayType.AppSecret; } } } var onlinePaymentFilter = new ParaOnlinePaymentFilter() { OrderSysNo = order.SysNo, Id = 1 }; var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows; var receiveAddress = Hyt.BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); string nodeAuthorizationURL = config.EhkingNodeAuthorizationUrl; string merchantId = ehkingMerchantId; string keyValue = ehkingKey; string serialNumber = onlinePayments.First().VoucherNo; string notifyUrl = "http://admin.singingwhale.cn/ajax/notifyReceipt";// config.EhkingCustomsAsyncUrl; string amount = "0"; string Freight = "0"; string GoodsAmount = "0"; string Tax = "0"; //var customsConfig = Hyt.BLL.Config.Config.Instance.GetCustomsConfig(); string dxpid = "DXPENT0000012770"; //if(!string.IsNullOrEmpty(customsConfig.DxpId)) // dxpid = customsConfig.DxpId; StringBuilder sbHmac = new StringBuilder(); sbHmac.Append(merchantId); sbHmac.Append(serialNumber); sbHmac.Append(notifyUrl); amount = (order.CashPay * 100).ToString("F0"); Freight = (order.FreightAmount * 100).ToString("F0"); GoodsAmount = (order.ProductAmount * 100).ToString("F0"); Tax = (order.TaxFee * 100).ToString("F0"); sbHmac.Append(receiveAddress.Name); sbHmac.Append(receiveAddress.IDCardNo); sbHmac.Append(receiveAddress.MobilePhoneNumber); sbHmac.Append(CustomsChannel); sbHmac.Append(amount); sbHmac.Append(Freight); sbHmac.Append(GoodsAmount); sbHmac.Append(Tax); sbHmac.Append(dxpid); string hmac = Digest.HmacSign(sbHmac.ToString(), keyValue); HttpClient client = new HttpClient(nodeAuthorizationURL); string data = "{\"merchantId\":\"" + merchantId + "\",\"paySerialNumber\":\"" + serialNumber + "\",\"notifyUrl\":\"" + notifyUrl + "\"" + ",\"payer\": {" + "\"payerName\": \"" + receiveAddress.Name + "\"," + "\"idNum\": \"" + receiveAddress.IDCardNo + "\"," + "\"phoneNum\": \"" + receiveAddress.MobilePhoneNumber + "\"" + "}" + ",\"customsInfos\":[{\"customsChannel\":\"" + CustomsChannel + "\",\"amount\":\"" + amount + "\",\"freight\":\"" + Freight + "\",\"goodsAmount\":\"" + GoodsAmount + "\",\"tax\":\"" + Tax + "\",\"dxpid\":\"" + dxpid + "\"}],\"hmac\":\"" + hmac + "\"}"; BLL.Log.LocalLogBo.Instance.Write("提交的数据:" + data, "EhkingCustomsLog"); string responsestr = client.Post(data); var back = JObject.Parse(responsestr); if (back["status"].ToString() == "SUCCESS") { result.Message = "提交成功!"; result.Status = true; //更新订单支付报关状态为处理中 Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo); BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.前台, "订单编号:" + order.SysNo + ",支付信息报关提交成功!", LogStatus.系统日志目标类型.订单支付报关, order.SysNo, 0); } else if (back["status"].ToString() == "FAILED") { result.Message = "提交失败!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCustomsLog"); } else if (back["status"].ToString() == "ERROR") { if (back["error"].ToString() == "exception.record.exists.customsOrder")//已提交则设置状态为待处理 { result.Message = "此订单已提交,请查询!"; Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo); } else { result.Message = "提交失败,错误代码:" + back["error"].ToString(); } BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCustomsERRORLog"); result.Status = false; } else { result.Message = "其他异常!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("其他异常!" + responsestr, "EhkingCustomsLog"); } //推送国检 //Hyt.BLL.ApiPay.EhkingCip.PayProvider.ApplyToCustoms(order); } } catch (Exception ex) { result.Message = "报错!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("报错!" + ex.Message, "EhkingCustomsLog"); } return(result); }
/// <summary> /// 广州电子口岸海关申报 /// </summary> /// <returns></returns> public override Result ApplyToCustomsDZ30(SoOrder order) { var result = base.ApplyToCustomsDZ30(order); try { if (order != null) { var ehkingMerchantId = config.EhkingMerhantId; var ehkingKey = config.EhkingKey; string EhkingNodeAuthorizationUrl = "https://api.ehking.com/customs/order"; string EhkingCustomsAsyncUrl = "http://admin.gaopin999.com/Account/NotifyReceiptDZ30"; var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); if (warehouse != null && warehouse.WarehouseType == (int)Model.WorkflowStatus.WarehouseStatus.仓库类型.门店) { var dealer = BLL.Stores.StoresBo.Instance.GetStoreByWarehouseId(warehouse.SysNo); if (dealer != null) { var dealerPayType = BLL.Stores.StoresBo.Instance.GetStorePayType(dealer.SysNo); if (!string.IsNullOrWhiteSpace(dealerPayType.AppKey) && !string.IsNullOrWhiteSpace(dealerPayType.AppSecret) && dealerPayType.PaymentTypeSysNo == (int)Model.CommonEnum.PayCode.易宝) { ehkingMerchantId = dealerPayType.AppKey; ehkingKey = dealerPayType.AppSecret; } } } var onlinePaymentFilter = new ParaOnlinePaymentFilter() { OrderSysNo = order.SysNo, Id = 1 }; var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows; var receiveAddress = Hyt.BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); string nodeAuthorizationURL = EhkingNodeAuthorizationUrl; //请求地址 string merchantId = ehkingMerchantId; //商户编号 string keyValue = ehkingKey; //商户密钥 string customsChannels = "GUANGZHOUSP"; //报关通道:GUANGZHOUSP(广州公共服务) string serialNumber = onlinePayments.First().VoucherNo; //支付流水号 string notifyUrl = EhkingCustomsAsyncUrl; //异步回调 string amount = "0"; //报关金额 string Freight = "0"; //运费 string GoodsAmount = "0"; //支付货款 string Tax = "0"; //税费 string insuredAmount = "0"; //保费 string merchantCommerceName = "广州鼎球生物科技有限公司"; //企业备案名称 string merchantCommerceCode = "C011111100393744"; //企业在海关的备案号 string storeHouse = ""; //商品所在仓 string customsCode = "5141"; //广州机场 5141;南沙旅检 5165;南沙货港 5167;番禺东发 5169;广州邮办 5145;黄埔开发区 5208;太平海关驻沙田办事处 5216;广州萝岗 5130;佛山海关快件监管现场 5185 string ciqCode = "442300"; //机场的国检组织机构代码是:000067;黄埔开发区的组织机构代码:000077,黄埔状元谷组织机构代码:443433 string functionCode = "BC"; //单向海关-CUS,单向国检-CIQ,同时发送-BC string businessType = "B2C"; //B2B2C,B2C StringBuilder sbHmac = new StringBuilder(); sbHmac.Append(merchantId); sbHmac.Append(serialNumber); sbHmac.Append(notifyUrl); amount = (order.CashPay * 100).ToString("F0"); Freight = (order.FreightAmount * 100).ToString("F0"); GoodsAmount = (order.ProductAmount * 100).ToString("F0"); Tax = (order.TaxFee * 100).ToString("F0"); sbHmac.Append(receiveAddress.Name); sbHmac.Append(receiveAddress.IDCardNo); sbHmac.Append(receiveAddress.MobilePhoneNumber); sbHmac.Append(customsChannels); sbHmac.Append(amount); sbHmac.Append(Freight); sbHmac.Append(GoodsAmount); sbHmac.Append(Tax); sbHmac.Append(insuredAmount); sbHmac.Append(merchantCommerceName); sbHmac.Append(merchantCommerceCode); sbHmac.Append(storeHouse); sbHmac.Append(customsCode); sbHmac.Append(ciqCode); sbHmac.Append(functionCode); sbHmac.Append(businessType); string hmac = Digest.HmacSign(sbHmac.ToString(), keyValue); HttpClient client = new HttpClient(nodeAuthorizationURL); string data = "{\"merchantId\":\"" + merchantId + "\",\"paySerialNumber\":\"" + serialNumber + "\",\"notifyUrl\":\"" + notifyUrl + "\"" + ",\"payer\": {" + "\"payerName\": \"" + receiveAddress.Name + "\"," + "\"idNum\": \"" + receiveAddress.IDCardNo + "\"," + "\"phoneNum\": \"" + receiveAddress.MobilePhoneNumber + "\"" + "}" + ",\"customsInfos\":[{\"customsChannel\":\"" + customsChannels + "\",\"amount\":\"" + amount + "\",\"freight\":\"" + Freight + "\",\"goodsAmount\":\"" + GoodsAmount + "\",\"tax\":\"" + Tax + "\",\"insuredAmount\":\"" + insuredAmount + "\",\"merchantCommerceName\":\"" + merchantCommerceName + "\",\"merchantCommerceCode\":\"" + merchantCommerceCode + "\",\"storeHouse\":\"" + storeHouse + "\",\"customsCode\":\"" + customsCode + "\",\"ciqCode\":\"" + ciqCode + "\",\"functionCode\":\"" + functionCode + "\",\"businessType\":\"" + businessType + "\"}],\"hmac\":\"" + hmac + "\"}"; string responsestr = client.Post(data); BLL.Log.LocalLogBo.Instance.Write("提交的数据:" + data + ",------返回数据:" + responsestr, "EhkingCustomsDZ30Log"); var back = JObject.Parse(responsestr); if (back["status"].ToString() == "SUCCESS") { result.Message = "提交成功!"; result.Status = true; //更新订单支付报关状态为处理中 Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo); BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.前台, "订单编号:" + order.SysNo + ",支付信息报关提交成功!", LogStatus.系统日志目标类型.订单支付报关, order.SysNo, 0); } else if (back["status"].ToString() == "FAILED") { result.Message = "提交失败!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCustomsDZ30Log"); } else if (back["status"].ToString() == "ERROR") { if (back["error"].ToString() == "exception.record.exists.customsOrder")//已提交则设置状态为待处理 { //result.Message = "此订单已提交,请查询!"; //Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付报关状态.处理中, 0, order.SysNo); result = CustomsQuery(order.SysNo); return(result); } else { result.Message = "提交失败,错误代码:" + back["error"].ToString(); } BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCustomsDZ30ERRORLog"); result.Status = false; } else { result.Message = "其他异常!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("其他异常!" + responsestr, "EhkingCustomsDZ30Log"); } } } catch (Exception ex) { result.Message = "报错!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("报错!" + ex.Message, "EhkingCustomsDZ30Log"); } 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() { Status = false }; var order = BLL.Order.SoOrderBo.Instance.GetEntity(orderId); var ehkingMerchantId = config.EhkingMerhantId; var ehkingKey = config.EhkingKey; var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); if (warehouse != null && warehouse.WarehouseType == (int)Model.WorkflowStatus.WarehouseStatus.仓库类型.门店) { var dealer = BLL.Stores.StoresBo.Instance.GetStoreByWarehouseId(warehouse.SysNo); if (dealer != null) { var dealerPayType = BLL.Stores.StoresBo.Instance.GetStorePayType(dealer.SysNo); if (!string.IsNullOrWhiteSpace(dealerPayType.AppKey) && !string.IsNullOrWhiteSpace(dealerPayType.AppSecret) && dealerPayType.PaymentTypeSysNo == (int)Model.CommonEnum.PayCode.易宝) { ehkingMerchantId = dealerPayType.AppKey; ehkingKey = dealerPayType.AppSecret; } } } var onlinePaymentFilter = new ParaOnlinePaymentFilter() { OrderSysNo = orderId, Id = 1 }; var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows; if (onlinePayments.Count() <= 0) { result.Status = false; result.Message = "订单没有支付信息!"; } else { string responsestr = ""; string data = ""; try { string serialNumber = onlinePayments.First().VoucherNo; string url = "https://api.ehking.com/customs/query";//查询网关 string hmac = Digest.HmacSign(ehkingMerchantId + serialNumber, ehkingKey); HttpClient client = new HttpClient(url); data = "{\"merchantId\":\"" + ehkingMerchantId + "\",\"paySerialNumber\":\"" + serialNumber + "\",\"hmac\":\"" + hmac + "\"}"; responsestr = client.Post(data); var back = JObject.Parse(responsestr); var customsInfos = back.Property("customsInfos") != null ? back["customsInfos"][0] : back; OrderStatus.支付报关状态 status = OrderStatus.支付报关状态.失败; if (customsInfos["status"].ToString() == "SUCCESS") { result.Message = "SUCCESS"; result.Status = true; status = OrderStatus.支付报关状态.成功; } else if ("PROCESSING" == customsInfos["status"].ToString()) { result.Message = "海关正在审核...,稍后再查询!"; status = OrderStatus.支付报关状态.处理中; } else { //BLL.Log.LocalLogBo.Instance.Write("失败!" + responsestr, "CustomsQueryLog"); result.Message = "易宝返回状态:" + customsInfos["status"].ToString() + "(" + (back.Property("customsInfos") == null?customsInfos["error"].ToString():"") + ")"; } Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)status, 0, orderId); } catch (Exception ex) { result.Status = false; result.Message = "系统异常!"; BLL.Log.LocalLogBo.Instance.Write("\r\n报错!" + ex.Message + ";responsestr=" + responsestr + ";data=" + data, "CustomsQuery"); } } return(result); }
/// <summary> /// 添加交易订单 /// </summary> /// <param name="orderId">销售订单系统编号</param> /// <returns></returns> /// <remarks></remarks> /// <remarks>2016-3-8 杨浩 创建</remarks> /// <remarks>2016-09-22 周 重构</remarks> public override Result AddOrderTrade(int orderId) { var result = new Result() { Status = false, StatusCode = 0, Message = "向" + this.Code + "物流推送订单失败" }; #region try { var order = Hyt.BLL.Order.SoOrderBo.Instance.GetEntity(orderId); if (order == null) { result.Status = false; result.Message = string.Format("订单号{0}不存在!", orderId); result.StatusCode = -100; } order.ReceiveAddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); order.OrderItemList = DataAccess.Order.ISoOrderItemDao.Instance.GetOrderItemsByOrderSysNo(order.SysNo); var filter = new ParaOnlinePaymentFilter(); filter.OrderSysNo = orderId; var onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault(); if (onlinePayment == null) { result.Message = "订单不存在在线支付记录"; return(result); } // 收货人 区 市 省 BsArea receiverDistrict = BLL.Basic.BasicAreaBo.Instance.GetArea(order.ReceiveAddress.AreaSysNo); BsArea receiverCity = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverDistrict.ParentSysNo); BsArea receiverProvince = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverCity.ParentSysNo); // 发货人 市 CBWhWarehouse warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); BsArea shipperCity = BLL.Basic.BasicAreaBo.Instance.GetArea(warehouse.CitySysNo); DsDealer dealer = BLL.Distribution.DsDealerBo.Instance.GetDsDealer(order.DealerSysNo); LgDeliveryType deliveryType = BLL.Logistics.DeliveryTypeBo.Instance.GetDeliveryType(order.DeliveryTypeSysNo); var newOrder = new CreatedOrderApiRequest(); newOrder.OutOrderNo = order.SysNo.ToString(); newOrder.DeliveryCode = "3";//暂时默认1(后期此参数作废) newOrder.ReceiverName = TConvert.ToString(order.ReceiveAddress.Name); newOrder.ReceiverMobile = !string.IsNullOrWhiteSpace(order.ReceiveAddress.MobilePhoneNumber) ? order.ReceiveAddress.MobilePhoneNumber : order.ReceiveAddress.PhoneNumber; newOrder.ReceiverProvince = TConvert.ToString(receiverProvince.AreaName).Trim(); newOrder.ReceiverCity = TConvert.ToString(receiverCity.AreaName).Trim(); newOrder.ReceiverDistrict = TConvert.ToString(receiverDistrict.AreaName).Trim(); newOrder.ReceiverAddress = TConvert.ToString(order.ReceiveAddress.StreetAddress).Trim(); newOrder.ReceiverIdCard = TConvert.ToString(order.ReceiveAddress.IDCardNo); newOrder.ReceiverFrontIdCardImageUrl = HttpContext.Current.Request.Url.Host + TConvert.ToString(order.ReceiveAddress.IDCardImgs); newOrder.ReceiverOppositeIdCardImageUrl = HttpContext.Current.Request.Url.Host + TConvert.ToString(order.ReceiveAddress.IDCardImgs); newOrder.UserRemark = order.Remarks; newOrder.ThirdPlatformPaymentName = Enum.GetName(typeof(Hyt.Model.CommonEnum.PayCode), order.PayTypeSysNo); var payment = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePaymentBySourceSysNo(orderId); string PaymentNumber = ""; if (payment != null) { PaymentNumber = payment.VoucherNo; } newOrder.ThirdPlatformPaymentNumber = PaymentNumber; newOrder.Items = new List <CreatedOrderItemRequest>(); CreatedOrderItemRequest orderItem = new CreatedOrderItemRequest(); foreach (var item in order.OrderItemList) { var product = BLL.Product.PdProductBo.Instance.GetProductNoCache(item.ProductSysNo); orderItem.SkuId = product.ErpCode; orderItem.Quantity = item.Quantity; newOrder.Items.Add(orderItem); } var json = Newtonsoft.Json.JsonConvert.SerializeObject(newOrder); //推送订单 var _result = CreatedOrder(newOrder); if (_result.ResultCode == 200) { var soOrderSyncLogisticsLog = new SoOrderSyncLogisticsLog(); soOrderSyncLogisticsLog.OrderSysNo = orderId; soOrderSyncLogisticsLog.Code = (int)this.Code; soOrderSyncLogisticsLog.LastUpdateDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue; soOrderSyncLogisticsLog.StatusCode = ""; soOrderSyncLogisticsLog.StatusMsg = ""; soOrderSyncLogisticsLog.Packets = json; soOrderSyncLogisticsLog.ReceiptContent = _result.Tag.ToString(); soOrderSyncLogisticsLog.LastUpdateBy = 0; soOrderSyncLogisticsLog.LogisticsOrderId = ""; soOrderSyncLogisticsLog.CreateDate = DateTime.Now; soOrderSyncLogisticsLog.CreatedBy = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo; SoOrderSyncLogisticsLogBo.Instance.Insert(soOrderSyncLogisticsLog); BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus(1, 3, orderId); result.Message = "向" + this.Code + "物流推送订单成功:回执单号:" + _result.Tag.ToString(); } else { result.Message = _result.Message; } } catch (Exception ex) { result.Message = "向" + this.Code + "物流推送订单报错:" + ex.StackTrace; return(result); } #endregion return(result); }
/// <summary> /// 添加交易订单 /// </summary> /// <param name="orderSysno"></param> /// <returns> /// 2016-04-09 陈海裕 创建 /// 2016-08-20 杨浩 重构 /// </returns> public override Result AddOrderTrade(int orderSysno) { LogisticsLogin(); var result = new Result <string>(); result.Status = false; result.StatusCode = 0; result.Message = "接口调用失败"; string url = RequestUrl + "Express/uploadOrders"; if (orderSysno <= 0) { return(result); } try { var order = BLL.Order.SoOrderBo.Instance.GetEntity(orderSysno); if (order == null) { result.Message = "该订单不存在"; return(result); } order.ReceiveAddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); order.OrderItemList = DataAccess.Order.ISoOrderItemDao.Instance.GetOrderItemsByOrderSysNo(order.SysNo); var voucherFilter = new ParaVoucherFilter(); voucherFilter.SourceSysNo = order.SysNo; var recVoucher = BLL.Finance.FinanceBo.Instance.GetReceiptVouchers(voucherFilter).Rows.FirstOrDefault(); recVoucher.VoucherItems = BLL.Finance.FnReceiptVoucherBo.Instance.GetReceiptVoucherItem(recVoucher.SysNo); // 收货人 区 市 省 BsArea receiverDistrict = BLL.Basic.BasicAreaBo.Instance.GetArea(order.ReceiveAddress.AreaSysNo); BsArea receiverCity = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverDistrict.ParentSysNo); BsArea receiverProvince = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverCity.ParentSysNo); // 发货人 市 CBWhWarehouse warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); BsArea shipperDistrict = BLL.Basic.BasicAreaBo.Instance.GetAreaList(warehouse.CitySysNo).FirstOrDefault(); BsArea shipperCity = BLL.Basic.BasicAreaBo.Instance.GetArea(warehouse.CitySysNo); BsArea shipperProvince = BLL.Basic.BasicAreaBo.Instance.GetArea(warehouse.ProvinceSysNo); DsDealer dealer = BLL.Distribution.DsDealerBo.Instance.GetDsDealer(order.DealerSysNo); LgDeliveryType deliveryType = BLL.Logistics.DeliveryTypeBo.Instance.GetDeliveryType(order.DeliveryTypeSysNo); ParaOnlinePaymentFilter filter = new ParaOnlinePaymentFilter(); filter.OrderSysNo = orderSysno; var onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault(); Regex regex = new Regex("\t|\n|\r"); OrderList newOrderList = new OrderList(); newOrderList.PrintType = "@1,@2"; newOrderList.list = new List <LGOrder>(); LGOrder newOrder = new LGOrder(); newOrder.Addr = "中国," + receiverProvince.AreaName + "," + receiverCity.AreaName + "," + receiverDistrict.AreaName + "," + order.ReceiveAddress.StreetAddress; newOrder.Addr = regex.Replace(newOrder.Addr, ""); newOrder.CardNo = order.ReceiveAddress.IDCardNo; newOrder.Create_Addr = "中国," + shipperProvince.AreaName + "," + shipperCity.AreaName + "," + shipperDistrict.AreaName + ","; newOrder.Create_Addr = regex.Replace(newOrder.Create_Addr, ""); newOrder.Create_CardNo = ""; newOrder.Create_Name = "澳门爱勤"; newOrder.Create_Phone = !string.IsNullOrWhiteSpace(dealer.MobilePhoneNumber) ? dealer.MobilePhoneNumber : dealer.PhoneNumber; newOrder.id = order.SysNo.ToString(); newOrder.Name = order.ReceiveAddress.Name; newOrder.OrderType = "A"; newOrder.PayCardNo = order.ReceiveAddress.IDCardNo; newOrder.PayCurrency = "CNY"; newOrder.PayName = order.ReceiveAddress.Name; newOrder.PayNo = recVoucher.VoucherItems[0].VoucherNo; newOrder.PayPhone = !string.IsNullOrWhiteSpace(order.ReceiveAddress.MobilePhoneNumber) ? order.ReceiveAddress.MobilePhoneNumber : order.ReceiveAddress.PhoneNumber; newOrder.PayRemark = ""; newOrder.PayTime = order.CreateDate.ToString(); newOrder.PayType = GetPayType(order.PayTypeSysNo);// "alipay"; newOrder.PayUser = order.CustomerSysNo.ToString(); newOrder.Phone = newOrder.PayPhone; newOrder.Price = order.OrderAmount; newOrder.Remark = order.DeliveryRemarks; newOrder.TaxFee = order.TaxFee; newOrder.TranFee = order.FreightAmount; newOrder.Content = ""; foreach (var item in order.OrderItemList) { var productStock = BLL.Warehouse.PdProductStockBo.Instance.GetEntityByWP(order.DefaultWarehouseSysNo, item.ProductSysNo); newOrder.Content += productStock.Barcode + "," + item.Quantity + "," + item.SalesUnitPrice + "|"; } if (!string.IsNullOrWhiteSpace(newOrder.Content)) { newOrder.Content = newOrder.Content.Substring(0, newOrder.Content.Length - 1); } newOrderList.list.Add(newOrder); Dictionary <string, string> paramsData = new Dictionary <string, string>(); paramsData.Add("token", IdentifyPass); paramsData.Add("postdata", Util.Serialization.JsonUtil.ToJson(newOrderList)); string postData = InitParams(paramsData); string responseStr = GetResponse(url, postData); var jObject = JObject.Parse(responseStr); var soOrderSyncLogisticsLog = new SoOrderSyncLogisticsLog(); soOrderSyncLogisticsLog.OrderSysNo = orderSysno; soOrderSyncLogisticsLog.Code = (int)this.Code; soOrderSyncLogisticsLog.LastUpdateDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue; soOrderSyncLogisticsLog.StatusCode = ""; soOrderSyncLogisticsLog.StatusMsg = ""; soOrderSyncLogisticsLog.Packets = postData; soOrderSyncLogisticsLog.ReceiptContent = responseStr; string status = jObject["status"].ToString(); if (status == "-1") { result.Status = false; result.Message = "未登录,请重试!"; IdentifyPass = string.Empty;//清空身份凭证 } else if (status == "1") { for (int i = 0; i < jObject["data"].Count(); i++) { if (jObject["data"][i]["status"].ToString() == "1") { soOrderSyncLogisticsLog.LastUpdateBy = 0; soOrderSyncLogisticsLog.LogisticsOrderId = jObject["data"][i]["id"].ToString(); soOrderSyncLogisticsLog.CreateDate = DateTime.Now; soOrderSyncLogisticsLog.CreatedBy = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo; SoOrderSyncLogisticsLogBo.Instance.Insert(soOrderSyncLogisticsLog); BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)Hyt.Model.WorkflowStatus.OrderStatus.跨境物流推送状态.已推送, 3, orderSysno); result.Status = true; result.Message = "推单成功"; } else { soOrderSyncLogisticsLog.CreateDate = DateTime.Now; SoOrderSyncLogisticsLogBo.Instance.Insert(soOrderSyncLogisticsLog); result.Status = false; result.Message = jObject["data"][i]["message"].ToString(); } } } else { try { SoOrderSyncLogisticsLogBo.Instance.Insert(soOrderSyncLogisticsLog); } catch { } result.Status = false; result.Message = jObject["message"].ToString(); } } catch (Exception ex) { result.Message = "向" + this.Code + "物流推送订单报错:" + ex.StackTrace; return(result); } return(result); }
/// <summary> /// 分页查询 /// </summary> /// <param name="filter">查询参数</param> /// <returns>分页</returns> /// <remarks>2013-07-16 朱家宏 创建</remarks> public abstract Pager <CBFnOnlinePayment> GetAll(ParaOnlinePaymentFilter filter);
/// <summary> /// 添加交易订单 /// </summary> /// <param name="orderSysno"></param> /// <returns>2016-04-09 陈海裕 创建</returns> public override Result AddOrderTrade(int orderSysno) { // 订单id,用于日志记录 _orderSysNo = orderSysno; var result = new Result <string>(); result.Status = false; result.StatusCode = 0; result.Message = "接口调用失败"; string url = RequestUrl + "order/create"; if (orderSysno <= 0) { return(result); } try { var order = BLL.Order.SoOrderBo.Instance.GetEntity(orderSysno); if (order == null) { result.Message = "该订单不存在"; return(result); } order.ReceiveAddress = BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); order.OrderItemList = DataAccess.Order.ISoOrderItemDao.Instance.GetOrderItemsByOrderSysNo(order.SysNo); var voucherFilter = new ParaVoucherFilter(); voucherFilter.SourceSysNo = order.SysNo; var recVoucher = BLL.Finance.FinanceBo.Instance.GetReceiptVouchers(voucherFilter).Rows.FirstOrDefault(); recVoucher.VoucherItems = BLL.Finance.FnReceiptVoucherBo.Instance.GetReceiptVoucherItem(recVoucher.SysNo); // 收货人 区 市 省 var receiverDistrict = BLL.Basic.BasicAreaBo.Instance.GetArea(order.ReceiveAddress.AreaSysNo); var receiverCity = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverDistrict.ParentSysNo); var receiverProvince = BLL.Basic.BasicAreaBo.Instance.GetArea(receiverCity.ParentSysNo); // 发货人 市 var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); var shipperCity = BLL.Basic.BasicAreaBo.Instance.GetArea(warehouse.CitySysNo); if (string.IsNullOrEmpty(warehouse.LogisWarehouseCode)) { Result <string> whResult = GetWarehouseId(); if (!whResult.Status) { return(whResult); } else { warehouse.LogisWarehouseCode = whResult.Data.Split(':')[0].Replace("{", "").Replace("}", "").Replace("\"", "").Trim(); BLL.Warehouse.WhWarehouseBo.Instance.Update(warehouse); } } if (string.IsNullOrEmpty(receiverDistrict.AreaCode) || string.IsNullOrEmpty(receiverCity.AreaCode) || string.IsNullOrEmpty(receiverProvince.AreaCode) || string.IsNullOrEmpty(shipperCity.AreaCode)) { Result <List <YSArea> > areaResult = new Result <List <YSArea> >(); areaResult.Data = new List <YSArea>(); for (int i = 0; i < 8; i++) { areaResult.Data.AddRange(GetYSAreaData(i + 1).Data); } if (string.IsNullOrEmpty(receiverProvince.AreaCode)) { YSArea ysArea = areaResult.Data.Find((p => p.area_name == receiverProvince.AreaName.Trim() || p.old_name == receiverProvince.AreaName.Trim())); if (ysArea != null) { receiverProvince.AreaCode = ysArea.id.ToString(); BLL.Basic.BasicAreaBo.Instance.Update(receiverProvince); } } if (string.IsNullOrEmpty(receiverCity.AreaCode)) { YSArea ysArea = areaResult.Data.Find(p => (p.area_name == receiverCity.AreaName.Trim() || p.old_name == receiverCity.AreaName.Trim()) && p.pid.ToString() == receiverProvince.AreaCode); if (ysArea != null) { receiverCity.AreaCode = ysArea.id.ToString(); BLL.Basic.BasicAreaBo.Instance.Update(receiverCity); } } if (string.IsNullOrEmpty(receiverDistrict.AreaCode)) { YSArea ysArea = areaResult.Data.Find(p => (p.area_name == receiverDistrict.AreaName.Trim() || p.old_name == receiverDistrict.AreaName.Trim()) && p.pid.ToString() == receiverCity.AreaCode); if (ysArea != null) { receiverDistrict.AreaCode = ysArea.id.ToString(); BLL.Basic.BasicAreaBo.Instance.Update(receiverDistrict); } } if (string.IsNullOrEmpty(shipperCity.AreaCode)) { if (string.IsNullOrEmpty(shipperCity.AreaCode)) { shipperCity.AreaCode = shipperCity.SysNo.ToString(); } //YSArea ysArea = areaResult.Data.Find(p => p.area_name == receiverProvince.AreaName.Trim() || p.old_name == receiverDistrict.AreaName.Trim()); //if (ysArea != null) //{ // shipperCity.AreaCode = ysArea.id.ToString(); // BLL.Basic.BasicAreaBo.Instance.Update(shipperCity); //} } } var dealer = BLL.Distribution.DsDealerBo.Instance.GetDsDealer(order.DealerSysNo); var deliveryType = BLL.Logistics.DeliveryTypeBo.Instance.GetDeliveryType(order.DeliveryTypeSysNo); var filter = new ParaOnlinePaymentFilter(); filter.OrderSysNo = orderSysno; var onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault(); if (onlinePayment == null) { result.Message = "订单不存在在线支付记录"; return(result); } string _deliveryType = ""; if (deliveryType.DeliveryTypeName.Contains("顺丰")) { _deliveryType = "SF"; //CustomerCode = SFCustomerCode; //Key = SFKey; Token = SFToken; } else if (deliveryType.DeliveryTypeName.Contains("中通")) { _deliveryType = "ZTO"; } if (_deliveryType == "") { result.Message = "友信达物流目前只有支持顺丰和中通两种快递方式"; return(result); } // 易宝支付有限公司 PTE51001409230000001 var paramsData = new Dictionary <string, string>(); decimal grossWeight = 0m; decimal netWeight = 0m; var error = ""; string productSku = ""; string supplierCode = ""; string productName = ""; string qty = ""; string price = ""; for (int i = 0; i < order.OrderItemList.Count; i++) { var product = BLL.Product.PdProductBo.Instance.GetProduct(order.OrderItemList[i].ProductSysNo); grossWeight += (product.GrosWeight) * order.OrderItemList[i].Quantity; netWeight += (product.NetWeight) * order.OrderItemList[i].Quantity; var productStock = BLL.Warehouse.PdProductStockBo.Instance.GetEntityByWP(order.DefaultWarehouseSysNo, order.OrderItemList[i].ProductSysNo); if (productStock == null) { error += order.OrderItemList[i].ProductSysNo + ","; continue; } #region 条形码商品 var RefProductName = order.OrderItemList[i].ProductName; var RefProductSysNo = order.OrderItemList[i].ProductSysNo; var RefProductQuantity = order.OrderItemList[i].Quantity; BLL.Product.PdProductBo.Instance.RefProductQuantity(ref RefProductSysNo, ref RefProductQuantity, ref RefProductName, order.SysNo); #endregion //// 订单商品 //paramsData.Add("products[" + i + "][product_sku]", product.ErpCode); //paramsData.Add("products[" + i + "][supplier_code]", ""); ////paramsData.Add("products[" + i + "][product_name]", order.OrderItemList[i].ProductName); ////paramsData.Add("products[" + i + "][qty]", order.OrderItemList[i].Quantity.ToString()); //paramsData.Add("products[" + i + "][product_name]", RefProductName); //paramsData.Add("products[" + i + "][qty]", RefProductQuantity.ToString()); ////paramsData.Add("products[" + i + "][price]",(order.OrderItemList[i].SalesUnitPrice + order.OrderItemList[i].ChangeAmount).ToString()); productSku += "&products[" + i + "][product_sku]=" + product.ErpCode; productSku += "&products[" + i + "][supplier_code]="; productSku += "&products[" + i + "][product_name]=" + order.OrderItemList[i].ProductName; productSku += "&products[" + i + "][qty]=" + RefProductQuantity; decimal amount = Math.Round(((order.OrderItemList[i].SalesAmount + order.OrderItemList[i].ChangeAmount) / order.OrderItemList[i].Quantity), 4); productSku += "&products[" + i + "][price]=" + amount; //paramsData.Add("products[" + i + "][price]", amount.ToString()); //order.OrderItemList[i].SalesAmount+order.OrderItemList[i].ChangeAmount=(order.OrderItemList[i].SalesUnitPrice*order.OrderItemList[i].Quantity) => //order.OrderItemList[i].SalesUnitPrice=(order.OrderItemList[i].SalesAmount + order.OrderItemList[i].ChangeAmount) / order.OrderItemList[i].Quantity } //2016-10-28 18:39 临时处理报错问题 if (!string.IsNullOrWhiteSpace(error)) { result.Message = this.Code + ":商品编号(" + error.TrimEnd(',') + ")在库存中找不到,无法获取SKU,请入库。"; return(result); } paramsData.Add("address_remark", ""); paramsData.Add("products", "products"); paramsData.Add("card_no", order.ReceiveAddress.IDCardNo); paramsData.Add("card_type", "01"); paramsData.Add("currency_code", "RMB"); paramsData.Add("customize_category", ""); paramsData.Add("express_method", "1"); paramsData.Add("tracking_number", ""); paramsData.Add("inter_tracking_number", ""); paramsData.Add("note", ""); paramsData.Add("freight", order.FreightAmount.ToString()); paramsData.Add("gross_weight", grossWeight.ToString()); paramsData.Add("net_weight", netWeight.ToString()); paramsData.Add("is_valuation", "0"); paramsData.Add("valuation_fee", order.TaxFee.ToString("0.00")); paramsData.Add("valuation_value", order.OrderAmount.ToString("0.00")); paramsData.Add("order_time", CreateTimeStamp(order.CreateDate).ToString()); paramsData.Add("pay_company", "易宝支付有限公司"); paramsData.Add("pay_company_no", config.CIECode);// 信营商检企业备案号 paramsData.Add("pay_no", recVoucher.VoucherItems.FirstOrDefault().VoucherNo); paramsData.Add("receiver_city_id", receiverCity.AreaCode); paramsData.Add("receiver_district_id", receiverDistrict.AreaCode); paramsData.Add("receiver_name", order.ReceiveAddress.Name); //paramsData.Add("receiver_postcode", order.ReceiveAddress.ZipCode); paramsData.Add("receiver_postcode", "000000");// 无邮政编码,默认六个零 paramsData.Add("receiver_province_id", receiverProvince.AreaCode); paramsData.Add("receiver_fax", receiverProvince.AreaCode); paramsData.Add("receiver_tel", order.ReceiveAddress.MobilePhoneNumber); paramsData.Add("receiver_tel2", order.ReceiveAddress.PhoneNumber); paramsData.Add("reference_no", onlinePayment.BusinessOrderSysNo); paramsData.Add("receiver_address", order.ReceiveAddress.StreetAddress); paramsData.Add("shipper_city", shipperCity.AreaName); paramsData.Add("shipper_country", "CN"); //paramsData.Add("shipper_country", "HK"); paramsData.Add("shipper_name", !string.IsNullOrWhiteSpace(warehouse.BackWarehouseName) ? warehouse.BackWarehouseName : dealer.ErpName); paramsData.Add("sm_code", _deliveryType); paramsData.Add("tax_amount", order.TaxFee.ToString()); paramsData.Add("total_amount", order.OrderAmount.ToString()); paramsData.Add("total_product_amount", (order.ProductAmount + order.ProductChangeAmount).ToString()); //paramsData.Add("wrap_type", "2C1"); paramsData.Add("wrap_type", "4M"); paramsData.Add("warehouse_id", warehouse.LogisWarehouseCode);//广州白云 paramsData.Add("shipper_tel", string.IsNullOrWhiteSpace(dealer.MobilePhoneNumber) ? dealer.PhoneNumber : dealer.MobilePhoneNumber); paramsData.Add("shipper_address", warehouse.StreetAddress); string postData = InitParams(paramsData); string timerstamp = CreateTimeStamp(); //postData += Key + timerstamp; postData = postData.Replace("&products=products", productSku + supplierCode + productName + qty + price); string responseStr = GetResponse(url, postData, timerstamp, Key); result = GetResult(JObject.Parse(responseStr), result); var soOrderSyncLogisticsLog = new SoOrderSyncLogisticsLog(); soOrderSyncLogisticsLog.OrderSysNo = orderSysno; soOrderSyncLogisticsLog.Code = (int)this.Code; soOrderSyncLogisticsLog.LastUpdateDate = (DateTime)System.Data.SqlTypes.SqlDateTime.MinValue; soOrderSyncLogisticsLog.StatusCode = ""; soOrderSyncLogisticsLog.StatusMsg = ""; soOrderSyncLogisticsLog.Packets = postData; soOrderSyncLogisticsLog.ReceiptContent = responseStr; if (result.Status == true) { soOrderSyncLogisticsLog.LastUpdateBy = 0; soOrderSyncLogisticsLog.LogisticsOrderId = JObject.Parse(responseStr)["data"]["order_sn"].ToString(); soOrderSyncLogisticsLog.CreateDate = DateTime.Now; soOrderSyncLogisticsLog.CreatedBy = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo; SoOrderSyncLogisticsLogBo.Instance.Insert(soOrderSyncLogisticsLog); BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)Hyt.Model.WorkflowStatus.OrderStatus.跨境物流推送状态.已推送, 3, orderSysno); } } catch (Exception ex) { result.Message = "向" + this.Code + "物流推送订单报错:" + ex.StackTrace; return(result); } return(result); }
/// <summary> /// 查询订单物流信息 /// </summary> /// <param name="orderSysNo">订单号</param> /// <returns></returns> /// <remarks>2016-04-09 陈海裕 创建</remarks> public override Result <string> GetLogisticsTracking(int orderSysNo) { Result <string> result = new Result <string>(); result.Status = false; result.StatusCode = 0; result.Message = "接口调用失败"; string url = RequestUrl + "order/tracking"; if (orderSysNo <= 0) { return(result); } var orderInfo = BLL.Order.SoOrderBo.Instance.GetEntity(orderSysNo); ParaOnlinePaymentFilter filter = new ParaOnlinePaymentFilter(); filter.OrderSysNo = orderSysNo; var onlinePayment = BLL.Finance.FinanceBo.Instance.GetOnlinePayments(filter).Rows.Where(o => o.Status == 1).FirstOrDefault(); if (onlinePayment == null) { result.Message = "订单不存在在线支付记录"; return(result); } try { Dictionary <string, string> paramsData = new Dictionary <string, string>(); paramsData.Add("reference_no", onlinePayment.BusinessOrderSysNo); paramsData.Add("type", "reference_no"); string responseStr = GetResponse(url, InitParams(paramsData)); var jsonResult = JObject.Parse(responseStr); if (jsonResult.Property("state") != null && jsonResult["state"].ToString() == "True") { result.Status = true; result.StatusCode = 1; result.Message = "接口调用成功"; #region 查询订单 url = RequestUrl + "order/view"; responseStr = GetResponse(url, InitParams(paramsData)); var _jsonResult = JObject.Parse(responseStr); if (_jsonResult.Property("state") != null && _jsonResult["state"].ToString().ToLower() == "true") { string tracking_number = _jsonResult["data"]["tracking_number"].ToString(); if (tracking_number != "" && orderInfo.CBLogisticsSendStatus != (int)Hyt.Model.WorkflowStatus.OrderStatus.跨境物流推送状态.成功) { if (orderInfo.Status == (int)OrderStatus.销售单状态.待创建出库单) { //BLL.Order.SoOrderBo.Instance.Ship(orderSysNo,tracking_number); } //BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)Hyt.Model.WorkflowStatus.OrderStatus.跨境物流推送状态.成功, 3, orderSysNo); } else { result.Status = false; result.Message = "等待友信达发货,请稍后再试!"; } } else { result.Status = false; result.Message = _jsonResult["message"].ToString(); } #endregion result.Status = true; result.Message = "接口调用成功"; result.StatusCode = 10; result.Data = jsonResult["data"].ToString(); } else { result.Message += jsonResult["message"].ToString(); } return(result); } catch (Exception ex) { result.Message = "查询订单物流状态报错:" + ex.StackTrace; return(result); } }
/// <summary> /// 海关报关 /// </summary> /// <returns></returns> /// <remarks>2016-12-26 周 创建</remarks> public static Result ApplyToCustoms(SoOrder order) { Result result = new Result() { Status = false }; try { if (order != null) { var ehkingMerchantId = EhkingMerhantId; var ehkingKey = EhkingKey; var warehouse = BLL.Warehouse.WhWarehouseBo.Instance.GetWarehouse(order.DefaultWarehouseSysNo); if (warehouse != null && warehouse.WarehouseType == (int)Model.WorkflowStatus.WarehouseStatus.仓库类型.门店) { var dealer = BLL.Stores.StoresBo.Instance.GetStoreByWarehouseId(warehouse.SysNo); if (dealer != null) { var dealerPayType = BLL.Stores.StoresBo.Instance.GetStorePayType(dealer.SysNo); if (!string.IsNullOrWhiteSpace(dealerPayType.AppKey) && !string.IsNullOrWhiteSpace(dealerPayType.AppSecret) && dealerPayType.PaymentTypeSysNo == (int)Model.CommonEnum.PayCode.易宝) { ehkingMerchantId = dealerPayType.AppKey; ehkingKey = dealerPayType.AppSecret; } } } var onlinePaymentFilter = new ParaOnlinePaymentFilter() { OrderSysNo = order.SysNo, Id = 1 }; var onlinePayments = Hyt.BLL.Finance.FinanceBo.Instance.GetOnlinePayments(onlinePaymentFilter).Rows; var receiveAddress = Hyt.BLL.Order.SoOrderBo.Instance.GetOrderReceiveAddress(order.ReceiveAddressSysNo); string merchantId = ehkingMerchantId; //商户号 string paySerialNumber = onlinePayments.First().VoucherNo; //支付流水号 string notifyUrl = "http://admin.gaopin999.com/Account/NotifyReceiptCip"; //支付成功后易汇金支付会向该地址发送两次成功通知,该地址可以带参数 string nodeAuthorizationURL = EhkingNodeAuthorizationUrl; string keyValue = ehkingKey; string amount = "0"; StringBuilder sbHmac = new StringBuilder(); sbHmac.Append(merchantId); sbHmac.Append(paySerialNumber); sbHmac.Append(notifyUrl); amount = (order.OrderAmount * 100).ToString("F0"); sbHmac.Append(receiveAddress.Name); //用户姓名 sbHmac.Append(receiveAddress.IDCardNo); //证件号码 sbHmac.Append(receiveAddress.MobilePhoneNumber); //手机号码 sbHmac.Append(CustomsChannel); //海关通道 sbHmac.Append(ciqCode); //国检组织代码 sbHmac.Append(amount); //支付金额,单位:分 sbHmac.Append(commerceCode); //国检备案号 sbHmac.Append(commerceName); //国检组织代码 string hmac = Digest.HmacSign(sbHmac.ToString(), keyValue); HttpClient client = new HttpClient(nodeAuthorizationURL); string data = "{\"merchantId\":\"" + merchantId + "\",\"paySerialNumber\":\"" + paySerialNumber + "\",\"notifyUrl\":\"" + notifyUrl + "\"" + ",\"payer\": {" + "\"payerName\": \"" + receiveAddress.Name + "\"," + "\"idNum\": \"" + receiveAddress.IDCardNo + "\"," + "\"phoneNum\": \"" + receiveAddress.MobilePhoneNumber + "\"" + "}" + ",\"ciqInfos\":[{\"ciqChannel\":\"" + CustomsChannel + "\",\"ciqCode\":\"" + ciqCode + "\",\"amount\":\"" + amount + "\",\"commerceCode\":\"" + commerceCode + "\",\"commerceName\":\"" + commerceName + "\"}],\"hmac\":\"" + hmac + "\"}"; string responsestr = client.Post(data); BLL.Log.LocalLogBo.Instance.Write("提交的数据:" + data + ",-------返回数据:" + responsestr, "EhkingCipLog"); var back = JObject.Parse(responsestr); if (back["status"].ToString() == "SUCCESS") { result.Message = "提交成功!"; result.Status = true; //更新订单支付报关状态为处理中 Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付申报国检状态.处理中, 4, order.SysNo); BLL.Log.SysLog.Instance.Info(LogStatus.系统日志来源.后台, "订单编号:" + order.SysNo + ",支付信息报检提交成功!", LogStatus.系统日志目标类型.订单支付申报国检, order.SysNo, 0); } else if (back["status"].ToString() == "FAILED") { result.Message = "提交失败!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCipERRORLog"); } else if (back["status"].ToString() == "ERROR") { if (back["error"].ToString() == "exception.record.exists") { //Hyt.BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)OrderStatus.支付申报国检状态.处理中, 4, order.SysNo); result = CustomsQuery(order.SysNo); return(result); } else { result.Message = "提交失败,错误代码:" + back["error"].ToString(); } BLL.Log.LocalLogBo.Instance.Write("提交失败!" + responsestr, "EhkingCipERRORLog"); result.Status = false; } else { result.Message = "其他异常!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("其他异常!" + responsestr, "EhkingCipLog"); } } } catch (Exception ex) { result.Message = "报错!"; result.Status = false; BLL.Log.LocalLogBo.Instance.Write("报错!" + ex.Message, "EhkingCustomsLog"); } return(result); }