Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >asp.net 微信分享到朋友圈,分享给朋友接口

asp.net 微信分享到朋友圈,分享给朋友接口

作者头像
全栈程序员站长
发布于 2022-09-01 03:29:34
发布于 2022-09-01 03:29:34
97200
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

微信分享到朋友圈,分享给朋友说明:

转载:http://www.cnblogs.com/ysyn/archive/2015/07/23/4665897.html、

引言:

  工作中开发微信网站,简称微网站。由于微网站的分享内容是系统自动选取的当前网址,客户需要改变分享的内容,即点击屏幕右上角的分享按钮,选择发送给朋友和发送到朋友圈,其中的内容和图片需要自定义。于是查找文档微信JS-SDK说明文档一文和网站众多高手的经验,大体知道了调用的步骤,但是具体如何调用才能成功却是不了解的。经过一番试验,终于成功调用发送朋友和发送到朋友圈两个接口,此处记录调用的具体过程。

步骤一:引用js文件。

在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js

步骤二:通过config接口注入权限验证配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名,见附录1
    jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});

网上众多网友也是这样写的,但是具体如果配却谈之甚少,接下来介绍本文是如何调用的。

debug和appId,都不用说,很简单。

timespan生成签名的时间戳:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
        /// 生成时间戳
        /// 从 1970 年 1 月 1 日 00:00:00 至今的秒数,即当前的时间,且最终需要转换为字符串形式
        /// </summary>
        /// <returns></returns>
        public string getTimestamp()
        {
            TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
            return Convert.ToInt64(ts.TotalSeconds).ToString();
        }

nonceStr生成签名的随机串:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
        /// 生成随机字符串
        /// </summary>
        /// <returns></returns>
        public string getNoncestr()
        {
            Random random = new Random();
            return MD5Util.GetMD5(random.Next(1000).ToString(), "GBK");
        }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
    /// MD5Util 的摘要说明。
    /// </summary>
    public class MD5Util
    {
        public MD5Util()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }

        /** 获取大写的MD5签名结果 */
        public static string GetMD5(string encypStr, string charset)
        {
            string retStr;
            MD5CryptoServiceProvider m5 = new MD5CryptoServiceProvider();

            //创建md5对象
            byte[] inputBye;
            byte[] outputBye;

            //使用GB2312编码方式把字符串转化为字节数组.
            try
            {
                inputBye = Encoding.GetEncoding(charset).GetBytes(encypStr);
            }
            catch (Exception ex)
            {
                inputBye = Encoding.GetEncoding("GB2312").GetBytes(encypStr);
            }
            outputBye = m5.ComputeHash(inputBye);

            retStr = System.BitConverter.ToString(outputBye);
            retStr = retStr.Replace("-", "").ToUpper();
            return retStr;
        }
    }

singature签名的生成比较麻烦。

首先生成获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public string Getaccesstoken()
        {
            string appid = System.Configuration.ConfigurationManager.AppSettings["WXZjAppID"].ToString();
            string secret = System.Configuration.ConfigurationManager.AppSettings["WXZjAppSecret"].ToString();
            string urljson = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
            string strjson = "";
            UTF8Encoding encoding = new UTF8Encoding();
            HttpWebRequest myRequest =
            (HttpWebRequest)WebRequest.Create(urljson);
            myRequest.Method = "GET";
            myRequest.ContentType = "application/x-www-form-urlencoded";
            HttpWebResponse response;
            Stream responseStream;
            StreamReader reader;
            string srcString;
            response = myRequest.GetResponse() as HttpWebResponse;
            responseStream = response.GetResponseStream();
            reader = new System.IO.StreamReader(responseStream, Encoding.UTF8);
            srcString = reader.ReadToEnd();
            reader.Close();
            if (srcString.Contains("access_token"))
            {
                //CommonJsonModel model = new CommonJsonModel(srcString);
                HP.CPS.BLL.WeiXin.CommonJsonModel model = new BLL.WeiXin.CommonJsonModel(srcString);
                strjson = model.GetValue("access_token");
                Session["access_tokenzj"] = strjson;
            }
            return strjson;
        }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class CommonJsonModelAnalyzer
    {
        protected string _GetKey(string rawjson)
        {
            if (string.IsNullOrEmpty(rawjson))
                return rawjson;
            rawjson = rawjson.Trim();
            string[] jsons = rawjson.Split(new char[] { ':' });
            if (jsons.Length < 2)
                return rawjson;
            return jsons[0].Replace("\"", "").Trim();
        }
        protected string _GetValue(string rawjson)
        {
            if (string.IsNullOrEmpty(rawjson))
                return rawjson;
            rawjson = rawjson.Trim();
            string[] jsons = rawjson.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries);
            if (jsons.Length < 2)
                return rawjson;
            StringBuilder builder = new StringBuilder();
            for (int i = 1; i < jsons.Length; i++)
            {
                builder.Append(jsons[i]);
                builder.Append(":");
            }
            if (builder.Length > 0)
                builder.Remove(builder.Length - 1, 1);
            string value = builder.ToString();
            if (value.StartsWith("\""))
                value = value.Substring(1);
            if (value.EndsWith("\""))
                value = value.Substring(0, value.Length - 1);
            return value;
        }
        protected List<string> _GetCollection(string rawjson)
        {
            //[{},{}]
            List<string> list = new List<string>();
            if (string.IsNullOrEmpty(rawjson))
                return list;
            rawjson = rawjson.Trim();
            StringBuilder builder = new StringBuilder();
            int nestlevel = -1;
            int mnestlevel = -1;
            for (int i = 0; i < rawjson.Length; i++)
            {
                if (i == 0)
                    continue;
                else if (i == rawjson.Length - 1)
                    continue;
                char jsonchar = rawjson[i];
                if (jsonchar == '{
    
    ')
                {
                    nestlevel++;
                }
                if (jsonchar == '}')
                {
                    nestlevel--;
                }
                if (jsonchar == '[')
                {
                    mnestlevel++;
                }
                if (jsonchar == ']')
                {
                    mnestlevel--;
                }
                if (jsonchar == ',' && nestlevel == -1 && mnestlevel == -1)
                {
                    list.Add(builder.ToString());
                    builder = new StringBuilder();
                }
                else
                {
                    builder.Append(jsonchar);
                }
            }
            if (builder.Length > 0)
                list.Add(builder.ToString());
            return list;
        }
    }

    public class CommonJsonModel : CommonJsonModelAnalyzer
    {
        private string rawjson;
        private bool isValue = false;
        private bool isModel = false;
        private bool isCollection = false;
        public CommonJsonModel(string rawjson)
        {
            this.rawjson = rawjson;
            if (string.IsNullOrEmpty(rawjson))
                throw new Exception("missing rawjson");
            rawjson = rawjson.Trim();
            if (rawjson.StartsWith("{
    
    "))
            {
                isModel = true;
            }
            else if (rawjson.StartsWith("["))
            {
                isCollection = true;
            }
            else
            {
                isValue = true;
            }
        }
        public string Rawjson
        {
            get { return rawjson; }
        }
        public bool IsValue()
        {
            return isValue;
        }
        public bool IsValue(string key)
        {
            if (!isModel)
                return false;
            if (string.IsNullOrEmpty(key))
                return false;
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);
                if (!model.IsValue())
                    continue;
                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);
                    return submodel.IsValue();
                }
            }
            return false;
        }
        public bool IsModel()
        {
            return isModel;
        }
        public bool IsModel(string key)
        {
            if (!isModel)
                return false;
            if (string.IsNullOrEmpty(key))
                return false;
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);
                if (!model.IsValue())
                    continue;
                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);
                    return submodel.IsModel();
                }
            }
            return false;
        }
        public bool IsCollection()
        {
            return isCollection;
        }
        public bool IsCollection(string key)
        {
            if (!isModel)
                return false;
            if (string.IsNullOrEmpty(key))
                return false;
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);
                if (!model.IsValue())
                    continue;
                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);
                    return submodel.IsCollection();
                }
            }
            return false;
        }

        /// <summary>
        /// 当模型是对象,返回拥有的key
        /// </summary>
        /// <returns></returns>
        public List<string> GetKeys()
        {
            if (!isModel)
                return null;
            List<string> list = new List<string>();
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                string key = new CommonJsonModel(subjson).Key;
                if (!string.IsNullOrEmpty(key))
                    list.Add(key);
            }
            return list;
        }
        /// <summary>
        /// 当模型是对象,key对应是值,则返回key对应的值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public string GetValue(string key)
        {
            if (!isModel)
                return null;
            if (string.IsNullOrEmpty(key))
                return null;
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);
                if (!model.IsValue())
                    continue;
                if (model.Key == key)
                    return model.Value;
            }
            return null;
        }
        /// <summary>
        /// 模型是对象,key对应是对象,返回key对应的对象
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public CommonJsonModel GetModel(string key)
        {
            if (!isModel)
                return null;
            if (string.IsNullOrEmpty(key))
                return null;
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);
                if (!model.IsValue())
                    continue;
                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);
                    if (!submodel.IsModel())
                        return null;
                    else
                        return submodel;
                }
            }
            return null;
        }
        /// <summary>
        /// 模型是对象,key对应是集合,返回集合
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public CommonJsonModel GetCollection(string key)
        {
            if (!isModel)
                return null;
            if (string.IsNullOrEmpty(key))
                return null;
            foreach (string subjson in base._GetCollection(this.rawjson))
            {
                CommonJsonModel model = new CommonJsonModel(subjson);
                if (!model.IsValue())
                    continue;
                if (model.Key == key)
                {
                    CommonJsonModel submodel = new CommonJsonModel(model.Value);
                    if (!submodel.IsCollection())
                        return null;
                    else
                        return submodel;
                }
            }
            return null;
        }
        /// <summary>
        /// 模型是集合,返回自身
        /// </summary>
        /// <returns></returns>
        public List<CommonJsonModel> GetCollection()
        {
            List<CommonJsonModel> list = new List<CommonJsonModel>();
            if (IsValue())
                return list;
            foreach (string subjson in base._GetCollection(rawjson))
            {
                list.Add(new CommonJsonModel(subjson));
            }
            return list;
        }


        /// <summary>
        /// 当模型是值对象,返回key
        /// </summary>
        private string Key
        {
            get
            {
                if (IsValue())
                    return base._GetKey(rawjson);
                return null;
            }
        }
        /// <summary>
        /// 当模型是值对象,返回value
        /// </summary>
        private string Value
        {
            get
            {
                if (!IsValue())
                    return null;
                return base._GetValue(rawjson);
            }
        }
    }

接着获取jsapi_ticket:

用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public string Getjsapi_ticket()
        {
            string accesstoken = (string)Session["access_tokenzj"];
            string urljson = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accesstoken + "&type=jsapi";
            string strjson = "";
            UTF8Encoding encoding = new UTF8Encoding();
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(urljson);
            myRequest.Method = "GET";
            myRequest.ContentType = "application/x-www-form-urlencoded";
            HttpWebResponse response = myRequest.GetResponse() as HttpWebResponse;
            Stream responseStream = response.GetResponseStream();
            StreamReader reader = new System.IO.StreamReader(responseStream, Encoding.UTF8);
            string srcString = reader.ReadToEnd();
            reader.Close();
            if (srcString.Contains("ticket"))
            {
                HP.CPS.BLL.WeiXin.CommonJsonModel model = new BLL.WeiXin.CommonJsonModel(srcString);
                strjson = model.GetValue("ticket");
                Session["ticketzj"] = strjson;
            }

            return strjson;
        }

最后生成signature:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public string Getsignature(string nonceStr, string timespanstr)
        {
            if (Session["access_tokenzj"] == null)
            {
                Getaccesstoken();
            }
            if (Session["ticketzj"] == null)
            {
                Getjsapi_ticket();
            }

            string url = Request.Url.ToString();

            string str = "jsapi_ticket=" + (string)Session["ticketzj"] + "&noncestr=" + nonceStr +
                "&timestamp=" + timespanstr + "&url=" + url;// +"&wxref=mp.weixin.qq.com";
            string singature = SHA1Util.getSha1(str);
            string ss = singature;
            return ss;
        }

View Code

本文调用实例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript">
        wx.config({
            debug: false,
            appId: '<%=corpid %>',
            timestamp: <%=timestamp%>,
            nonceStr: '<%=nonceStr%>',
            signature: '<%=signature %>',
            jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage']
        });
    </script>

步骤三:调用接口

在进行完第二步的调用后,步骤三就显得非常轻巧了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wx.ready(function(){
    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
本文的调用实例是:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script type="text/javascript" >
    wx.ready(function () {
        wx.onMenuShareAppMessage({
            title: '<%=shareTitle %>',
            desc: '<%=shareContent %>',
            link: '<%=currentUrl %>',
            imgUrl: '<%=shareImageUrl %>'
        });

        wx.onMenuShareTimeline({
            title: '<%=shareContent %>',
            link: '<%=currentUrl %>',
            imgUrl: '<%=shareImageUrl %>'
        });
    })     
</script>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
本文基本上总结到此处。

易出现的问题:

1、检查后台是否设置:右上角公众号名称–功能设置–JS接口安全域名

2、检查代码里的appid和公众号后台的id是否一致

3、图片的调用地址是绝对路径(相对路径好像不行)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
引用文档:
微信JS-SDK说明文档

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140755.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
快递100快递实时物流快递查询接口API案例代码
<a href="https://api.kuaidi100.com/manager/openapi/download/kdbm.do" style="color: #027eff;" target="_blank"><u>下载表格</u></a>
快递100API
2021/05/18
1.9K0
快递100快递实时物流快递查询接口API案例代码
快递100快递查询地图轨迹API接口案例代码
提供统一格式的HTTP POST或GET调用接口,并返回格式支持JSON,xml,text,html数据。
快递100API
2021/05/17
1.6K0
快递100快递查询地图轨迹API接口案例代码
快递100API实测:一键查询快递物流+实时推送,开发者的物流神器!
在电商、供应链、仓储管理等行业,物流信息的实时查询与推送已成为刚需。传统手动查询方式效率低下,而自建物流追踪系统成本高昂。因此,第三方快递查询API成为开发者的首选解决方案。小编最近就发现了一款超级好用的快递物流查询API接口软件——快递100旗下「百递云·API开放平台」,今天就让我们一起从实测角度来聊聊。
xcLeigh
2025/04/12
2820
快递100API实测:一键查询快递物流+实时推送,开发者的物流神器!
城市末端全链协同的快件物流资源共享平台研究 | 热文回顾
针对现有快递物流企业独立开展仓、转、运、配业务时存在的成本高、效率低、服务碎片化、非集约等问题,及现有共享模式发展面临的瓶颈问题,本文主要聚焦城市末端全链协同的快件物流资源共享平台搭建,研究和探讨了如何促进城市末端仓、运、转、配全链条资源共享,更大程度提升资源配置效率,从而促进快递物流的转型升级和行业高质量发展。
用户9868602
2022/09/02
6060
城市末端全链协同的快件物流资源共享平台研究 | 热文回顾
物流快递查询API接口怎么对接(中通、申通、韵达/顺丰、韵达)
快递查询API接口是使用的物流单号即可实现查询物流信息。主要应用在电商商城、ERP系统商、WMS系统商、快递柜、银行等企业。多家快递物流公司接口统一接入,建议对接接口提供商,一次性可以接入多家快递,在后期的技术维护也会省下很多工作。
用户4199839
2019/07/23
4.4K0
物流快递查询API接口怎么对接(中通、申通、韵达/顺丰、韵达)
客快物流大数据项目(三):项目解决方案
干线运输指的是运输的主干线, 在主干线上有最大的运力,一般快件的运行都是由支线去向主干线去汇集, 由主干线运输过去
Lansonli
2021/12/27
9220
客快物流大数据项目(三):项目解决方案
国内主流快递公司快递单号查询API接口对接指南
看完物流快递API接教程这篇文章,然后把源码复制到你的项目上,就能快速完成快递接口对接,调用快递查询API接口,能查询到快递单号从收件、运输,到转运中心,派送到签收等各个环节的物流发货状态。接口不区分开发语言,支持Java,C#,PHP,Python,net、go等多种开发语言的程序调用
用户4199839
2021/05/17
1.8K0
原生JS + HTML + CSS 实现快递物流信息 API 的数据链式展示
全国快递物流查询 API 是一种提供实时、准确、可靠的快递物流信息查询服务的接口。它基于现有的物流信息系统,通过API接口的方式,向用户提供快递物流信息的查询、跟踪、统计等功能。使用全国快递物流查询 API,用户可以在自己的应用程序或网站上,快速、方便地查询快递物流信息。
不是海碗
2023/04/14
1K0
原生JS + HTML + CSS 实现快递物流信息 API 的数据链式展示
快递公司接入快递100的快递实时查询接口示例
https://api.kuaidi100.com/document/60509213a52d305ab4d2a1cb.html
快递100API
2021/05/20
8670
快递公司接入快递100的快递实时查询接口示例
快递100快递信息订阅推送API接口案例代码
当我方调用贵方的回调接口(callbackurl)时,贵方需要先将我方提交的数据保存至贵方的数据库,接着向我方返回是否成功接收的响应报文及代码,即贵公司直接在回调接口的地址的response中填写如下内容:
快递100API
2021/05/19
1.6K0
快递100快递信息订阅推送API接口案例代码
快递100轨迹查询-电商快递地图轨迹推送服务API接口案例代码
1.使用http协议表单提交的方式进行信息交互,字符编码默认统一采用UTF-8,数据格式:application/x-www-form-urlencoded;
快递100API
2021/05/18
1.8K0
快递100轨迹查询-电商快递地图轨迹推送服务API接口案例代码
【v2版本】天气接口 返回JSON数据
免费的天气接口 v2版本 请求模式:GET/POST 请求地址:https://api.shunnet.top/weather/api?edition=v2&city=泸溪 【参数说明】 名称 解释
Shunnet
2021/06/11
7770
JQ + PHP + TrackMore物流信息跟踪
在使用之前,您需要先去trackmore官方网站申请API_KEY,传送门:TrackMore
Yiiven
2022/12/15
1.8K0
JQ + PHP + TrackMore物流信息跟踪
APISpace 全国快递物流地图轨迹查询API接口案例代码
APISpace 的 全国快递物流地图轨迹查询,在地图中展示包裹运输轨迹,支持单号的订阅与推送。包括顺丰、圆通、申通等主流快递公司。
用户10428865
2023/10/31
3750
时间轴、物流信息。你根本不需要StepView
完整Demo:https://github.com/yechaoa/TimeLineDemo
yechaoa
2022/06/10
2200
时间轴、物流信息。你根本不需要StepView
常用快递鸟物流信息查询接口-查询快递信息API接口对接指南
零售电商平台及ISV商家对物流api接口的需求有很多,今天我们主要分享的就是快递鸟快递单号查询接口的对接指南,快递单号查询接口对接的应用场景有很多,很多场景会遇到,最主要的就是电商网站用户打开“我的订单”时调用此API显示物流信息详情,电商管理后台的物流系统,客服在对账前查询所有运单的签收状态,并追踪问题,电商平台对商家物流管控,要求必须在多久快递必须发出要看到揽件状态,多久必须收到货物看到签收状态,根据这些状态对商家管控从而提高用户的整体满意度。
用户4199839
2022/03/29
1.9K0
python接口自动化(十九)--Json 数据处理---实战(详解)
  上一篇说了关于json数据处理,是为了断言方便,这篇就带各位小伙伴实战一下。首先捋一下思路,然后根据思路一步一步的去实现和实战,不要一开始就盲目的动手和无头苍蝇一样到处乱撞,撞得头破血流后而放弃了。不仅什么没学习
北京-宏哥
2019/09/11
9360
python接口自动化(十九)--Json 数据处理---实战(详解)
顺丰的野心:物流带动生态圈
导读:进口有全球顺、海购丰运,出口有欧洲、俄罗斯小包等产品,合力解决物流;优选国际、业内风传的“亚历山大”海淘平台在顺丰的支持下解决信息流,帮助国内消费者找到国外商品……顺丰正在试图打造一个生态圈。或许在未来,你与想要的生活只差一个顺丰的距离。 最近业内好像刮起解读顺丰的风潮,各种揭秘层出不穷。不过在和顺丰内部人士的沟通中发现,通过向零担、生鲜、跨境、农村市场渗透,顺丰正在试图打造一个由顺丰链接而成的生态圈。 11月19日来自顺丰的消息,今年“双11”当日单量涨幅146%。截止目前
用户1756920
2018/06/20
9350
2019物流行业年度总结:谁发力入局,谁黯然出局?
2019年看起来既是丰富多彩的一年,又是很糟糕的一年,有人说2019是物流行业的“冰川时代”,远成、全峰、国通等二线企业纷纷宣告破产,品骏“卖身”顺丰退出游戏。也有人说2019是物流行业的“爆发元年”,中通、韵达年业务量争相突破100亿件。
庄帅
2020/01/05
4110
2019物流行业年度总结:谁发力入局,谁黯然出局?
顺丰快递单号查询api接口免费对接参数以及demo
顺丰快递对物流信息的管控较为严格,官网上也加上了由腾讯云提供的滑动验证码进行保护,如果需要大批量查询顺丰的物流信息,必须要对接顺丰官方的路由查询接口。注意,对接接口必须要有顺丰月结账户,对接成功后只能查询自己发货的物流单号的路由信息。
app玩家
2019/08/13
4.7K0
顺丰快递单号查询api接口免费对接参数以及demo
推荐阅读
相关推荐
快递100快递实时物流快递查询接口API案例代码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验