/// <summary> /// 查询订单支付状态 /// </summary> /// <returns></returns> /// <remarks>2016-12-20 杨浩 创建</remarks> public override Result QueryOrderState(string orderId) { string url = "https://api.mch.weixin.qq.com/pay/orderquery"; var result = base.QueryOrderState(orderId); string out_trade_no = ""; string transaction_id = "5555"; //检测必填参数 if (out_trade_no == "" && transaction_id == "") { result.Message = "订单查询接口中,out_trade_no、transaction_id至少填一个!"; return(result); } var values = new SortedDictionary <string, object>(); values["transaction_id"] = transaction_id; values["appid"] = payConfig.WxAppid; values["mch_id"] = payConfig.WxMchId; values["nonce_str"] = GenerateNonceStr; //values.Add("out_trade_no", out_trade_no); //values.Add("sign_type", "MD5"); values["sign"] = MakeSign(values); string xml = ToXml(values); var start = DateTime.Now; string response = Hyt.Util.WebUtil.Post(xml, url, false, 3000); var end = DateTime.Now; int timeCost = (int)((end - start).TotalMilliseconds);//获得接口耗时 //将xml格式的数据转化为对象以返回 var xe = new XmlDocumentExtender(); xe.LoadXml(response); string return_code = xe["return_code"].InnerText; string result_code = xe["result_code"].InnerText; if (return_code == "SUCCESS" && result_code == "SUCCESS") { } return(result); }
/// <summary> /// 用户调用该接口可实现自己联系发货(线下物流) /// </summary> /// <param name="param">参数实体</param> /// <param name="auth">授权参数</param> /// <returns>处理结果</returns> /// <reamrks>2017-08-16 杨浩 创建</reamrks> public Result SendDelivery(DeliveryParameters param, AuthorizationParameters auth) { var result = new Result() { Status = true }; var _param = new Dictionary <string, string>(); string sendId = DateTime.Now.ToString("yyyyMMddHHmmss") + new Random().Next(100000, 999999).ToString(); string signStr = "appKey=" + auth.DealerApp.AppKey + "&sendID=" + sendId + "&key=" + auth.DealerApp.AppSecret; string sign = MD5Encrypt(signStr).ToUpper(); var companyArry = param.CompanyCode.Split('_'); string logisticsName = ""; string logisticsCode = companyArry[0]; if (companyArry.Length > 1) { logisticsName = companyArry[1]; } string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; xml += string.Format(@"<HipacPush> <Head> <version>1.0</version> <service>backLogisticNo</service> <sendID>{0}</sendID> <appKey>{1}</appKey> <sign>{2}</sign> </Head> <Body> <Orders> <Order> <orderNum>{3}</orderNum> <LogisticsInfoList> <LogisticsInfo> <logisticsName>{4}</logisticsName> <logisticsNo>{5}</logisticsNo> <logisticsCode>{6}</logisticsCode> </LogisticsInfo> </LogisticsInfoList> </Order> </Orders> </Body> </HipacPush>", sendId, auth.DealerApp.AppKey, sign, param.MallOrderId, logisticsName, param.HytExpressNo, logisticsCode); var xms = new XmlDocumentExtender(); string resultStr = Hyt.Util.WebUtil.PostString(string.Format("http://gw.hipac.cn/pub/{0}04030302/transNotify.do", auth.ShopAccount), xml, "text/xml"); xms.LoadXml(resultStr); /* * * <?xml version="1.0" encoding="UTF-8"?> * <HipacPush> * <Head> * <!-- 版本 默认为1.0 --> * <version>1.0</version> * <!-- 接口名称 --> * <service>backLogisticNo</service> * <!-- 推送报文唯一值YYYYDDMMHHmmss+6位随机数字 --> * <sendID>20171102152126152072</sendID> * <appKey>XYGS20171020</appKey> * <retCode>SUCCESS</retCode> * <sign>7CBCF21556820EEEF40528A6BF522727</sign> * </Head> * <Body> * <bizCode>SUCCESS</bizCode> * <bizMsg>成功</bizMsg> * <Order> * <!-- 订单编号 --> * <orderNum>YT201710311424931334</orderNum> * </Order> * </Body> * </HipacPush> * */ var order = xms.SelectSingleNode("/HipacPush/Body"); if (order["bizCode"].InnerText.ToUpper() != "SUCCESS") { result.Status = false; result.Message = order["bizMsg"].InnerText; } return(result); }
/// <summary> /// 查询海关订单 /// </summary> /// <param name="orderId">订单编号</param> /// <returns></returns> /// <remarks>2016-8-18 杨浩 重构</remarks> public override Result SearchCustomsOrder(int orderId) { var result = new Result() { Status = true }; try { var resultDic = new Dictionary <int, string>(); var ftp = new FtpUtil(FTPUri, FTPName, FTPPassword); string ftpResponse = ""; #region /* * <?xml version="1.0" encoding="UTF-8"?> * <DocRec> * <Head> * <MessageID><![CDATA[KJDOCREC_KJGGPT2016110315520669308]]></MessageID> * <MessageType><![CDATA[KJDOCREC]]></MessageType> * <Sender><![CDATA[KJGGPT]]></Sender> * <Receiver><![CDATA[GZXINRAO]]></Receiver> * <SendTime><![CDATA[20161103155206]]></SendTime> * <FunctionCode><![CDATA[]]></FunctionCode> * <SignerInfo><![CDATA[]]></SignerInfo> * <Version><![CDATA[2.0]]></Version> * </Head> * <Declaration> * <OrgMessageID><![CDATA[F9F53112-3A28-4912-92EC-BD3085085FC8]]></OrgMessageID> * <OrgMessageType><![CDATA[CEB311Message]]></OrgMessageType> * <OrgSenderID><![CDATA[GZXINRAO]]></OrgSenderID> * <OrgReceiverID><![CDATA[KJCUSTOM]]></OrgReceiverID> * <OrgRecTime><![CDATA[20161103155206]]></OrgRecTime> * <RespondBy>01</RespondBy> * <RespondStatus><![CDATA[F]]></RespondStatus> * <RespondNotes><![CDATA[1.4.2.业务验证失败: * 1.广州海关单号【501_20161029101958】重复申报... * ]]></RespondNotes> * <Status>F</Status> * <Notes><![CDATA[1.4.2.业务验证失败: * 1.广州海关单号【501_20161029101958】重复申报... * ]]></Notes> * </Declaration> * </DocRec> * */ #endregion // 获取文件列表 //string[] fileList = ftp.GetFileList(FTPUri + "cebout/"); string[] fileList = ftp.GetFileList(FTPUri + FolderOut); if (fileList != null && fileList.Length > 0) { foreach (string fileName in fileList) { //Stream stream = ftp.FileStream(FTPUri + "cebout/" + fileName, ref ftpResponse); var stream = ftp.FileStream(FTPUri + FolderOut + fileName, ref ftpResponse); #region 更新订单海关推送状态 string xmlData = ""; stream.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(stream)) { xmlData = reader.ReadToEnd(); } if (!string.IsNullOrEmpty(xmlData)) { int id = 0; var customsOrderLog = new SoCustomsOrderLog(); var xml = new XmlDocumentExtender(); xml.LoadXml(xmlData); var _xml = xml["CEB312Message"]; if (_xml != null) { var orderReturn = _xml["OrderReturn"]; //订单编号 if (!int.TryParse(orderReturn["orderNo"].InnerText.Split('_')[0], out id)) { continue; } var customsLogInfo = BLL.Order.SoCustomsOrderLogBo.Instance.GetCustomsOrderLogInfo(id, (int)Code); int status = -999; switch (orderReturn["returnStatus"].InnerText) { case "": // 电子口岸申报中 result.Message = "电子口岸申报中!"; status = (int)OrderStatus.海关报关状态.处理中; break; case "2": // 发送海关成功 status = (int)OrderStatus.海关报关状态.处理中; result.Message = orderReturn["returnInfo"].InnerText; if (customsLogInfo.StatusCode == "3") { status = (int)OrderStatus.海关报关状态.作废; result.Message = orderReturn["returnInfo"].InnerText; } break; case "4": // 发送海关失败 case "100": // 海关退单 status = (int)OrderStatus.海关报关状态.失败; result.Message = "海关退单!"; break; case "120": // 海关入库 status = (int)OrderStatus.海关报关状态.成功; result.Message = "海关入库成功!"; break; default: status = (int)OrderStatus.海关报关状态.失败; result.Message = "海关推送失败!"; break; } customsOrderLog.StatusCode = ""; //customsOrderLog.StatusCode = orderReturn["returnStatus"].InnerText; customsOrderLog.StatusMsg = orderReturn["returnInfo"].InnerText; if (resultDic.ContainsKey(orderId)) { resultDic[orderId] = customsOrderLog.StatusMsg; } else { resultDic.Add(orderId, customsOrderLog.StatusMsg); } BLL.Order.SoOrderBo.Instance.UpdateOrderApiStatus((int)status, 2, id); if (customsLogInfo != null) { customsOrderLog.LastUpdateBy = 0; if (BLL.Authentication.AdminAuthenticationBo.Instance.IsLogin) { customsOrderLog.LastUpdateBy = BLL.Authentication.AdminAuthenticationBo.Instance.Current.Base.SysNo; } customsOrderLog.LastUpdateDate = DateTime.Now; customsOrderLog.ReceiptContent = xmlData; customsOrderLog.SysNo = customsLogInfo.SysNo; customsOrderLog.FileName = customsLogInfo.FileName; customsOrderLog.Packets = customsLogInfo.Packets; BLL.Order.SoCustomsOrderLogBo.Instance.UpdateCustomsOrderLog(customsOrderLog); } } else { _xml = xml["DocRec"]; if (_xml != null) { var status = _xml["Declaration"]["Status"].InnerText; } } } ftp.DeleteFile(FTPUri + FolderOut + fileName);//删除回执文件 #endregion } if (resultDic.ContainsKey(orderId)) { result.Message = resultDic[orderId]; } else { result.Message = "暂无回执"; } } else { var customsLogInfo = BLL.Order.SoCustomsOrderLogBo.Instance.GetCustomsOrderLogInfo(orderId, (int)Code); result.Status = false; result.Message = customsLogInfo != null?customsLogInfo.StatusMsg:"没有找到回执文件,请稍后重试!"; } } catch (Exception ex) { result.Status = false; result.Message = ex.Message; } return(result); }