帮助中心
请问遇到什么问题?
V3版本 Webhook 签名验证
为了确保消息的来源身份是 51tracking,你可以选择对 POST 数据的来源进行安全认证。 ( 不验证,直接解析 POST 的数据也可以 ) 安全认证的方法如下: 解析出 POST 数据中的 timestamp 和 signature 这两个参数。 使用你的 51tracking 用户邮箱(密钥) 和 timestamp (明文) 生成签名 signature, 与 POST 数据中的 signature 进行校验 ( 签名算法: PHP:SHA256、JAVA:HmacSHA256) **备注:使用附带的Jave和Php示例代码来验证51Tracking数据,当验证您自己的数据请替换SIGNATURE,TIMESTAMP 和 ACCOUNT。** #### Java import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.security.InvalidKeyException; import java.security.NoSuchAlgorithmException; public class Main { public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException { String signature = \\\"0d90bb874fed0b056d8b3aa794529ebacd49932a0cea691629b63eaf2ca9d400\\\"; String timestamp = \\\"1653632765\\\"; String account = \\\"info@trackingmore.org\\\"; Mac sha256_HMAC = Mac.getInstance(\\\"HmacSHA256\\\"); SecretKeySpec secret_key = new SecretKeySpec(account.getBytes(), \\\"HmacSHA256\\\"); sha256_HMAC.init(secret_key); byte[] bytes = sha256_HMAC.doFinal(timestamp.getBytes()); StringBuilder new_signature = new StringBuilder(); for (byte item : bytes) { new_signature.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3)); } System.out.println(new_signature.toString()); System.out.println(new_signature.toString().equals(signature)); } } #### Php $signature = \\\'0d90bb874fed0b056d8b3aa794529ebacd49932a0cea691629b63eaf2ca9d400\\\'; $timestamp = \\\'1653632765\\\'; $account = \\\'info@trackingmore.org\\\'; $new_signature = hash_hmac(\\\'sha256\\\', $timestamp, $account); var_dump($signature == $new_signature , $new_signature); ***** V2与V3版本的签名是 **邮箱+时间戳** 的加密方式,如果您变更了您的账户邮箱,需要更改签名使用的邮箱。 V4版本中使用的是** APIKey+时间戳** 的加密方式,所以不存在此问题。
查物流轨迹,就用51Tracking