# 接口说明

微卡支持通行记录信息通过数据流的形式发送给接入方,接入方需要按文档规范返回应答。

能力申请:发送邮件到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)]
}