.netcore 写快递100的快递物流信息查询接口的实现

快递100的物流信息查询接口,官方提供了一些demo;还好官方提供的代码是.netcore版本写的,不过写的有点low;根据官方提供的代码,我按照.netcore 的风格重构了代码;核心代码如下:

/// <summary>
    /// 沐雪微淘快递100帮助类.
    /// </summary>
    public class KuaiDi100Helper
    {
        private ILogger _logger;
        private MuXueConfigHelper _configHelper;
        HttpClient _client;

        /// <summary>
        /// 快递100帮助类
        /// </summary>
        /// <param name="logger"></param>
        /// <param name="configHelper"></param>
        public KuaiDi100Helper(ILogger<KuaiDi100Helper> logger, HttpClient client, MuXueConfigHelper configHelper)
        {
            _configHelper = configHelper;
            _logger = logger;
            _client = client;
        }

        /// <summary>
        /// 实时快递查询接口
        /// </summary>
        /// <param name="tenant_id"></param>
        /// <param name="shop_code"></param>
        /// <param name="com">查询的快递公司的编码, 一律用小写字母</param>
        /// <param name="num">查询的快递单号, 单号的最大长度是32个字符</param>
        /// <param name="phone">收、寄件人的电话号码(手机和固定电话均可,只能填写一个,顺丰单号必填,其他快递公司选填。如座机号码有分机号,分机号无需上传。)</param>
        /// <returns></returns>
        public async Task<QueryTackResult> QueryTrack(long tenant_id, string shop_code,string com,string num,string phone="")
        {
            QueryTackResult result = new QueryTackResult();
            try
            {

                TenantConfig config = await _configHelper.GetTenantAllAsync(tenant_id, shop_code);

                QueryTrackParam queryTrackParam = new QueryTrackParam();
                if (com== "shunfeng")
                {
                      queryTrackParam = new QueryTrackParam()
                    {
                        com = com,
                        num = num,
                        phone = phone
                    };
                }
                else
                {
                      queryTrackParam = new QueryTrackParam()
                    {
                        com = com,
                        num = num,
                    };
                }

                QueryTrackReq query = new QueryTrackReq()
                {
                    customer = config.KuaiDi100CustomerID,
                    sign = SignUtils.GetMD5(queryTrackParam.ToString() + config.KuaiDi100Key + config.KuaiDi100CustomerID),
                    param = queryTrackParam
                };
                var requestParam = ObjectToDictionaryUtils.ObjectToMap(query);
                if (requestParam == null)
                {
                    return null;
                }

                 result = await HttpClientHelper.PostFormAsync<QueryTackResult>(_client, ApiInfoConstant.QUERY_URL, requestParam);

            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"快递100实时快递查询接口异常:{ex.Message}");
                return null;
            }
            return result;
        }

    }

上面的代码一眼看,就知道必须要使用依赖注入;我们看到 在构造函数里使用了HttpClient _client    这个东西;(因为要调用快递100的接口),

我们在startup里接着写:

 services.AddScoped<KuaiDi100Helper>();

如上代码应该是最常用的注册方法;结果报错,错误信息如下:

System.AggregateException:“Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: MuXue.WeTao.Mall.Core.kuaidi100.KuaiDi100Helper Lifetime: Scoped ImplementationType: MuXue.WeTao.Mall.Core.kuaidi100.KuaiDi100Helper': Unable to resolve service for type 'System.Net.Http.HttpClient' while attempting to activate 'MuXue.WeTao.Mall.Core.kuaidi100.KuaiDi100Helper'.)”
 
 
InvalidOperationException: Unable to resolve service for type 'System.Net.Http.HttpClient' while attempting to activate 'MuXue.WeTao.Mall.Core.kuaidi100.KuaiDi100Helper'.

根据错误信息看,应该是httpclient出了问题了;找了很久才找到解决方法,修改startup里的注册方法

services.AddHttpClient<KuaiDi100Helper>(); //这样注入

这样就没问题了。

到此这篇关于.netcore 写快递100的快递物流信息查询接口的实现的文章就介绍到这了,更多相关.netcore 快递查询接口内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • .Net Core如何对MongoDB执行多条件查询

    以前项目基本上全部使用MySQL数据库, 最近项目排期空出了一点时间leader决定把日志模块迁移到插入/查询性能更好的MongoDB上. 多条件查询的写法着实费了些功夫, 撰文记录一下. 一.准备工作 1. 安装过程, 不赘述了 2. 添加ReferencePackage dotnet add package mongodb.bson dotnet add package mongodb.driver 3. appsetting.json添加连接配置 "MongodbHost": {

  • Asp.Net Core 调用第三方Open API查询物流数据的示例

    在我们的业务中不可避免要与第三方的系统进行交互,调用他们提供的API来获取相应的数据,那么对于这样的情况该怎样进行处理呢?下面就结合自己对接跨越速运接口来获取一个发运单完整的物流信息为例来说明如何在Asp.Net Core中通过代码实现.当然在他们的官方网站上面会给出具体的API调用方式以及参数格式,作为调用方只需要根据相应规则来进行编码即可,下面以我们查询某一个具体的发运单的物流信息为例来进行说明. 下面以一个查询路由详细信息为例来进行说明.当前接口主要包括:1 概述. 2 系统参数. 3 

  • .netcore 写快递100的快递物流信息查询接口的实现

    快递100的物流信息查询接口,官方提供了一些demo;还好官方提供的代码是.netcore版本写的,不过写的有点low;根据官方提供的代码,我按照.netcore 的风格重构了代码:核心代码如下: /// <summary> /// 沐雪微淘快递100帮助类. /// </summary> public class KuaiDi100Helper { private ILogger _logger; private MuXueConfigHelper _configHelper;

  • php快递单号查询接口使用示例

    通过本接口可以查询圆通快递.申通快递.ems快递.韵达快递等快递单号查询信息,无需其他额外开发,非常方便首先到www.aikuaidi.cn上注册个账号,使用key! 复制代码 代码如下: <?php/** * 查询物流信息 */define('IN_ECS', true); require(dirname(__FILE__) . '/includes/init.php'); if ($id = intval($_REQUEST['id'])) {    $sql_select = 'SELEC

  • WIFI万能钥匙密码查询接口实例

    不废话了,直接给大家贴代码了 <?php //some code from http://www.wooyun.org/bugs/wooyun-2015-099268 $bssid = "c8:3a:35:fa:b8:80" ; $ssid = "Podinns2F03" ; if (isset( $bssid ) && isset( $ssid )){ //update salt $ret = request( $bssid , $ssid

  • 让JPA的Query查询接口返回Map对象的方法

    在JPA 2.0 中我们可以使用entityManager.createNativeQuery()来执行原生的SQL语句. 但当我们查询结果没有对应实体类时,query.getResultList()返回的是一个List<Object[]>.也就是说每行的数据被作为一个对象数组返回. 常见的用法是这样的: public void testNativeQuery(){ Query query = entityManager.createNativeQuery("select id, n

  • java后台实现支付宝支付接口和支付宝订单查询接口(前端为APP)

    最近项目APP需要接入微信.支付宝支付功能,在分配开发任务时,听说微信支付接口比支付宝支付接口要难实现,由于我开发经验不是那么丰富(现工作经验1年半)且未接触过支付接口开发,组里刚好又有支付接口的老司机,所以很自然把简单的支付宝接口开发任务交给了我,看来开发组的组长还是很好人的嘛.....,废话就不多说了,我们开始吧! 实现支付宝接口详细过程 1.去支付宝官网申请公司企业账号并开通一个应用,在应用里签约APP支付功能 具体的申请截图步骤,在这里我就不详细说了,因为这不是文章的重点,可参考支付宝官

  • Django如何开发简单的查询接口详解

    前言 Django处理json也是一把好手,有时候在工作中各个部门都会提供自己的相关接口,但是信息也只是单方的信息,这时候需要运维将各个部门的信息进行集成,统一出一个查询接口或页面,方便其他部门同事使用,接下来就介绍一下Django如果操作json. 首先介绍一下通过url获取json的方法: import urllib2 我们的需求是做一个集成的信息查询系统,包括简单的IP信息查询(省份运营商等),以及设备信息(如果是登记在资产管理库中的),还有IP归属(是否是客户源站IP),以及是否为其他部

  • 免费手机号码归属地API查询接口和PHP使用实例分享

    免费手机号码归属地API查询接口和PHP使用实例分享 最近在做全国性的行业分类信息网站,需要用到手机号归属地显示功能,于是就穿梭于各大权威站点之间偷来了API的接口地址. 分享出来,大家可以用到就拿去呵. 一.淘宝网API 复制代码 代码如下: API地址: http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443 参数: tel:手机号码 返回:JSON 二.拍拍API 复制代码 代码如下: API地址: http

  • Google PR查询接口checksum新算法第1/2页

    取而代之的是一大段"In your email, please send us the entire code displayed below"之类的Google terms_of_service错误提示信息.看来是原先的接口已经失效了. 但我装在Firefox工具栏的扩展插件SearchStatus仍然能够正常解析出每个受访页的PR值,找到 SearchStatus 的插件包解开来看源码,果然是使用了不一样的验证码生成算法,在原先的 checksum 生成之后,还需要再进行一次计算,

  • C#使用有道ip地址查询接口方法实例详解

    本文实例讲述了C#使用有道ip地址查询接口方法.分享给大家供大家参考.具体实现方法如下: #region 读取http://www.yodao.com接口IP地址 /// <summary> /// 读取http://www.yodao.com接口IP地址 /// </summary> public static string GetstringIpAddress(string strIP)//strIP为IP { string sURL = "http://www.yo

  • Mybatis各种查询接口使用详解

    目录 一.查询一个实体类对象 二.查询一个list集合 三.查询单个数据 四.查询一个数据为map集合 五.查询多条数据为map集合 一.查询一个实体类对象 ①创建SelectMapper接口 若sql语句查询的结果为多条时,一定不能以实现类类型作为方法的返回值 否则会抛出异常TooManyResultsException 若sql语句查询的结果为1条时,此时可以使用实体类类型或list集合类型作为方法的返回值 /** * 根据id查询用户信息 * @param id * @return */

随机推荐