API数据接口-宙斯申请流程及更新流程
宙斯开发者中心,前身为宙斯开放平台(Jingdong Open Service 简称JOS) 是京东开放服务的载体,于2012年5月正式上线,旨在通过开放接口的形式将京东各系统能力对外开放,面向开发者提供商品、交易、仓储、物流、售后等零售技术服务能力,支持京东商家、ISV、个人及合作伙伴的业务系统与京东系统进行无缝对接,可以更加高效、灵活的处理电商业务。此次宙斯从接口开放平台升级为以开发者为中心的技术服务平台,致力于为广大开发者提供良好的平台环境,在实现京东零售能力开放及赋能的同时,打造可持续的商业生态环境,帮助开发者业务增长。
一、宙斯平台接入
1、登录地址:
https://jos-console.jd.com/#/app/createApp/Types
2、点击创建应用:
选择应用类型-京东广告营销-京媒-创建应用(如下图);
3、填写应用信息:
应用命名必须为XXX_AN,申请资料中必填项需填写完整;
注意:
- 文档中必填信息必须填写完整才可审核通过;
- 京东侧业务对接人员邮箱:
liuxi1280@jd.com;
(文档邮箱位置填写,注意不要填写媒体个人邮箱) - 接口名称:
jingdong.ssp.prod.dailyReport
- 测试调用API地址:https://open.jd.com/#/apiTestTools?id=8621&groupId=406
- 业务字段请求参数DEMO:在上述链接paramObject中输入下面demo可以生成请求地址和真实响应数据。可以根据测试调用API地址中右边的请求参数格式拼接JSON请求。不需要使用宙斯侧SDK。
{"dimension":["date"],"endDate":"2022-11-30","mediumCompanyId":724,"requestFrom":"JOS",
"josApiName":"jingdong.ssp.prod.dailyReport","mediumIds":[665567],"osTypeList":["2"],"tagIds":["829061626"],
"page":1,"pageSize":10,"startDate":"2022-10-01"}
4、审核:
将创建完成截图和申请资料邮件发送org.jan1@jd.com;
抄送zhanglixin33@jd.com;ranyang7@jd.com;zhangxuan158@jd.com;yangjing465@jd.com;liuxi1280@jd.com
1-7天时间审核;
5、审核成功后生成专属App key:
审核完成后,媒体需将App key、公司ID反馈给以上邮箱;
APPKEY获取方式:登录宙斯平台-应用管理-对应应用下APPKEY;
6、协议对接:
权限审核成功后选择京准通api对接协议进行对接;
7、Accesstoken获取方式:
- https://jos.jd.com/commondoc?listId=32
- 测试完毕后需发布,若未发布有效期过期后,无法使用;
- 测试期间有效期为1天,正式上线(应用发布)后有效期为1年
8、应用发布:
按照文档开发后,点击API测试工具进行测试,测试完成后发布应用即可。
二、接口请求方式
老接口于2023年1月已下线,新接口支持更丰富的指标及维度查询,接口文档详见https://jos.jd.com/apilist?apiGroupId=406&apiId=19750&apiName=jingdong.ssp.prod.dailyReport;
宙斯接入规范:https://jos.jd.com/commondoc?listId=33
注意:以下接口的《请求参数》需要传在宙斯接入规范中的360buy_param_json
字段中
均为post方式,除每个接口中的请求参数外,都有相同的公共参数。
公共请求参数:
名称 | 类型 | 必须 | 描述 |
---|---|---|---|
method | String | 是 | API接口名称 |
access_token | String | 否 | - |
app_key | String | 是 | 应用的app_key |
sign | String | 是 | 签名 |
timestamp | String | 是 | 时间戳,格式为yyyy-MM-dd HH:mm:ss,例如:2011-06-16 13:23:30。京东API服务端允许客户端请求时间误差为6分钟 |
format | String | 否 | 暂时只支持json |
v | String | 否 | API协议版本,可选值:2.0 |
三、加密说明
接口中部分字段需要加密传输:
加密和填充方式:AES/CBC/PKCS7Padding
编码方式:UTF-8
秘钥线下找对应产品获取。
public class AesUtils {
//偏移量
public static final String VIPARA = "FLKOk/5OuO87CD4hsIN4hw=="; //AES 为16bytes. DES 为8bytes
//编码方式
public static final String CODE_TYPE = "UTF-8";
//填充类型
public static final String AES_TYPE = "AES/CBC/PKCS7Padding";
//私钥
private static final String AES_KEY="O7hb+uACWs2LQ47J9w7m2A==";
//字符补全
private static final String[] consult = new String[]{"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G"};
@PostConstruct
private void init(){
if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null){
Security.addProvider(new BouncyCastleProvider());
}
}
/**
* 加密
*
* @param cleartext
* @return
*/
public static String encrypt(String cleartext) {
try {
byte[] ivByte = Base64.getDecoder().decode(VIPARA);
IvParameterSpec iv = new IvParameterSpec(ivByte);
byte[] keyByte = Base64.getDecoder().decode(AES_KEY);
SecretKeySpec key = new SecretKeySpec(keyByte, "AES");
Cipher cipher = Cipher.getInstance(AES_TYPE);
cipher.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] encryptedData = cipher.doFinal(cleartext.getBytes(CODE_TYPE));
byte[] encodedBytes = Base64.getUrlEncoder().encode(encryptedData);
return new String(encodedBytes);
} catch (Exception e) {
return "";
}
}
/**
* 解密
*
* @param encrypted
* @return
*/
public static String decrypt(String encrypted) {
try {
byte[] ivByte = Base64.getDecoder().decode(VIPARA);
byte[] byteMi = Base64.getUrlDecoder().decode(encrypted);
IvParameterSpec iv = new IvParameterSpec(ivByte);
byte[] keyByte = Base64.getDecoder().decode(AES_KEY);
SecretKeySpec key = new SecretKeySpec(keyByte, "AES");
Cipher cipher = Cipher.getInstance(AES_TYPE);
cipher.init(Cipher.DECRYPT_MODE, key, iv);
byte[] decryptedData = cipher.doFinal(byteMi);
return new String(decryptedData, CODE_TYPE);
} catch (Exception e) {
return "";
}
宙斯相关扩展阅读: