久久东京热中文字幕调教|人妖一区二区在线|国产一级无码精品视频|国产乱子伦对白视频免费

<rt id="iqwik"></rt>
  • <menu id="iqwik"><noscript id="iqwik"></noscript></menu>
    <delect id="iqwik"></delect>
  • <dl id="iqwik"></dl>
  • <rt id="iqwik"></rt>

    關(guān)注快遞100接口API

    快遞100查件寄件功能接入開發(fā)文檔

    1. 開放功能

    快遞100目前開放給第三方接入的功能主要包括:查快遞,寄快遞快遞電話大全,時(shí)效與價(jià)格,快遞網(wǎng)點(diǎn)(內(nèi)測中)等。各個(gè)功能的說明具體如下:

    • 查快遞: 支持800+快遞公司單號(hào)物流信息查詢,提供智能識(shí)別快遞公司和手動(dòng)切換快遞公司進(jìn)行查件。
    • 寄快遞: 搜索附近的加盟的快遞員,提供在線下單功能。若附近沒有加盟快遞員則會(huì)提供其他非加盟快遞員的聯(lián)系方式。
    • 快遞電話大全: 查找快遞公司的聯(lián)系方式
    • 時(shí)效與價(jià)格: 基于快遞100大數(shù)據(jù)預(yù)測,根據(jù)用戶輸入的寄件地址和收件地址以及物品的重量,為用戶計(jì)算出各個(gè)快遞公司的價(jià)格和運(yùn)輸需要的時(shí)長,并預(yù)測物流的中轉(zhuǎn)站信息。
    • 快遞網(wǎng)點(diǎn): 查詢附近的快遞網(wǎng)點(diǎn)信息(內(nèi)測階段,未全面開放)

    2. 接入方式

    快遞100開放功能目前基于H5開發(fā),可以嵌入至已有的APP,也可以嵌入到網(wǎng)頁。根據(jù)接入方是否提供用戶信息,接入方式分為兩種:

    • 提供用戶信息: 提供用戶信息后,用戶無需登錄可以在平臺(tái)進(jìn)行下單,下單后可以查看寄件記錄,保存收寄件地址等信息。接入方需要在快遞100平臺(tái)上申請到唯一的appidappsecret,按照快遞100提供的開放文檔,將用戶的唯一標(biāo)志進(jìn)行加密生成openid,再附加上其他的參數(shù)即可接入(詳情可見接入方法)。申請appidappsecret需要聯(lián)系快遞100客服申請開通獲得appid等信息。
    • 不提供用戶信息: 該方式無需提供用戶信息,用戶下單時(shí)需要輸入手機(jī)并接收短信驗(yàn)證碼才可以下單。

    3. 接入方法

    接入完整的功能
    接入完整的功能即接入快遞100所有開放的功能。以下為接入的方法:

    接入鏈接: https://m.kuaidi100.com/app/? coname={name}&openid={openid}&appid={appid}&nonce={nonce}&timeStamp={timeStamp}&kd100sign={sign}

    參數(shù)說明:

    參數(shù)名稱 類型 是否必須 描述
    coname String 第三方合作的名稱,僅支持由字母、數(shù)字和下劃線組成,確認(rèn)名字后可以找客服登記,一般為接入方的官方英文名,如oppo
    openid String 提供用戶信息時(shí)為必須 用戶的唯一標(biāo)志
    appid String 提供用戶信息時(shí)為必須 在快遞100申請到的應(yīng)用應(yīng)用id
    nonce String 提供用戶信息時(shí)為必須 隨機(jī)數(shù)(建議為6為數(shù)字)
    timeStamp Long 提供用戶信息時(shí)為必須 調(diào)起接口是的時(shí)間戳
    kd100sign String 提供用戶信息時(shí)為必須 API輸入?yún)?shù)簽名結(jié)果

    因此,一個(gè)最簡單的接入鏈接為:https://m.kuaidi100.com/app/?coname=網(wǎng)站或app英文名字,如hao123接入后的鏈接是:
    https://m.kuaidi100.com/app/?coname=hao123,接入后入口和寄快遞頁面效果如下:

    4. 簽名算法

    當(dāng)接入方需要用自身系統(tǒng)中用戶身份進(jìn)行授權(quán)并在快遞100平臺(tái)上進(jìn)行下單等操作時(shí),需要對(duì)用戶身份進(jìn)行簽名。簽名時(shí)需要用到在快遞100申請appidappsecret

    • appid: 在快遞100申請到的應(yīng)用id
    • appsecret: 在快遞100申請到的應(yīng)用接入密鑰

    申請appidappsecret可以點(diǎn)擊以下按鈕申請,審核通過后我們將以郵件的形式回復(fù)。

    點(diǎn)擊此處申請

    簽名和接入的步驟:

    (1)生成openid, openid=base64(appid+用戶唯一標(biāo)志)
    (2)簽名kd100sign, kd100sign=MD5(appsecret+MD5(appid+timestamp+nonce))
    (3)將openid,kd100sign,nonce,appid,timeStamp,kdsign,coname等作為基本接入鏈接的參數(shù),生成最終的接入鏈接。

    Java示例

    (1)MD5實(shí)現(xiàn)

    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();
    // 使用指定的字節(jié)更新摘要
    getMdInst().update(btInput);
    // 獲得密文
    byte[] md = getMdInst().digest();
    // 把密文轉(zhuǎn)換成十六進(jìn)制的字符串形式
    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實(shí)現(xiàn)

    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簽名實(shí)現(xiàn)

    import org.apache.commons.lang3.RandomStringUtils;
    public class SignUtils {
    private final static String APPID = "galaxyind";
    private final static String APPSECRET = "cf094f235b1248a6b7778d56f44c7c2e";
    /**
    * @param userid 用戶唯一標(biāo)志
    * @return
    */
    public static String createOpenid(String userid) {
    return Base64.encode(APPID + userid);
    }
    /**
    *
    * @param nonce // 隨機(jī)數(shù)
    * @param timeStamp 時(shí)間戳--自1970年01月01日起到現(xiàn)在的毫秒數(shù)
    * @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);// 隨機(jī)數(shù)
    long timeStamp = System.currentTimeMillis();// 時(shí)間戳--自1970年01月01日起到現(xiàn)在的毫秒數(shù)
    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;
    //隨機(jī)6位數(shù)字
    function randomStr(){
    $arr = range(0, 9);
    $str = '';
    for($i = 0; $i < 6; $i++){
    $str.= $arr[array_rand($arr)];
    }
    // echo $str;
    return $str;
    }
    //返回當(dāng)前的毫秒時(shí)間戳
    function msectime() {
    list($msec, $sec) = explode(' ', microtime());
    $msectime = (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
    return $msectime;
    }

    網(wǎng)站    APP    其它

    提交信息