对接抖店API-04 批量解密

因为国家政策原因, 电商平台对用户信息进行保密处理, 所有会返回有用户敏感信息的接口都会发现变成了密文,所有只有调用开发平台API 对密文进行解密操作。

官方文档 : 抖店开放平台

请求入参

JsonArray [{"auth_id" :“商品id”,"cipher_text":“密文”  },{"auth_id" :“商品id” ,,"cipher_text":“密文”  },{"auth_id":""}]

参数名称参数类型是否必须示例值参数描述
cipher_infosJsonArray待解密的密文列表,每次调用不超过50条
auth_idString123业务标识,value为抖音订单号
cipher_textString待解密密文,具体内容参考[数据安全加密对接文档](https://op.jinritemai.com/docs/guide-docs/56/589)密文

当开始写批量解密的测试Demo的时候, 发现数据格式无论怎么样都是错的, 一直返回签名失败等....... 然后突然想起来之前看到的一个简单介绍,好像解密的时候需要对特殊字符进行一个转义的说明 , 然后我就翻到了那篇说明:

如果param_json字段过长,或者param_json内有‘#‘等特殊符号(需要转译),可以使用http post请求方式,并将param_json的值(比如 {"cid":"12","page":"1"})放在请求body里面,原有的url paramter中的param_json不传或者传空即可(其他字段比如timestamp,app_key,method,v,sign,accesstoken等还是按照原有方式传,body中的param_json仍然参与签名计算

抖店开放平台

当时看见这个说明的时候一头雾水,不知道该转义成什么格式 。完全不知道怎么处理,只好下了一个工单,请教专业人员。

结果这个工作人员的回答非常的敷衍, 不知道在哪复制出的答案,还有遗漏的字 ,完全无语了,但是看了后还是发现了华生 。

        请求参数param_json中有"#"等需要urlencode

直接使用 URLEncoder.encode(param_json.toString())
然后就可以正常获取到解密数据了,真的是无语。
下面是测试Demo:

/***************************************   接口批量解密      **********************************/
    public static String batchDecrypt(JSONArray jsonArray){
        //请求示例 : https://openapi-fxg.jinritemai.com/order/batchDecrypt?app_key=your_appkey_here&method=order.batchDecrypt&access_token=your_accesstoken_here&param_json={}&timestamp=2018-06-19%2016:06:59&v=2&sign=your_sign_here
        String order_id = "订单编号";
        String cipherText = "加密字符串----#U/kHlfAE#g/aF1KRQSM6kIPSf1+ScpQU/CXXQ+z1ZLpiQbpjDYpfdQwBLaaOpzP35bhIaMOIFA/DLnU0wYUwD9IbytCYDIS+N14jJiKIV9mAK*CgkIARCtHCAB##";
        //字符串转义
        String method = "order.batchDecrypt";
        String methodStrUrl = "/order/batchDecrypt";

        JSONObject json = new JSONObject(true);
        json.put("auth_id",order_id);
        json.put("cipher_text",cipherText);
        jsonArray.add(json);

        //之前获取到的token
        String accessToken = "本地accessToken";
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = simpleDateFormat.format(new Date());

        //参数加密
        JSONObject param_json = new JSONObject(true);
        param_json.put("cipher_infos",jsonArray);
        //获取签名
        String sign = fetchSign(method, param_json.toString(), time);
        //地址后的参数
        StringBuffer param = new StringBuffer();
        param.append("app_key").append("=").append(APP_KEY).append("&");
        param.append("method").append("=").append(method).append("&");
        param.append("access_token").append("=").append(accessToken).append("&");
        param.append("param_json").append("=").append( URLEncoder.encode(param_json.toString())).append("&");
        param.append("timestamp").append("=").append(time).append("&");
        param.append("v").append("=").append("2").append("&");
        param.append("sign").append("=").append(sign);

        // 发送请求
        String response = HttpUtils.sendPost(DOUDIAN_URL + methodStrUrl, param.toString());

        JSONObject jsonObject = JSONObject.parseObject(response);
        if (jsonObject.getIntValue("err_no") == 0) {
            JSONObject data = jsonObject.getJSONObject("data");
            System.out.println(data);
            if (null != data || data.size()!=0){
//                return  data.getJSONObject("decrypt_text").toString();
            }

        }
        return null;
    }

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值