C# 请求联运通接口下订单

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

1.创建实体类

代码如下(示例):

  //接口配置
    public class DBClass
    {
        public string custNo { get; set; }//客户编号 联运通提供

        public string GeTYDCodeInterfaceAddress { get; set; }//接口地址

        public string Timestamp { get; set; } //请求时间

        public string command { get; set; }//接口编码

        public string appKey { get; set; }  //联运通身份识别码

        public string orderNo { get; set; }//指令单编号 传我们的采购单号 

    }

   public class LYTDataCon
    {
        public string custno { get; set; }//联运通提供的客户客户识别码

        List<items> itemcon = new List<items>();
        public List<items> items
        {
            get { return itemcon; }
            set { itemcon = value; }
        }
    }

    public class items
    {
        //订单编号,我们提交给联运通的采购单号,这里用来做查询参数
        public string orderno { get; set; }

    }

    //提交运单 JSON必填项
    public class PublicType
    {
        public string custNo { get; set; }//
        public string orderNo { get; set; }//
        public string sender { get; set; }//
        public string sendCompany { get; set; }//
        public string senderMobile { get; set; }//
        public string consignee { get; set; }//
        public string receCompany { get; set; }//
        public string consigneeMobile { get; set; }//
        public string endProvince { get; set; }//
        public string endCity { get; set; }//
        public string endArea { get; set; }//
        public string receAddress { get; set; }//
        public string transportType { get; set; }//
        public string serviceType { get; set; }//
        public string sendDate { get; set; }//
        public string isReturn { get; set; }//
    }


  //接口下单返回消息
    public class DBReturnResult
    {

        public string result { get; set; }
        public string reason { get; set; }
        public string resultCode { get; set; }
        public string resultInfo { get; set; }

    }

2.详细处理代码

 private bool SubmitByLYT(string ID)
        {
            //获取数据源
            DataSet ds = GetDataByDB(ID);
            if (ds == null)
            {
                ShowInfoMsgBox("获取运单数据源失败!请确认配送承运商是否:联运通物流有限公司。");
                return false;
            }
            //循环遍历,然后提提交运单,为什么要循环:一个配送单会有多个采购单出库数据,需求是一个采购单对应一个联运通运单号,运单号对应该运单的配送信息。
            DataTable dt = ds.Tables[0];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                //必填数据
                PublicType pt = new PublicType();
                pt.custNo = Convert.ToString(dt.Rows[i]["custNo"]).Trim();
                pt.orderNo = Convert.ToString(dt.Rows[i]["orderNo"]).Trim();
                pt.sender = Convert.ToString(dt.Rows[i]["sender"]).Trim();
                pt.sendCompany = Convert.ToString(dt.Rows[i]["sendCompany"]).Trim();
                pt.senderMobile = Convert.ToString(dt.Rows[i]["senderMobile"]).Trim();
                pt.consignee = Convert.ToString(dt.Rows[i]["consignee"]).Trim();
                pt.receCompany = Convert.ToString(dt.Rows[i]["receCompany"]).Trim();
                pt.consigneeMobile = Convert.ToString(dt.Rows[i]["consigneeMobile"]).Trim();
                pt.endProvince = Convert.ToString(dt.Rows[i]["endProvince"]).Trim();
                pt.endCity = Convert.ToString(dt.Rows[i]["endCity"]).Trim();
                pt.endArea = Convert.ToString(dt.Rows[i]["endArea"]).Trim();
                pt.receAddress = Convert.ToString(dt.Rows[i]["receAddress"]).Trim();
                pt.transportType = Convert.ToString(dt.Rows[i]["transportType"]).Trim();
                pt.serviceType = Convert.ToString(dt.Rows[i]["serviceType"]).Trim();
                pt.sendDate = Convert.ToString(dt.Rows[i]["sendDate"]).Trim();
                pt.isReturn = Convert.ToString(dt.Rows[i]["isReturn"]).Trim();
                //配置参数
                DBClass db = new DBClass();
                db.custNo = Convert.ToString(dt.Rows[i]["custNo"]).Trim();//客户编号 联运通提供
                db.GeTYDCodeInterfaceAddress = Convert.ToString(dt.Rows[i]["GeTYDCodeInterfaceAddress"]).Trim();//接口地址
                db.Timestamp = Convert.ToString(dt.Rows[i]["Timestamp"]).Trim();//请求时间
                db.command = Convert.ToString(dt.Rows[i]["command"]).Trim();//接口编码
                db.appKey = Convert.ToString(dt.Rows[i]["appKey"]).Trim();//联运通身份识别码
                db.orderNo = Convert.ToString(dt.Rows[i]["orderNo"]).Trim();//指令单编号 传我们的采购单号 

                string LYTUrl = Convert.ToString(dt.Rows[i]["GeTYDCodeInterfaceAddress"]).Trim();

                //将数据转换成JSON 后再去MD5加密 和 BASE64
                string jsonParams = JsonConvert.SerializeObject(pt);
                MD5 md5 = new MD5CryptoServiceProvider();
                string digest = Convert.ToBase64String(md5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(jsonParams + db.appKey + db.appKey)));

                //生成请求参数,请求的参数要转码格式化。不转码 + %等字符会过滤掉,导致验证签名失败。
                string postData =
                    "Timestamp=" + System.Web.HttpUtility.UrlEncode(db.Timestamp, Encoding.UTF8) +
                    "&command=" + System.Web.HttpUtility.UrlEncode(db.command, Encoding.UTF8) +
                    "&appKey=" + System.Web.HttpUtility.UrlEncode(db.appKey, Encoding.UTF8) +
                    "&Params=" + System.Web.HttpUtility.UrlEncode(JsonConvert.SerializeObject(pt), Encoding.UTF8) + db.appKey +
                    "&digest=" + System.Web.HttpUtility.UrlEncode(digest, Encoding.UTF8);

                string msg = "";
                if (BaseForm.PostData(clsFunc.pDC.GetDtUser(), GloabParam.Rows[0]["ServerAddr"].ToString(), "LYTXD", LYTUrl, postData, "application/x-www-form-urlencoded;", null, out msg))
                {
                    DBReturnResult backResult = JsonConvert.DeserializeObject<DBReturnResult>(msg);
                    if (backResult == null || backResult.result == "false")
                    {
                        ShowInfoMsgBox("提交联运通失败!" + backResult.reason);
                        return false;
                    }
                    else
                    {
                        // 这里可以直接返回成功消息即可。我的需求需要再请求下单后,根据单号查询运单的一些基本信息,下一篇展示
                        // 请求提交的运单号,返回联运通运单数据,并保存相关字段数据到数据表。
                        //if (SaveResultData( pt.custNo, pt.orderNo, db.Timestamp, db.appKey, "CUSTCHECKTRACKING", LYTUrl))
                        //{
                        //    //SaveDBResultData(ID, backResult);
                        //    //ShowInfoMsgBox("保存成功!");
                        //}
                    }
                }
                else
                {
                    ShowInfoMsgBox("提交失败!" + msg);
                    return false;
                }
            }
            return true;
        }

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值