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

  • 相关阅读:
    LeetCode 121. Best Time to Buy and Sell Stock
    LeetCode 221. Maximal Square
    LeetCode 152. Maximum Product Subarray
    LeetCode 53. Maximum Subarray
    LeetCode 91. Decode Ways
    LeetCode 64. Minimum Path Sum
    LeetCode 264. Ugly Number II
    LeetCode 263. Ugly Number
    LeetCode 50. Pow(x, n)
    LeetCode 279. Perfect Squares
  • 原文地址:https://www.cnblogs.com/zhangnever/p/11912662.html
Copyright © 2011-2022 走看看