# 接口说明
微卡支持通行记录信息通过数据流的形式发送给接入方,接入方需要按文档规范返回应答。
能力申请:发送邮件到hongfuhuang@tencent.com进行申请(邮件同时也抄送至lydiaxyang@tencent.com,leowyang@tencent.com,luishhuang@tencent.com),申请时需提供业务方资料和使用场景。
# 请求方法:
POST(application/json)
注意 微校服务器发出的请求 :::
# 参数说明:
推送通信记录
{
"app_key":"1F4093D6DC5BE8BC",
"raw_data":"jvQBn/fJOtNfE7zD+6cYZefi7tR4XR0YiM6NOwuq4UOWKWvyNVzA8ZnHDhqlwmZO9AyXXEHveewScCaJWrJ4A6a0Snzk4AuuyPfdtM60WkSqpBCr8t645TbGTJPek7SCwufwAW0KAWD958Q2HVjhDdHqm5/7YZZgCwqzVhAF8vilKrv3L/AS6bQGgB0JNgnEtpzhyogXybegIwQ/G7HAea1LiMHM00vdhfNGJOwI5egG3np5/9xdl9y5mJOH5Hh7ZrenzKjrIpbd0KrpUAfO/sfMDQB32+OucHs35w7M9Loro38kXTlxEMidTelUYEVi3aOgPIRwulKqf90S9BIbj1ZwZV+ZqrW/FV7QJGzjacLrziIr9NQIxMvIQKTlL8nVk+LPgoPBSoB0yxjJ47eZiSCJsrlHLkZHO60jyTpjTw0qKIRQDlTo3EsQJCFf1vN48a9S8VW5GXEUWdr2aD5ckz9CjleeCjIFsmZQ+gjpyC/dKNabfJmTRMay6ULq0PrW",
"signature":"78e905525e96a26839e4ce9ecea263ad"
}
字段名 |
APP_KEY |
数字签名 |
通行数据 |
签名方式:见签名算法 (opens new window)。
# 响应说明:
{
"result":1,
"msg":"ok"
}
# 错误时返回:
{
"result": xxx,
"msg":"xxx"
}
参数 |
result |
msg |
# 错误码
名称 |
0 |
-120 |
raw_data 解密实例
package main
import (
"crypto/aes"
"crypto/cipher"
"encoding/base64"
)
func main() {
row := "jvQBn/fJOtNfE7zD+6cYZefi7tR4XR0YiM6NOwuq4UOWKWvyNVzA8ZnHDhqlwmZO9AyXXEHveewScCaJWrJ4A6a0Snzk4AuuyPfdtM60WkSqpBCr8t645TbGTJPek7SCwufwAW0KAWD958Q2HVjhDdHqm5/7YZZgCwqzVhAF8vilKrv3L/AS6bQGgB0JNgnEtpzhyogXybegIwQ/G7HAea1LiMHM00vdhfNGJOwI5egG3np5/9xdl9y5mJOH5Hh7ZrenzKjrIpbd0KrpUAfO/sfMDQB32+OucHs35w7M9Loro38kXTlxEMidTelUYEVi3aOgPIRwulKqf90S9BIbj1ZwZV+ZqrW/FV7QJGzjacLrziIr9NQIxMvIQKTlL8nVk+LPgoPBSoB0yxjJ47eZiSCJsrlHLkZHO60jyTpjTw0qKIRQDlTo3EsQJCFf1vN48a9S8VW5GXEUWdr2aD5ckz9CjleeCjIFsmZQ+gjpyC/dKNabfJmTRMay6ULq0PrW"
AppSecret := "8D108DCC6246EEF69F7696AFB6FFEAB6"
rawData, err := AesCBCDecrypt(row, []byte(AppSecret), []byte(AppSecret[:16]))
print(err)
print(string(rawData))
}
// AesCBCDecrypt 解密
func AesCBCDecrypt(decodeStr string, key []byte, iv []byte) ([]byte, error) {
decodeBytes, err := base64.StdEncoding.DecodeString(decodeStr)
if err != nil {
return nil, err
}
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
blockMode := cipher.NewCBCDecrypter(block, []byte(iv))
origData := make([]byte, len(decodeBytes))
blockMode.CryptBlocks(origData, decodeBytes)
origData = PKCS5UnPadding(origData)
return origData, nil
}
// PKCS5UnPadding 去除填充
func PKCS5UnPadding(origData []byte) []byte {
length := len(origData)
unpadding := int(origData[length-1])
return origData[:(length - unpadding)]
}