签名生成

约 731 字大约 2 分钟

调用引力 openapi 接口时,部分接口需要Authorizationsign 字段,本文主要给出示例,我们提供了以下 JavaGolangPython 版本的实例,请参照示例生成签名。

主要分为两个方法如下:

获取 sign

获取 sign 时,先组装 params 参数,参数为接口除了 sign 字段之外的其他所有字段的字典集合,组装完成后,调用 getSign 方法获取 sign 字符串。

提示

params 参数,不同的接口有不同的要求,具体请参考各个接口说明文档。

获取 Authorization

使用上一步获取的signapp_key,调用 getAuthorization 方法获取 Authorization 字符串,其中 app_key 为您申请的开发者应用的 key,您可以在引力后台-设置-引力开发者中查看。

代码示例

TestJWT {

 @Test public void test() {

    String appKey = "your_app_key";

    HashMap<String, Object> params = Maps.newHashMap();
    params.put("date_list", Arrays.asList("2023-08-14", "2023-08-19"));
    params.put("metrics_list", Lists.newArrayList("AdCost","AppActivateStandard","AppROI"));
    params.put("dims_list", Lists.newArrayList("date","advertiser_id"));
    params.put("statistics_caliber", "user_activated_time");
    params.put("decimal_point", 4);
    params.put("app_id", 13467210);

    HashMap<String, Object> filtering = new LinkedHashMap<>(); # 保持顺序
    filtering.put("ad_platform_list", Lists.newArrayList());
    filtering.put("channel_list", Lists.newArrayList());
    filtering.put("version_list", Lists.newArrayList());
    filtering.put("turbo_promoted_object_id_list", Lists.newArrayList());

    params.put("filtering", filtering);
    params.put("sign", "");


    String sign = getSign(params, appKey);
    System.out.println(sign);
    params.put("sign", sign);

    String authorization = getAuthorization(appKey, sign);
    System.out.println(authorization);
 }


 /** * 参数加签 *
    * @param map 参数
    * @param appKey 申请的引力APPKEY
    * @return 签名 */
public String getSign(Map<String, Object> map, String appKey) {
    List<String> params = new ArrayList<>();
    for (Map.Entry<String, Object> entry : map.entrySet()) {
        if (entry.getKey().equals("sign")) {
          continue;
    }
        params.add(entry.getKey() + "=" + JSONObject.toJSONString(entry.getValue()));
    }
    Collections.sort(params);
    StringBuilder sb = new StringBuilder();
    sb.append(Joiner.on("&").join(params));
    sb.append(appKey);
    String str = sb.toString().replaceAll("\"", "");
    return Hashing.md5().newHasher().putString(str, Charsets.UTF_8).hash().toString();
 }

 /** * 请求头加签 *
 * @param appKey 申请的引力APPKEY
 * @param sign 参数加签
 * @return 请求头签名
*/ public String getAuthorization(String appKey, String sign) {
    HashMap<String, Object> payload = Maps.newHashMap();
    payload.put("app_key", appKey);
    JWTSigner jwtSigner = JWTSignerUtil.hs256(sign.getBytes());
    return JWTUtil.createToken(payload, jwtSigner);
 }
}