zoukankan      html  css  js  c++  java
  • .Net Core 查询物流信息

    因为疫情的影响,每天只能待在家里。鉴于一个多月没有写博客,今天就写一篇吧!

    之前做过一个商品购物小程序的后台,里面有一个查询物流信息的功能,当时也是踩了几个坑。今天再写一个Demo,就把代码和步骤分享给大家。水平有限,但是希望能够帮到各位同学。

    首先,毋庸置疑,肯定要借助第三方的api。这里的话选取的是快递100平台,登录快递100官网:

    地址:https://sso.kuaidi100.com/sso/authorize.do

    登陆后选择接口(API)下的接口申请

     我当时选择的是企业版

     然后选择立即开通

    把信息填好后提交审核,好像要等待一会儿,之后会有消息提醒

     之后会给我们分配key,要把key带到接口中做请求(这个下面会说到)

    点击我的信息,企业信息,查看我们的key

     如果开通的是企业版的话快递100会免费送我们100次的查询单量

    到这里准备工作就做完了

    接下来就是code部分

    新建一个.net core mvc的项目(这个我就不贴图片做演示了 emm......)

    引用一个NuGet程序包:HttpSender  用于后台发送请求

     新建一个控制器及视图

    Controller中的代码:

            /// <summary>
            /// 查询物流,返回Json
            /// </summary>
            /// <param name="Number">快递单号</param>
            /// <returns></returns>
            public async Task<MessageModel<testDate>> queryInformation(string Number = "")
            {
                string res = string.Empty;
                string msg = string.Empty;
                bool success;
                var requestList = new testDate();
                try
                {
                    if (string.IsNullOrEmpty(Number))
                    {
                        return new MessageModel<testDate>()
                        {
                            msg = "单号为空",
                            success = false
                        };
                    }
                    //将快递单号作为参数请求是那个快递
                    var Response = Sender.Get($"http://www.kuaidi100.com/autonumber/autoComNum?text={Number}");
    
                    Express express = JsonConvert.DeserializeObject<Express>(Response);
    string code = string.Empty;

                      if (express.auto.Any())
                          code = express.auto[0].comCode;
                      else
                          goto action;

                     /* //参数
                     String param = "{"com":"","num":"","from":"","to":""}";
                     //反序列化
                     Param p = JsonConvert.DeserializeObject<Param>(param);*/
                    //string param = string.Empty;
                    Param p = new Param();
                    p.com = code;
                    p.num = Number;
                    //序列化
                    var param = JsonConvert.SerializeObject(p);
    #region 你的customer与key值 String customer
    = ""; String key = "";
    #endregion MD5CryptoServiceProvider md5
    = new MD5CryptoServiceProvider();
    //将参数转为字节数组
    byte[] InBytes = Encoding.GetEncoding("UTF-8").GetBytes(param + key + customer);
    #region 加密
    byte[] OutBytes = md5.ComputeHash(InBytes); string OutString = ""; for (int i = 0; i < OutBytes.Length; i++) { OutString += OutBytes[i].ToString("x2"); } String sign = OutString.ToUpper();
    #endregion //带入参数,查询物流信息 res
    = Sender.Post("http://poll.kuaidi100.com/poll/query.do", $"customer={customer}&sign={sign}&param={param}");
    /*这里会返回多个参数字段,我只选取了data部分
    {
         "message":"",
         "nu":"",
         "ischeck":"",
         "condition":"",
         "com":"",
         "status":"",
         "state":"",
         "data":[{}]
    }
    */ msg
    = "物流信息已获取"; success = true; var list = JsonConvert.DeserializeObject<ResponseData>(res); if (list.data.Any()) { var rList = new List<HttpData>(); list.data.ForEach((m) => { rList.Add(new HttpData { createDate = m.time, jobName = m.ftime, jobOther = m.context }); }); requestList = new testDate() { data = rList }; } } catch (Exception) { msg = "单号有误"; success = false; }         action: return new MessageModel<testDate> { msg = msg, success = success, response = requestList }; }

    Model中我新建了几个类:

     public class Express
     {
         public string comCode { get; set; }
         public string num { get; set; }
         public List<single> auto { get; set; }
     }
    
     public class MessageModel<T>
     {
         public bool success { get; set; } = false;
         public string msg { get; set; } = "请求异常";
         public T response { get; set; }  
    }
    /// <summary> /// 物流信息参数字段 /// </summary> public class Param { public string com { get; set; } public string num { get; set; } public string from { get; set; } public string to { get; set; } } public class data { public string time { get; set; } public string ftime { get; set; } public string context { get; set; } } public class single { public string comCode { get; set; } public string id { get; set; } public string noCount { get; set; } public string noPre { get; set; } public string startTime { get; set; } } public class testDate { public List<HttpData> data { get; set; } } public class HttpData { public string createDate { get; set; } public string jobName { get; set; } public string jobOther { get; set; } }

    前端的展示我在网上找了一个插件

    @{
        Layout = null;
    }
    
    <!DOCTYPE html>
    
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
        <link rel="stylesheet" type="text/css" href="cssflowplugin.css" />
        <script type="text/javascript" src="https://code.jquery.com/jquery-latest.min.js"></script>
        <script type="text/javascript" src="jsflowplugin.min.js"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                $("#btn").click(function () {
                    debugger;
                    var list = {};
                    $.ajax({
                        url: "/Logistics/queryInformation",
                        datetype: JSON,
                        data: "Number=" + $("#Num").val(),
                        async: false,
                        success: function (result) {
                            debugger;
                            if (result.response.data == null)
                                alert("未查询出任何结果!");
                            else
                                list = result.response;
                        }
                    });
                    $(".flowtest").empty();
                    var opt = {
                        "jsonDate": list,//json数据
                        "imgSrcStart": "img/f1.png",//最新流程节点图片(第一个节点)
                        "imgSrcOther": "img/f2.png",//其它流程节点图片
                        "imgWidth": "20px",//图片宽  设置第一个图片的宽度
                        "imgHeight": "20px"//图片高  设置第一个图片的高度
                    };
    
                    $(".flowtest").flowplugin(opt);
                });
            });
        </script>
    </head>
    <body>
        <div style="text-align:center;margin-top:100px;margin-bottom:-150px">
            <span style="font-size:20px;">快递单号:</span><input style="border:1px solid black;300px;height:35px" id="Num" />
            <span style="position:relative;top:2px;"><button style="60px;height:36px;font-size:20px;border:1px solid black" id="btn">查询</button></span>
        </div>
        <div style="height:270px;"></div>
    
        <!--流程展示区 start-->
        <div class="flowtest"></div>
        <!--流程展示区 start-->
    
    
    </body>
    </html>

    前端效果展示:

    代码我已上传到我的github,有需要的同学可以下载下来看一下

    https://github.com/Davenever/logistics.git

     最后给大家拜个晚年,新年快乐,大吉大利!

    Grinning Face with Smiling Eyes

  • 相关阅读:
    Linux上将文件夹复制到指令目录
    将PC版网页转为手机端自适应网页
    WCF初探-18:WCF数据协定之KnownType
    WCF初探-17:WCF数据协定之等效性
    WCF初探-16:WCF数据协定之基础知识
    WCF初探-15:WCF操作协定
    2018数学二21题解法分析
    柯西不等式:简单常考形式
    等价、合同、相似、正交变换;二次型,正定,惯性指数
    高数狄利克雷收敛条件(傅里叶)
  • 原文地址:https://www.cnblogs.com/zhangnever/p/11912662.html
Copyright © 2011-2022 走看看