腾讯移动分析 签名代码示例

package com.nlm.common.utils;

import com.alibaba.fastjson.JSONObject;
import com.nlm.common.error.NlmException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;

/**
* 腾讯移动分析签名返回请求数据接口
*
* @author my
*/
@Slf4j
@Configuration
public class AnalysisSign {
// 签名
@Value("${analysisSign.token}")
private String TOKEN;
// 该URL 带斜杆 https://mta.qq.com/h5/api/
@Value("${analysisSign.url}")
private String URL;
@Value("${analysisSign.appid}")
private String APPID;

/**
* 参数排序 涉及到参数排序可以调用
*
* @param map
* @return
*/
public String getMapToString(Map<String, String> map) {
Set<String> keySet = map.keySet();
// 将set集合转换为数组
String[] keyArray = keySet.toArray(new String[keySet.size()]);
// 给数组排序(升序)
Arrays.sort(keyArray);
// 因为String拼接效率会很低的,所以转用StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < keyArray.length; i++) {
// 参数值为空,则不参与签名 这个方法trim()是去空格
if (map.get(keyArray[i]).trim().length() > 0) {
sb.append(keyArray[i]).append("=").append(map.get(keyArray[i]).trim());
}
}
return sb.toString();
}

/**
* 签名返回数据接口
*
* @param ma
* @param url
* @return
*/
public String analysisResult(Map<String, String> ma, String url) throws NlmException {
// map 转 string
ma.put("app_id", APPID);
String passBackParams = getMapToString(ma);
log.info("map转换成String,结果:{}", passBackParams);
String sign = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update((TOKEN + passBackParams).getBytes());
byte[] resultByteArray = md.digest();
sign = new BigInteger(1, resultByteArray).toString(16);
} catch (NoSuchAlgorithmException e) {
log.error("签名错误!");
}
log.info("签名,{}", sign);
ma.put("sign", sign);
String result = HttpClientUtils.getInstance().doGet(URL + url + "?", ma);
log.info("后台服务分析返回结果:{}", result);
if (result != null || !"".equals(result)) {
JSONObject jsonObject = JSONObject.parseObject(result);
if ("0".equals(jsonObject.getString("code"))) {
return jsonObject.getString("data");
}
}
return result;
}
}

转载于:https://www.cnblogs.com/ziyegediao/p/10608194.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值