網(wǎng)站 APP 其它
關(guān)注快遞100接口API
快遞100目前開放給第三方接入的功能主要包括:查快遞
,寄快遞
,快遞電話大全
,時(shí)效與價(jià)格
,快遞網(wǎng)點(diǎn)(內(nèi)測(cè)中)
等。各個(gè)功能的說明具體如下:
快遞100開放功能目前基于H5開發(fā),可以嵌入至已有的APP,也可以嵌入到網(wǎng)頁。根據(jù)接入方是否提供用戶信息,接入方式分為兩種:
appid
和appsecret
,按照快遞100提供的開放文檔,將用戶的唯一標(biāo)志
進(jìn)行加密生成openid
,再附加上其他的參數(shù)即可接入(詳情可見接入方法)。申請(qǐng)appid
和appsecret
需要聯(lián)系快遞100客服申請(qǐng)開通獲得appid
等信息。接入完整的功能
接入完整的功能即接入快遞100所有開放的功能。以下為接入的方法:
參數(shù)說明:
參數(shù)名稱 | 類型 | 是否必須 | 描述 |
coname | String | 是 | 第三方合作的名稱,僅支持由字母、數(shù)字和下劃線組成,確認(rèn)名字后可以找客服登記,一般為接入方的官方英文名,如oppo |
openid | String | 提供用戶信息時(shí)為必須 | 用戶的唯一標(biāo)志 |
appid | String | 提供用戶信息時(shí)為必須 | 在快遞100申請(qǐng)到的應(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,接入后入口和寄快遞頁面效果如下:
當(dāng)接入方需要用自身系統(tǒng)中用戶身份進(jìn)行授權(quán)并在快遞100平臺(tái)上進(jìn)行下單等操作時(shí),需要對(duì)用戶身份進(jìn)行簽名。簽名時(shí)需要用到在快遞100申請(qǐng)appid
和appsecret
。
appid
: 在快遞100申請(qǐng)到的應(yīng)用idappsecret
: 在快遞100申請(qǐng)到的應(yīng)用接入密鑰申請(qǐng)appid
和appsecret
可以點(diǎn)擊以下按鈕申請(qǐng),審核通過后我們將以郵件的形式回復(fù)。
簽名和接入的步驟:
(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 其它