数据签名说明

开放平台数据写接口,为了防止数据提交过程中被第三方篡改或者重复提交数据。在调用写接口时需要进行数据签名,服务器得到数据后,先进行验签,再调用业务。如果签名参数不符则业务调用失败。

在调用需要数据签名的接口之前,首先要调用nonce接口获取一个一次性验证码。

nonce验证码可同时存在多个,最长有效期为5分钟,且在使用一次后失效。
nonce验证码的长度并不确定,但是不会大于512个字符。

nonce接口调用说明

请求协议: HTTPS
请求方式: GET
请求地址: https://api.mytijian.com/open-api/V2/nonce?accessToken=ACCESS_TOKEN

参数 是否必须 说明
accessToken 当前可用的accessToken

正常情况下接口返回如下数据

  1. {
  2. "success":"T",
  3. "data":{
  4. "result":"0HpsLui7o8xHj_V_uoCgJZNUwilp9R_7"
  5. },
  6. "msg":"success"
  7. }

返回数据说明

字段 说明
result 本次请求产生的nonce验证码

错误示例

  1. {
  2. "success":"F",
  3. "errCode":"101101",
  4. "msg":"Invaild Access Token"
  5. }

表示使用的accessToken错误或过期


签名示例 (模拟调用业务接口)

现在我们假设需要调用业务接口 /nonp
https请求方式:post
https请求地址:https://api.mytijian.com/open-api/V2/nonp?accessToken=ACCESS_TOKEN&nonce=NONCE&sign=SIGN
app signKey 值为 eccdcff429b342399582d81029652ae9
接口请求内容为: {“test”:”context use sign test”}

则请求nonp接口的操作过程如下

首先调用nonce获取一次性校验码,假设 nonce=0HpsLui7o8xHj_V_uoCgJZNUwilp9R_7
然后将nonce、请求内容、signKey拼装为一个字符串 p
计算字符串p的md5值sign
将nonce、sign作为url参数,context作为post内容,调用业务接口。

伪代码如下

  1. String accessToken = "token"
  2. String content = "{\"test\":\"context use sign test\"}";
  3. String nonce = "0HpsLui7o8xHj_V_uoCgJZNUwilp9R_7"; // 假设请求nonce接口获取到的nonce值
  4. String signKey = "eccdcff429b342399582d81029652ae9"; // signKey 任何时候都不作为参数传输
  5. String p = nonce + content + signKey;
  6. String sign = MD5(p);
  7. // 请注意 使用的是sign而不是signKey
  8. String requestUrl = "https://api.mytijian.com/open-api/nonp?accessToken"+accessToken+"&nonce="+nonce+"&sign="+sign;
  9. // 发送post请求(地址,内容)
  10. doHttpPostRequest(requestUrl, content);

如果nonce有效且sign验证成功,则根据具体业务返回数据。
常见错误如下:

  1. {
  2. "success":"F",
  3. "errCode":"101102",
  4. "msg":"require 'sign' and 'nonce' param"
  5. }

url中缺少sign或者nonce参数

  1. {
  2. "success":"F",
  3. "errCode":"101103",
  4. "msg":"sign error"
  5. }

sign值错误,可能引起的原因是字符串组装顺序不正确、或者signKey与服务器端不一致造成的

  1. {
  2. "success":"F",
  3. "errCode":"101104",
  4. "msg":" Invaild Nonce String"
  5. }

无效的nonce, nonce获取之后只能使用一次,且只在5分钟内有效。

文档更新时间: 2018-10-12 17:14