Oppo应用商店回传接口Java 实现备忘

本文描述了在为App推广接入Oppo应用商店回传数据接口时遇到的签名验证问题,涉及AES加密和签名生成方法,以及调用HTTP服务发送数据的过程。
摘要由CSDN通过智能技术生成

因app推广需要接入Oppo应用商店回传数据接口,接入过程中,踩了一些坑,主要还是因为签名的问题导致回传签名验证不通过,搜索也没有找到相应的博文,或许是因为复用了之前其他模块的代码导致遇到了一些本可以规避的问题,现把相关代码贴一下,仅做备忘。

@Data
public class OppoCallBackReq {
    private String ouId;
    private Integer ascribeType;
    private Integer type;
    private Integer channel;
    private Integer dataType;
    private String pkg;
    private Long timestamp;
    private Long adId;
}

@Component
public class OppoCipherUtils {
    @Value("${oppo.encode.key:oppoBase64Key}")
    private String oppoBase64Key;
    public String encode(String data) throws
            GeneralSecurityException {
        final Key dataKey = new SecretKeySpec(Base64.decodeBase64(oppoBase64Key),
                "AES");
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, dataKey);
        byte[] encryptData = cipher.doFinal(data.getBytes());
        return Base64.encodeBase64String(encryptData).replaceAll("\r",
                "").replaceAll("\n", "");
    }
}


@Value("${oppo.callback.url:https://api.ads.heytapmobi.com/api/uploadActiveData}")
private String oppoCallbackUrl;
@Value("${oppo.callback.salt:oppoCallbackSalt}")
private String oppoCallbackSalt;


public void callbackOppo(String oppoPkgName, Integer eventType, Long accountId) {
    OppoCallBackReq req = new OppoCallBackReq();
    Long now = System.currentTimeMillis();
    req.setTimestamp(now);
    req.setPkg(oppoPkgName);
    try {
        req.setOuId(oppoCipherUtils.encode(oaid));
    } catch (GeneralSecurityException e) {
        e.printStackTrace();
    }
    req.setDataType(eventType);
    req.setType(2);
    req.setChannel(1);
    req.setAscribeType(1);
    req.setAdId(accountId);
    Map<String, String> headers = new HashMap<>(1);
    headers.put("signature", MD5Util.MD5(JsonUtil.toJson(req) + now + oppoCallbackSalt));
    headers.put("timestamp", String.valueOf(now));
    headers.put("Content-Type", "application/json;charset=UTF-8");
    String result = httpService.post(oppoCallbackUrl, null, headers, req);
    if (StringUtil.isNotBlank(result)) {
        try {
            JSONObject jsonObject = JSONObject.fromObject(result);
            if (jsonObject != null) {
                String successStr = jsonObject.optString("ret");
                logger.info("callbackOppo successStr={}", successStr);
            }
        } catch (Exception e) {
            logger.info("callbackOppo Exception", e);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值