添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

快递100目前开放给第三方接入的功能主要包括: 查快递 寄快递 快递电话大全 时效与价格 , 快递网点(内测中) 等。各个功能的说明具体如下:

  • 查快递: 支持800+快递公司单号物流信息查询,提供智能识别快递公司和手动切换快递公司进行查件。
  • 寄快递: 搜索附近的加盟的快递员,提供在线下单功能。若附近没有加盟快递员则会提供其他非加盟快递员的联系方式。
  • 快递电话大全: 查找快递公司的联系方式
  • 时效与价格: 基于快递100大数据预测,根据用户输入的寄件地址和收件地址以及物品的重量,为用户计算出各个快递公司的价格和运输需要的时长,并预测物流的中转站信息。
  • 快递网点: 查询附近的快递网点信息(内测阶段,未全面开放)
  • 2. 接入方式

    快递100开放功能目前基于H5开发,可以嵌入至已有的APP,也可以嵌入到网页。根据接入方是否提供用户信息,接入方式分为两种:

    • 提供用户信息: 提供用户信息后,用户无需登录可以在平台进行下单,下单后可以查看寄件记录,保存收寄件地址等信息。接入方需要在快递100平台上申请到唯一的 appid appsecret ,按照快递100提供的开放文档,将 用户的唯一标志 进行加密生成 openid ,再附加上其他的参数即可接入(详情可见接入方法)。申请 appid appsecret 需要联系快递100客服申请开通获得 appid 等信息。
    • 不提供用户信息: 该方式无需提供用户信息,用户下单时需要输入手机并接收短信验证码才可以下单。
    • 接入链接: https://m.kuaidi100.com/app/? coname={name}&openid={openid}&appid={appid}&nonce={nonce}&timeStamp={timeStamp}&kd100sign={sign}

      参数说明:

      参数名称 类型 是否必须 描述
      coname String 第三方合作的名称,仅支持由字母、数字和下划线组成,确认名字后可以找客服登记,一般为接入方的官方英文名,如 oppo
      openid String 提供用户信息时为必须 用户的唯一标志
      appid String 提供用户信息时为必须 在快递100申请到的应用应用id
      nonce String 提供用户信息时为必须 随机数(建议为6为数字)
      timeStamp Long 提供用户信息时为必须 调起接口是的时间戳
      kd100sign String 提供用户信息时为必须 API输入参数签名结果

      因此,一个最简单的接入链接为: https://m.kuaidi100.com/app/?coname=网站或app英文名字 ,如hao123接入后的链接是:
      https://m.kuaidi100.com/app/?coname=hao123 ,接入后入口和寄快递页面效果如下:

      4. 签名算法

      当接入方需要用自身系统中用户身份进行授权并在快递100平台上进行下单等操作时,需要对用户身份进行签名。签名时需要用到在快递100申请 appid appsecret

      • appid : 在快递100申请到的应用id
      • appsecret : 在快递100申请到的应用接入密钥
      • 申请 appid appsecret 可以点击以下按钮申请,审核通过后我们将以邮件的形式回复。

        点击此处申请

        签名和接入的步骤:

        (1)生成openid, openid=base64(appid+用户唯一标志)
        (2)签名kd100sign, kd100sign=MD5(appsecret+MD5(appid+timestamp+nonce))
        (3)将openid,kd100sign,nonce,appid,timeStamp,kdsign,coname等作为基本接入链接的参数,生成最终的接入链接。

        Java示例

        (1)MD5实现

        import java.security.MessageDigest;
        import java.security.NoSuchAlgorithmException;
        public class MD5 {
        private static MessageDigest _mdInst = null;
        private static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        private static MessageDigest getMdInst() {
        if (_mdInst == null) {
        try {
        _mdInst = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
        return _mdInst;
        public static String encode(String s) {
        try {
        byte[] btInput = s.getBytes();
        // 使用指定的字节更新摘要
        getMdInst().update(btInput);
        // 获得密文
        byte[] md = getMdInst().digest();
        // 把密文转换成十六进制的字符串形式
        int j = md.length;
        char str[] = new char[j * 2];
        int k = 0;
        for (int i = 0; i < j; i++) {
        byte byte0 = md[i];
        str[k++] = hexDigits[byte0 >>> 4 & 0xf];
        str[k++] = hexDigits[byte0 & 0xf];
        return new String(str);
        } catch (Exception e) {
        e.printStackTrace();
        return null;

        (2)Base64实现

        import java.io.UnsupportedEncodingException;
        import org.apache.commons.lang.StringUtils;
        import sun.misc.BASE64Decoder;
        @SuppressWarnings("restriction")
        public class Base64 {
        public static String encode(String s) {
        if (StringUtils.isEmpty(s)) {
        return "";
        try {
        return (new sun.misc.BASE64Encoder()).encode(s.getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
        return "";
        public static String decode(String s) {
        if (StringUtils.isEmpty(s)) {
        return "";
        BASE64Decoder decoder = new BASE64Decoder();
        try {
        byte[] b = decoder.decodeBuffer(s);
        return new String(b);
        } catch (Exception e) {
        return null;

        (3)sign签名实现

        import org.apache.commons.lang3.RandomStringUtils;
        public class SignUtils {
        private final static String APPID = "galaxyind";
        private final static String APPSECRET = "cf094f235b1248a6b7778d56f44c7c2e";
        * @param userid 用户唯一标志
        * @return
        public static String createOpenid(String userid) {
        return Base64.encode(APPID + userid);
        * @param nonce // 随机数
        * @param timeStamp 时间戳--自1970年01月01日起到现在的毫秒数
        * @return
        public static String createSign(String nonce,long timeStamp) {
        String sign = MD5.encode(APPSECRET + MD5.encode(APPID + timeStamp + nonce));
        return sign;
        public String decodeOpenid(String openid) {
        return null;
        public static void main(String[] args) {
        String openid = SignUtils.createOpenid("123456");
        System.out.println("openid="+openid);
        String nonce = RandomStringUtils.randomNumeric(6);// 随机数
        long timeStamp = System.currentTimeMillis();// 时间戳--自1970年01月01日起到现在的毫秒数
        String sign = SignUtils.createSign(nonce, timeStamp);
        System.out.println("sign="+sign);

        PHP示例代码

        $appid = 'haowind';
        $appsecret = 'cf094f235b1248a6b7778d56f4uu9iko';
        $userid = 'useruuid';
        $timestamp = msectime();
        $nonce = randomStr();
        //生成openid
        $openid = base64_encode($appid.$userid);
        //sign签名
        $sign = md5($appid . md5($appid . $timestamp . $nonce));;
        //拼接嵌入的url
        $url = "https://m.kuaidi100.com/app/?coname=hao123&appid={$appid}&kd100sign={$sign}&openid={$openid}&timeStamp={$timestamp}&nonce={$nonce}";
        echo $url;
        //随机6位数字
        function randomStr(){
        $arr = range(0, 9);
        $str = '';
        for($i = 0; $i < 6; $i++){
        $str.= $arr[array_rand($arr)];
        // echo $str;
        return $str;
        //返回当前的毫秒时间戳
        function msectime() {
        list($msec, $sec) = explode(' ', microtime());
        $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
        return $msectime;