会员对外文档平台 会员对外文档平台
登录
接口
介绍
  • TOB直充接口

  • TOB激活码直充接口

  • OTT直充接口

  • OTT自动续费接口

  • OTT激活码直充接口

    • 激活码充值接口
    • 激活码状态查询接口
  • 通用接口

  • 内容点播接口

  • 卡券类接口

  • 用户信息接口

  • 会员福利接口

  • 合作方客户FV管理

# OTT激活码充值接口

# 简介

# 业务介绍

支持TOB业务合作方发放爱奇艺会员激活码

# 接口定义

# 应用场景

用户在OTT方输入激活码,OTT将激活码传给爱奇艺进行兑换。
爱奇艺线下将激活码信息发给OTT方,信息应包括:
1)激活码
2)OTT方需设计验证码,用户需输入验证码及激活码才能提交,避免用户频繁刷接口带来不必要的访问
3)OTT方需进行基本的前端校验,位数在[1,19]位之间,激活码举例:3942-1C71-6A99-21A0

# 接口域名

环境 域名
生产 openapi.vip.iqiyi.com
测试 test-openapi.vip.iqiyi.com

# URL

/sp/actCodePay.action

# 请求方式

参数 说明
Method GET/POST
Content-Type application/x-www-form-urlencoded

# 请求参数

字段名 是否必须 类型 说明
partner 是 String 合作方编号,在爱奇艺侧配置,联系爱奇艺相关人员获取
signature 是 String 对上面data数据的签名,签名采用RSA,加密规则见RSA加密描述,OTT提供public key给爱奇艺,用于验证此消息是否由OTT发出
data 是 String 消息数据,内容为json格式的字符串,采用UrlBase64编码

# data数据

变量名 数据类型 是否必须 描述
msg_id String 是 消息号,随机生成一个用于标识此消息
cardCode String 是 激活码,例如:3942-1C71-6A99-21A0这种格式的
spUserId String 是 OTT方用户标识,即为该用户开通权益
payTime String 是 兑换UTC时间(单位:秒)
dev_mac String 否 设备标识
version Integer 否 接口版本号
order_id String 否 合作方订单id

# 请求示例

样例如下:

data:{
    "msg_id": "XXXXXXX" , #String类型,消息号,随机生成一个用于标识此消息。
    "cardCode": "3942-1C71-6A99-21A0", #String类型,激活码,例如:3942-1C71-6A99-21A0这种格式的
    "spUserId": "XXXXXXXX", #String类型,OTT方用户标识,即为该用户开通权益
    "payTime": "XXXXXXXX", #String类型,兑换UTC时间(单位:秒)
    "dev_mac": "XXXXXXXX", #String类型,设备标识
    "order_id":  "XXXXXXXX", #String类型,合作方订单id
} 

# 返回参数

爱奇艺在收到OTT的下单通知后,应答OTT的服务器,内容为Json String,其参数如下:

字段名 重要性 类型 说明
data 必填 String 消息数据,内容为json格式的字符串,采用UrlBase64 Encode
signature 必填 String 对上面data数据的签名,爱奇艺用RSA私钥进行签名,同时提供相应的public key给OTT用于验证

# 返回示例

{
	"msg_id": "6b949cfcc54046488bdbca3ecbfb571a",
	"err_code": 200, #200代表成功,其他为错误码
	"err_msg": "OK", #成功填:OK,其他情况填写具体的错误信息
	"time": 1369193070, #应答时间戳UTC时间(单位秒)
}

# 返回码说明

错误码 说明 备注
A00000 成功
Q00301 参数错误
Q00307 签名错误
Q00332 系统错误
Q00409 订单不存在

# 附录

# 生成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 = "{\"user_id\":\"111\",\"order_id\":\"111\",\"order_fee\":1000,\"order_products\":[{\"id\":\"1001\",\"quantity\":1,\"cp_content_id\":\"101\",\"total_fee\":1500,}],\"pay_time\":1369193066}";
    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==
点击此处进行接口调试
在线调试

← OTT取消长订单自动续费接口(自主代扣模式) OTT激活码状态查询接口 →