# OTT订单状态查询接口
# 简介
# 业务介绍
合作方通过本文档的接口实现查询用户权益是否开通
# 接口定义
# 应用场景
查询订单状态信息
# 接口域名
环境 | 域名 |
---|---|
生产 | openapi.vip.iqiyi.com |
测试 | test-openapi.vip.iqiyi.com |
# URL
/ott/searchSpOrder.action
# 请求方式
参数 | 说明 |
---|---|
Method | GET/POST |
Content-Type | application/x-www-form-urlencoded |
# 请求参数
变量名 | 名称 | 是否必须 | 类型 | 说明 |
---|---|---|---|---|
partner | 合作方编码 | 是 | String | 合作方的唯一标识 |
signature | 签名串 | 是 | String | RSA签名,签名方法见RSA加密描述 |
data | 内容 | 是 | String | 内容为json格式的字符串,并采用base64编码 |
# data参数
字段名 | 是否必填 | 类型 | 说明 |
---|---|---|---|
partnerOrderId | 是 | String | 合作方订单号 |
version | 否 | String | 当前version=1.0,如果需要返回权益的起止时间,就必须传此参数 |
# 请求示例
样例如下:
data:{
"partnerOrderId": "XXXXXXX" , #合作方订单号
"version": "1.0", #String类型,当前version=1.0,如果需要返回权益的起止时间,就必须传此参数
}
# 返回参数
爱奇艺在收到查询订单的请求后,返回内容为Json String,其参数如下
字段名 | 类型 | 说明 |
---|---|---|
data | String | 消息数据,内容为json格式的字符串,采用UrlBase64 Encode |
signature | String | 对上面data数据的签名,爱奇艺用RSA私钥进行签名,同时提供相应的public key给合作方用于验证 |
# 返回示例
data样例如下:
{
"err_code": 200, #200代表成功,其他为错误码(String型)
"err_msg": "OK", #成功填:OK,其他情况填写具体的错误信息(String型)
"time": 1566284832, #时间戳(单位秒) (Long型)
"data": #data是一个json数组转换的字符串
"[{
"pay_time":"1565939673", #订单支付时间UTC时间(单位秒)(String型)
"content_desc": "单点内容id", #产品类型为单点时有意义(String型)
"product_desc":"t_prod_1", #产品描述(String型)
"pid\":\"t_prod_1", #合作方产品编号
"order_fee":1000, #购买金额,int类型,(单位分)指合作方同步过来的费用
"status":1, #订单是否有效,int类型,1-已支付
"vip_start_time":"2019-08-16 15:14:33", #权益开始时间,格式yyyy-MM-dd HH:mm:ss,当version>=1.0时返回 (String型)
"vip_end_time":"2019-08-17 15:14:33", #权益结束时间,格式yyyy-MM-dd HH:mm:ss,当version>=1.0时返回 (String型)
"partner_userId":"13128653926", #OTT的用户唯一标识(String型)
"iqiyi_userId":1595579677 #对应爱奇艺账号(String型)
}]"
}
# 返回码定义
返回码code | 描述 | 备注 |
---|---|---|
200 | 成功 | |
301 | 参数错误 | |
302 | RSA解密错误 | |
303 | RSA签名错误 | |
306 | 系统错误 | |
328 | 订单不存在 |
# 附录
# 生成RSA key命令参考
openssl genrsa -out rsa_private_key.pem 1024
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt > pkcs8_rsa_private_key.pem
openssl rsa -in pkcs8_rsa_private_key.pem -pubout -out pkcs8_rsa_public_key.pem
# RSA加密描述
采用RSA计算签名,具体计算方法如下:
1、 调用接口时对data参数进行base64计算,得到base64编码处理的data;
2、 加密数据,生成signature;
# JAVA版本示例代码如下:
public class Test {
public static String content = "{\"partnerOrderId\":\"111\",\"version\":\"1.0\"}";
public static String privateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALbjYMJwIW+PcvzM+k4vSr09IEKbaXWam33bnqDO+Qsj4POHevGe/jvOuUI/bQn/jXD6WHMivk/N+9Q4firmU1IDRl6fZIA1rfn4S0j+U8Z4bIxFURaBfcrRkA8I3cEQnuCMoD3cJXYZ/uuWogFXzIkTipHj7KrbULIOiR2Zp7ePAgMBAAECgYBJFgi+6yyRdpQPLqMAx6logpr3wz+bvdNRsohr3wprR0VITOX21QDoSa6DKPGcQ0H02jaqnEHNhpWSs5jH8A9vU4XwprOLmo21GYqcnBGjMhZqrJ/IetATqoVBl41zfnsAzZwKQw4hZBsdnhQXMUwoCB4rdUyNMGV4itjhZgBm0QJBAOd7f5j7OAkwU/bfkEtacM1/emgZ5a0Ys0J5RcRPrbhkkwiePKr0O+TQ3tDTRT0NY26DWm/U5+OwKEGt/VyNBl0CQQDKQkcKl8l+Ds518DTj3V3Xj6y0glj6eMYNLIYqi0UPPqtY1ZvvU41FYaTCCZDx/hBQQoOkk0ouefVCqqQST/7bAkAlhXguVPJFUwcZKi3aeQN12+b8fs4i27Ea4ktzwbKYA/1tVTDiSQp4UX78fHJprgTjAfmjzO/1kTVFSC2cVeOlAkB78OFXvGvcs3YRD4FZoO1AiupqMvYThq7Wo9ITgARxsxWM+ljz719ChPNRdEs9/1I/3IKO9zMeB94jXC3uitbBAkEAiT0dweF9U/7OyE74DV5tHbVHWbqEMfIzZ+NzfVlXA91wcS6uAhovjOwCk1/ngToudUbLCazTkSOlWl1mhKBA+A==";
public static void main(String[] args) throws Exception {
String encodeData = Base64.encode(content.getBytes("UTF-8"));
System.out.println(encodeData);
String signature = RSASignature.sign(encodeData, privateKey, "utf-8");
System.out.println(signature);
}
}
# 加密工具类
# RSA加密
public class RSASignature{
public static final String SIGN_ALGORITHMS = "SHA1WithRSA";
/**
* RSA签名
*
* @param content 待签名数据
* @param privateKey 商户私钥
* @param encode 字符集编码
* @return 签名值
*/
public static String sign(String content, String privateKey, String encode) {
String charset = "utf-8";
if (!StringUtils.isEmpty(encode)) {
charset = encode;
}
try {
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(Base64Util.decode(privateKey));
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);
java.security.Signature signature = java.security.Signature
.getInstance(SIGN_ALGORITHMS);
signature.initSign(priKey);
signature.update(content.getBytes(charset));
byte[] signed = signature.sign();
return Base64Util.encode(signed);
} catch (Exception e) {
log.error("[sign exception]", e);
}
return null;
}
}
# 返回数据
1、接口返回参数时解密数据:
public class Test{
String decodeData = new String(Base64.decode(data),"UTF-8");
}
# 在线测试
参数 | 值 | 备注 |
---|---|---|
partner | ott_test |
所需密钥:
参数 | 值 |
---|---|
合作方私钥 | MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALbjYMJwIW+PcvzM+k4vSr09IEKbaXWam33bnqDO+Qsj4POHevGe/jvOuUI/bQn/jXD6WHMivk/N+9Q4firmU1IDRl6fZIA1rfn4S0j+U8Z4bIxFURaBfcrRkA8I3cEQnuCMoD3cJXYZ/uuWogFXzIkTipHj7KrbULIOiR2Zp7ePAgMBAAECgYBJFgi+6yyRdpQPLqMAx6logpr3wz+bvdNRsohr3wprR0VITOX21QDoSa6DKPGcQ0H02jaqnEHNhpWSs5jH8A9vU4XwprOLmo21GYqcnBGjMhZqrJ/IetATqoVBl41zfnsAzZwKQw4hZBsdnhQXMUwoCB4rdUyNMGV4itjhZgBm0QJBAOd7f5j7OAkwU/bfkEtacM1/emgZ5a0Ys0J5RcRPrbhkkwiePKr0O+TQ3tDTRT0NY26DWm/U5+OwKEGt/VyNBl0CQQDKQkcKl8l+Ds518DTj3V3Xj6y0glj6eMYNLIYqi0UPPqtY1ZvvU41FYaTCCZDx/hBQQoOkk0ouefVCqqQST/7bAkAlhXguVPJFUwcZKi3aeQN12+b8fs4i27Ea4ktzwbKYA/1tVTDiSQp4UX78fHJprgTjAfmjzO/1kTVFSC2cVeOlAkB78OFXvGvcs3YRD4FZoO1AiupqMvYThq7Wo9ITgARxsxWM+ljz719ChPNRdEs9/1I/3IKO9zMeB94jXC3uitbBAkEAiT0dweF9U/7OyE74DV5tHbVHWbqEMfIzZ+NzfVlXA91wcS6uAhovjOwCk1/ngToudUbLCazTkSOlWl1mhKBA+A== |
点击此处进行接口调试