VandosPay Docs

请求报文

请求报文公共字段与示例

请求报文

KeyTypeRequiredDescription
clientIdstringM服务端下发给客户端的唯一ID. 服务端下发参数时给到
trkstringM传输秘钥 Base64 编码。每次请求生成一个 128 位 AES 密钥,用平台 RSA 公钥加密后再 Base64 编码;用于加密请求报文、解密本次响应数据
timestampnumberM请求时客户端的时间戳(毫秒)
randomStringstringM每次请求生成的随机数
payloadstringM使用 Base64 编码的请求报文体,真实的应用参数。
1. 把请求报文体转换为 JSON 字符串。
2. 使用传输秘钥 trk 加密。报文加密
3. 使用 Base64 编码后得到该值
charsetstringO编码格式, 默认UTF-8
signTypestringO签名方式; 默认RSA
signstringM签名. 签名计算

组装顺序

按下面的顺序生成请求报文,加密和签名顺序不能颠倒:

  1. 生成 timestamp、randomString。
  2. 把业务参数序列化为 JSON 字符串。
  3. 生成 16 字节 AES 密钥 trkBytes,并按报文加密生成 trk 和 payload。
  4. 基于 timestamp + randomString + payload 按签名计算生成 sign。
  5. 组装公共字段,GET 拼接到 Query String,其他请求放入 JSON Body。
timestamp     = nowInMillis()
randomString  = uuidWithoutHyphens()
businessJson  = JSON.stringify(businessParams)
trkBytes      = randomBytes(16)
trk           = Base64(RSA_encrypt(platformPublicKey, trkBytes))
payload       = Base64(AES_encrypt(trkBytes, utf8(businessJson)))
signData      = SHA512(String(timestamp) + randomString + payload)
sign          = Base64(RSA_sign_SHA512withRSA(clientPrivateKey, signData))

每次请求都要生成新的 trk 和 randomString,并更新 timestamp。

GET 请求报文示例

GET 请求把组装好的参数拼装在URL中作为Query String

/api/xxx?requestId=xxx&clientId=xxx&trk=xxx&timestamp=xxx&randomString=xxx&payload=xxx&charset=xxx&signType=xxx&sign=xxx

非GET请求报文示例

非GET组装好报文后放入Http请求体(HTTP Request Body)中

{
  "clientId": "60e55819aa99a10d42916bf3",
  "trk": "WZyOHi24ZV0gZaSqsp1scnR+5sdWKWQiWAUtylnIQ7h1sxUq+SrKA9meegyDHf7qMeGXJww/fcznKFU7rCn+o0tOn/Ju5Oy0NdbJIsV5I5j6WyhyR/q00INmeplylOZnVy1/pgWPMWSJ13JwR6pj8aWDxaGU1Me1ZxV14qarGKMls7IkRitRsK0FWxr3VO0PUOLA0WF4jx3NY7ZYgG5zaS18PL+crK6wvdGTBsWAJk9CFXXwsY61rRcshir/3pPk9Uu7oZNvRCBUxGwHIbEgTiCzZBc2HflbElckd80HwIYW7jXTnlDWq803rXRIFvLCHFEbT/sXvwjGIF0A8xYuVQ",
  "timestamp": 1626074446159,
  "randomString": "e8fd19b3b67a4b60aae61243c69aa602",
  "payload": "Y5WB5zP5z/MPAB9/bicjzGoDyZb3QVsCP2FOqmJYkUxTVXZWx+nukd+2usHYeZcrqYG4akArxQKPXDcgJCmCbsN97pae8TVzHzeuKf6v0zSA6Ur7XATSKq8mEV8Geh4dWv1ntJ7A31qPJLPHysr9YiQzlXx3THMyHBAbZ91zpBJ5f2qI0PtvAevyb4AM6J1Dnr6+ib3RkX/HbtbWNcuyPXElW5Upwh3DbDD0TklMTPzJcqm4jNZVZKD61M6c3KtOGrSsXLDUnW+VN7m5FP21GDVUpNjWillXEwN/1gFvK4WF6jFIjkY54edfVN17htfLv/VrTLsUuIz2hvxJPDA2lWxkMYrEVozfC/HAQIrVBoysCCuU12XHhUpNNOnDWclM8NOnjewd4kLYiA2pZ+6slDEwy3HRkQTTaqLehnP3IXVVTYMu2zOjFYnBSIFrDkn6OkzYkKKtjzS7tlJhCi4VHNJvZ++E8S0hPVJGNdTexDaYvDPur93dSX9tsLdPK8WgTwMuR3Wam4iAeIDu+WBDzCH2/Yu5nyfF25wXvAUbixE3IKMPQR0NJ8CqJkDocQiT4Ou3x9f1G3c8IrJw6nUmTQ5iAqw8Y+UiKdDf9LYoSe59W9qYARWKHZgTXsowFJODIZxh5+iSEWYfSYgRVcrZFrGi2DHusBHkSE44GPBpg43FZdr3J3lfrIYaKONugy9WEwHPwfDG4eTN09iT0yn5KoO6RtgYzyeEl/M5sc8FqZYCF+vbWVkyQSKs92AoltN5tTAe5u2N8adiuMfHxuQSe2jTQ2rEeRSdfCTEgVIsn+C0rWGBHe7QukNc2gJIaCymm3wnLMFvqc03Ynkxz1Dlje111Ac5weNcZLgTnezsVBuT8okCTElVq0da3S7sj9Ju7K7TNUFxOkDGvfE7zApIRPdfSe/egTk4B+2RVnAOTVoPFRQqjXi8KHmwrRwdWukmnqPw/0inxtBfLz6yuBZLXyRypDXWIPstczRa2G3Xe7GYlsLvTJU644ddAnYuBjSg8xHhAzEUXr+G3HQ/e7JnkgyvOBjfybNXMq2k+hXVcADZJkdW0GbqTdUQ5B8BHFzV14ICWnb2qwsjEjTPUt0KQSBsI5CfjxuSYXkRUzi4toG8qxh7nNh71MiN2F5Z+GBqto2UNUUprTy/Nwb0wFlFIyfaG2EqLphgx1XvRBFuB1vgMKipWvvs0O01gWUSbnLzpkvZuHOjlupFDSPAXm6DrRdVnR9v+KP7+D2WacjVmAE",
  "charset": "UTF-8",
  "signType": "RSA",
  "sign": "IIbvXeQouG0t1wDb61+aEL2IVVRQ9yNgGgx9ZkxTNNbAKs5Su9LlJdm0Oz9/YRjU/n9qZAiiihLVYzeZ1sIA+pn8FY/kRQ/7O92DepDcMuZJkBQbhHENuzBhL9Db7lePFla4gZCZSPs879qXHgGJ0Dg+j1s6MGpO0tkhiAlW5pEOOdZhK4JwuPi9ovDF5xxlm9GbcG19tCzuvagio3YyWBW+D6Z/WgU+aIKwt5NSyPlClz5EUVeVey0r5Q1ZYOiT5wjRB6jlVZGRutd8tQm6jct1kDYJPo2j7AuqfRRUZW6+xCJXKZx0DWwIbZHQXPi+9uI7VE5reLqfBEuml1nyfw"
}

本页目录