# 接口使用注意事项及对接说明
# 注意事项
# 双方通信机制
说明:由于接口通过云端进行信息交互,该机制受网络及信息同步机制影响,获取到数据会有一定延迟,爱奇艺影片需要下载到本地才能播放,为保证数据一致性,第三方调用爱奇艺影片列表类接口频率为1分钟一次。
# 接口使用注意
1、调用接口前先获取识别码:部分接口信息有赖于店铺识别码,建议先根据渠道识别码获取到店铺识别码,调取某些接口时传递对应的识别码 2、使用分类获取影片接口前,需先调用获取影片分类标签接口以获取到有哪些分类标签
# 对接说明
# 相关名词
# channelCode
渠道方对应的 code,用来唯一标记渠道。
# agentCode
每家店面对应的 code,用来唯一标记店面。
# secureCode
安全码,用来校验请求的合法性。
# timestatmp
时间戳,1970-01-01 00:00:00.000 到当前时间的毫秒数。
# signature
请求签名,根据 secureCode与时间戳计算得来,具体计算方法为:以字符串形式将 secureCode跟时间戳拼接,然后计算拼接字符串的MD5值。以下为Java代码示例,仅供参考:
/**
* 根据安全码 & 时间戳生成签名 *
* @param secureCode 安全码
* @param timestamp 时间戳
* @return 返回签名字符串
*/
public String getSignature(String secureCode, Long timestamp) {
String str = secureCode + timestamp;
return DigestUtils.md5Hex(str);
}
# 安全认证
方案:HTTPS 双向认证 + IP 白名单控制 + 安全码校验。 渠道方后台系统与爱奇艺云端系统通信采用HTTPS加密传输,证书由爱奇艺提供,并通过线下邮件等方式进行交付。 渠道方后台系统需要向爱奇艺提供固定的服务器IP地址,由爱奇艺进行白名单处理,非白名单IP地址的访问请求会被拒绝。在以上基础上,爱奇艺提供一个安全码,该安全码用来生成每次请求附带的签名,用来校验请求的合法性。安全码通过线下邮件等方式进行交付。出于安全需要,安全码会根据情况需要进行更新。
# 参考代码
public class JdApiApplicationTests4 {
public static String httpsJsonRequest(String requestUrl, String requestMethod, String outputStr) throws Exception {
TrustManagerFactory trustFactory = TrustManagerFactory.getInstance("SunX509", "SunJSSE");
KeyStore tsstore = KeyStore.getInstance("JKS");
tsstore.load(JdApiApplicationTests4.class.getResourceAsStream("/test/client-trusted.keystore"), "moviebar2.0"
.toCharArray());
trustFactory.init(tsstore);
TrustManager[] trustManagers = trustFactory.getTrustManagers();
KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
KeyStore keystore = KeyStore.getInstance("JKS");
keystore.load(JdApiApplicationTests4.class.getResourceAsStream("/test/client.keystore"), "moviebar2.0"
.toCharArray());
keyFactory.init(keystore, "moviebar2.0".toCharArray());
KeyManager[] keyManagers = keyFactory.getKeyManagers();
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(keyManagers, trustManagers, new java.security.SecureRandom());
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl);
HttpsURLConnection httpsUrlConn = (HttpsURLConnection) url.openConnection();
httpsUrlConn.setReadTimeout(1000 * 50);
httpsUrlConn.setSSLSocketFactory(ssf);
httpsUrlConn.setHostnameVerifier(new HostnameVerifier() {
public boolean verify(String s, SSLSession sslSession) {
return true;
}
});
httpsUrlConn.setDoOutput(true);
httpsUrlConn.setDoInput(true);
httpsUrlConn.setUseCaches(false);
httpsUrlConn.setRequestProperty("Content-Type", "application/json");
httpsUrlConn.setRequestMethod(requestMethod);
if ("GET".equalsIgnoreCase(requestMethod)) {
httpsUrlConn.connect();
}
if (null != outputStr) {
OutputStream outputStream = httpsUrlConn.getOutputStream();
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(httpsUrlConn.getInputStream(),
"utf-8"));
String str = null;
StringBuilder buffer = new StringBuilder();
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
httpsUrlConn.disconnect();
return buffer.toString();
}
public static void main(String[] args) {
try {
String url = "https://api.y.iqiyi.com/test/hello";
String response = JdApiApplicationTests4.httpsJsonRequest(url, "GET", null);
System.out.println(response);
} catch (Exception e) {
System.out.println(e);
}
}
}
# 错误代码
接口调用出错时,统一返回以下 JSON 格式的数据:
{
"msg": "参数错误",
"code": "E00001"
}
具体错误代码参考如下:
错误代码 | 错误类型 |
---|---|
A00000 | 成功 |
E00001 | 参数错误 |
E00002 | 业务处理出错,具体查看返回数据中的 msg |
E00003 | 超过设备最大上限 |
E00004 | channelCode 不合法 |
E00018 | 设备未注册 |
E00101 | 播控平台账号不足 |
E00102 | 记账失败 |
E00109 | 订单重复提交 |
E10000 | 余额不足 |
E10001 | 财务系统没有此账号 |