服务器端对接指南

由于客户端不是完全可信环境,所以客户端验证完成后,强烈建议将信息提交至服务器端,由服务器端调用极简服务器再次校验手机号码是否真实有效。

请求地址

[POST/GET] https://api.jijiancode.com/api/s/third/verify_id

请求参数

字段名称 字段说明 类型 必填 备注
app_id 分配的应用ID string Y
id 客户端/网页验证完成后返回的 token string Y 验证完成后 SDK 都会返回 token 和 mobile
mobile 客户端/网页验证的手机号 string Y
country_code 手机号国家区号 string N 默认86
r 随机字符串 string Y 每次请求都需要重新生成,长度不限
key 校验值 string Y 生成规则见 校验值规则

返回值

字段名称 字段说明 类型
code 请求结果码,200 成功, 其他失败 int
msg 请求结果信息 string
data 返回内容 object

data 结构体说明

字段名称 字段说明 类型
status 验证状态 int
msg 状态描述 string

status 取值说明: 1 成功 , -1 手机号没有验证, -2 已过期 ,-3 验证失败

校验值生成规则

  1. 将所有参数的key按照字符串进行排序
  2. 如果参数的value不为空,则将keyvalue以=号链接,且在后面增加&,例如参数r1Nm882l7, 则拼接为r=1Nm882l7&
  3. 按照排序的顺序拼接所有的参数
  4. 拼接完成后,在末尾拼接 token=密钥Token, 其中密钥Token可在用户中心查看,请注意密钥Token不要泄露。
  5. 对拼接后的字符串进行 md5 加密,然后全部转为小写

密钥Token的查看位置

密钥Token

校验值生成php示例代码

function createSign($data, $token)
{
    $signOriginStr = '';
    if ($data) {
        ksort($data);
        foreach ($data as $key => $value) {
            if (empty($key) || $value === "" || $value === null || $key === 'token' || $key === 'key') {
                continue;
            }
            $signOriginStr = "$signOriginStr$key=$value&";
        }
    }

    $signOriginStr = $signOriginStr . "token=$token";
    return strtolower(md5($signOriginStr));
}

校验值生成java示例代码

public static String createSign(Map<String, String> map, String token){
        if(map == null || map.size() == 0){
            return  "";
        }
        List<String> keys = new ArrayList<>(map.keySet());
        Collections.sort(keys);
        StringBuilder sb = new StringBuilder();
        for(String key: keys){
            String value = map.get(key);
            if(TextUtils.isEmpty(value)){
                continue;
            }
            sb.append(key).append("=").append(value);
            sb.append("&");
        }
        sb.append("token=").append(token);
        return SecurityUtil.md5(sb.toString());
    }

//SecurityUtil.md5
public static String md5(String s){
        if (TextUtils.isEmpty(s)) {
            return "";
        }
        MessageDigest md5 = null;
        try {
            md5 = MessageDigest.getInstance("MD5");
            byte[] bytes = md5.digest(s.getBytes());
            String result = "";
            for (byte b : bytes) {
                String temp = Integer.toHexString(b & 0xff);
                if (temp.length() == 1) {
                    temp = "0" + temp;
                }
                result += temp;
            }
            return result;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return "";
    }

校验值生成 golang 示例代码

func CreateSign(m map[string]string, token string) string {
 if len(m) <= 0 {
  return ""
 }
 keys := make([]string, 0, len(m))
 for k := range m {
  keys = append(keys, k)
 }
 sort.Strings(keys)
 var sb strings.Builder

 for _, k := range keys {
  if m[k] == "" {
   continue
  }
  sb.WriteString(fmt.Sprintf(`%s=%s&`, k, m[k]))
 }
 sb.WriteString("token=")
 sb.WriteString(token)
 data := []byte(sb.String())
 return fmt.Sprintf("%x", md5.Sum(data))
}

results matching ""

    No results matching ""