开发
API

【泛知识】添加课程

API 说明

该接口用于添加新课程,调用成功后会返回课程唯一标识 product_id 且课程会进审,审核通过后课程上架。具体添加流程如下:

使用限制

接口说明

前提条件

  • 添加的课程必须为首次上传,若要修改已有课程请调用修改课程接口
  • 资源 uri 类型的字段需要先调用资源上传接口,收到上传成功回调消息,或者调用查询资源上传状态接口确认状态为上传成功后才有效,否则会报"无效的 uri"错误

注意事项

  • 审核通过后返回的 product_id 才生效,审核不通过返回的 product_id 失效,按照要求修改后需要重新调用添加课程接口上传获取新的 product_id
  • 审核通过后自动上架,无需再调用上架课程接口
  • 调用添加接口后,如果需要对审核中的课程进行修改,请调用修改课程接口
  • 若未做额外备注,string 类型的字段默认支持字符集为 utf-8
  • 价格单位统一为分

基本信息

HTTP URL

https://developer-product.zijieapi.com/product/api/add

HTTP Method

POST

权限要求

AccessToken鉴权

请求头

名称

类型

是否必填

描述

示例

Content-Type


string

请求的MIME类型,统一为application/json

"application/json"


请求参数

名称

类型

是否必填

描述

示例

access_token

string

接口调用凭证

"0801121846735352506a356a67395167574457583155554e67653d3d"

product_type

enum

商品类型,枚举值

1: 课程

1

product

object

商品信息

详见下方product参数

参数说明

product--商品信息

名称

类型

是否必填

描述

示例

common_product_params

object

商品通用参数

详见下方common_product_params参数

course_params

object

课程参数,当商品类型为课程(product_type=1)时必填

详见下方course_params参数

common_product_params--商品通用参数

名称

类型

是否必填

描述

示例

appid

string

小程序appid

"tt12fd9846e1023401"

first_class

number

一级课程分类,详见这里

10000

second_class

number

二级课程分类,详见这里

10100

title

string

课程名称,12字节<= title字符长度 <=60字节,汉字字符占2个字节

"python入门教程"

purchase_precaution

string

购课须知,0 < perchase_precaution字符长度<=500字节,汉字字符占1个字节

"小程序内购买课程为课程兑换权益,购买成功后将自动兑换到您的账户内,可在****中重复学习观看。"

industry_type

enum

行业类目, 枚举值

1-泛知识

1

product_fulfillment_lst

array

课程履约列表,uri需要调用上传资源接口成功后获取

要求:

  • 列表中的课程履约内容顺序需要与页面中展示顺序一致
  • 0 < 列表长度 <=2000

[

{

      "fulfillment_content": {

      "fulfillment_uri": "product/resource/0001d044d41140d53ce9e57d793a4321",

      "text": "",

      "name": "课程履约视频"

      },

      "fulfillment_type": 1

},

{

      "fulfillment_content": {

      "fulfillment_uri": "product/resource/1001d044d41140d53ce9e57d793a4321",

      "text": "",

      "name": "课程履约音频"

      },

      "fulfillment_type": 2

},

{

      "fulfillment_content": {

      "fulfillment_uri": "product/resource/2001d044d41140d53ce9e57d793a4321",

      "text": "",

      "name": "课程履约图片"

      },

      "fulfillment_type": 3

}

]

price_info

object

课程价格信息

{

"unit": "天",

"price": 5000,

"real_price": 4900

}

path_info_lst

array

抖音视频挂载的小程序页面路径列表,0 < 列表长度 <= 5,需要包括此课程的所有路径,只有在该列表中的路径才能在抖音视频锚点处挂载

[

{

      "path": "page/index/index",

      "query": {

            "curriculum_id": "382648"

      }

}

]

product_detail_lst

array

商品详情列表,0 < 列表长度 <= 2000,列表中的商品详情顺序需要与小程序页面中展示顺序一致

[

{

      "text": "1. python安装步骤",

      "img_uri": "product/resource/5001d044d41140d53ce9e57d793a4321"

}

]

anchor_info

object

锚点信息

{

"video_anchor_info": {

      "anchor_title": "python入门教程"

}

}

callback_data

string

开发者回调,<= 1024byte

"开发者自定义回调信息"

product_img_uri

string

否,若要接入交易2.0则必填

课程图片uri, 需要调用资源上传接口获取,开头为"tos-cn-i-b2i6zad4el/"

"tos-cn-i-b2i6zad4el/b0e72a2e9c5ee919c65a9b0276315cf9"

product_fulfillment--履约内容

名称

类型

是否必填

描述

示例

fulfillment_content

object

履约详情,用户购买课程后能学习的内容

{

"fulfillment_uri": "product/resource/0001d044d41140d53ce9e57d793a4321",

"name": "课程履约视频"

}

fulfillment_type

enum

履约类型,枚举值,详见fulfillment_type枚举列表

3

fulfillment_content--履约详情

名称

类型

是否必填

描述

示例

fulfillment_uri

string

履约文件资源uri,需要调用上传课程资源接口上传后获得,当履约类型不为文字或富文本时必填

"product/resource/1001d044d41140d53ce9e57d793a4321"

text

string

文字内容,当履约类型为文字,图文和富文本时必填,0 < text字符长度 < 100000字节,中文占1个字符

"Python支持多种编程范型,包括函数式、指令式、反射式、结构化和面向对象编程。"

name

string

履约内容名称,0 < 字符长度 <= 100字节,中文占1个字符

"第一节: python介绍"

price_info--价格信息

价格单位为分

real_price 与 range_min_price,range_max_price 互斥

real_price 与 range_min_price,range_max_price 必选其中一项填写

价格大小限制关系: 0 < real_price <= price <= 1000000,0 < range_min_price <= price <= range_max_price <= 1000000

名称

类型

是否必填

描述

示例

unit

string

价格粒度单位,比如50元/节,这里填"节",目前统一写"节"

price

number

优惠活动前的服务原始价格,0 < price <= 1000000

5000

real_price

number

当前服务的实际成交价格,real_price与价格区间不同时出现,且<= price

4900

range_min_price

number

当前服务的实际成交价格区间:最低价格,0 < range_min_price <= 1000000

3000

range_max_price

number

当前服务的实际成交价格区间:最高价格,0 <= range_min_price <= 1000000

6000

示例:

// 商品原价为50元,实际成交金额为49元
{
    "unit": "节",
    "price": 5000,
    "real_price": 4900
}

// 商品原价为50元,且30元 <= 实际价格 <= 60元
{
    "unit": "节",
    "price": 5000,
    "range_min_price": 3000,
    "range_max_price": 6000
}

path_info--路径信息

名称

类型

是否必填

描述

示例

path

string

课程商品详情页路径,没有前导的'/',0 < path字符长度 <= 512字节

"page/index/index"

query

map(string,string)

课程商品详情页路径query参数

0 < key字符长度 <= 64字节

0 < value字符长度 <= 128字节

{

"curriculum_id": "4938274"

}

示例

// 完整路径如果是 page/index/index?curriculum_id=4938274,path_info如下
{
  "path": "page/index/index",
  "query": {
    "curriculum_id": "4938274" // 注意此处key和value都必须为string类型,否则接口会报400错误
  }
}

product_detail--商品详情

可以是文字,图片,图文或者富文本类型

名称

类型

是否必填

描述

示例

text

string

文字和图文类型必填,0 < text字符长度 <= 100000字节,汉字占1个字符,该字段仅用于填写文字内容,富文本内容请在在填写在rich_text.text字段

"该节课程主要用于帮助****在***方面得到***的提升"

img_uri

string

图片和图文类型必填,uri需要调用上传课程资源接口成功后获取

"product/resource/1001d044d41140d53ce9e57d793a4321"

rich_text

object

富文本类型必填,字符不要做转义,需要符合富文本格式,0 < text字符长度 <= 100000字节,汉字占1个字符













































rich_text--商品详情富文本内容

名称

类型

是否必填

描述

示例

text

string

富文本字符串,字符不要做转义,需要符合富文本格式,0 < 字符长度 <= 100000字节,汉字占1个字符











































anchor_info--锚点信息

名称

类型

是否必填

描述

示例

video_anchor_info

object

视频锚点信息,0 < anchor_title字符长度 <= 24字节,汉字占2个字符

{

anchor_title: "示例锚点标题"

}

course_params--课程参数

名称

类型

是否必填

描述

示例

teacher_id

string

否,若课程需要接入交易系统2.0,老师id和机构id必填其中一个

老师id,需要调用添加资质接口获取,老师id必须过审后才能使用

"T7890378073078"

institution_id

string

否,若课程需要接入交易系统2.0,老师id和机构id必填其中一个

机构id,需要调用添加资质接口获取,老师id必须过审后才能使用

"I78947393874947"

course_num

number

否,若课程需要接入交易系统2.0则必填

课程节数,0 < course_num <= 10000

3

refund_label

object

否,若课程需要接入交易系统2.0则必填

退款标签,详见下方refund_label参数介绍

{

"type": 1,

"day_before_use_info": {

      "day": 7

}

}

use_label

object

否,若课程需要接入交易系统2.0则必填

使用标签,若不填写则默认为「购买后永久有效」

{

"valid_date": "2022-12-01"

}

start_timestamp

number

课程开始时间,毫秒时间戳,0 < start_timestamp < end_timestamp

1649662751000

end_timestamp

number

课程结束时间,毫秒时间戳,0 < start_timestamp < end_timestamp

1649662751000

refund_label--退款标签

名称

类型

是否必填

描述

示例

type

enum

退款标签类型,枚举值

1

day_before_use_info

object

否,若type=1则必填

「xx天未学可退」标签,其中「xx」为填写的天数,0 < day <= 100

{

day: 7

}

rest_not_learn_info

object

否,若type=2则必填

「学习进度不足xx%可退」标签,

0 <= rest_percent <= 100,当rest_percent=0或100时标签和其他情况不同:

0: 「不支持退款」

100: 「随时可退」

{

rest_percent: 80

}

use_label--使用标签

名称

类型

是否必填

描述

示例

valid_date

string

「yyyy-mm-dd前有效」使用标签日期,格式必须为"yyyy-mm-dd"

"2022-06-29"

请求示例

{
  "access_token": "0801121846756b44471029384758795958537a647053646f773d3d",
  "product_type": 1,
  "product": {
    "common_product_params": {
      "appid": "tt11fd1220e13bba1234",
      "first_class": 10000,
      "second_class": 10100,
      "title": "python入门教程",
      "purchase_precaution": "小程序内购买课程为课程兑换权益,购买成功后将自动兑换到您的账户内,可在****中重复学习观看",
      "product_fulfillment_lst": [
        {
          "fulfillment_content": {
            "fulfillment_uri": "product/resource/1001d044d41140d53ce9e57d793a4321",
            "name": "第一节: python介绍"
          },
          "fulfillment_type": 3
        }
      ],
      "industry_type": 1,
      "price_info": {
        "unit": "节",
        "price": 5000,
        "real_price": 4900
      },
      "path_info_lst": [
        {
          "path": "page/index/index",
          "query": {
            "curriculum_id": "29384759"
          }
        }
      ],
      "product_detail_lst": [
        {
          "rich_text": {
            "text": "<b><i>1. python安装步骤</i></b>"
          }
        }
      ],
      "anchor_info": {
        "video_anchor_info": {
          "anchor_title": "python入门教程"
        }
      },
      "product_img_uri": "tos-cn-i-b2i6zad4el/b0e72a2e9c5ee919c65a9b0276315cf9"
    },
    "course_params": {
      "teacher_id": "T7283947392973",
      "institution_id": "I1039473947393",
      "course_num": 637,
      "refund_label": {
        "type": 1,
        "day_before_use_info": {
          "day": 7
        }
      },
      "use_label": {
        "valid_date": "2022-12-01"
      },
      "start_timestamp": 1649662751000,
      "end_timestamp": 1681198751000
    }
  }
}

响应参数

名称

类型

描述

示例值

err_no

number

错误码,0为成功,其余错误码详见错误码模块

0

err_msg

string

错误提示

"success"

log_id

string

日志id,用于定位错误

"101210271802130982251451520919C123"

data

object

返回数据,成功后返回课程id,开发者需要将id记录下来以管理该课程

注意返回的product_id是int64类型的,直接转换成javascript的number类型会导致精度缺失(如果id最后三位是000则大概率是精度缺失),详情请参考这里精度问题及解决方法

audit_id用于定位课程审核情况

{

product_id: 7049216064080592940

audit_id: "KNC202202090019433632267267"

}

data--返回数据

名称

类型

描述

示例值

product_id

int64

课程id,课程唯一标识,返回的product_id是int64类型的,直接转换成javascript的number类型会导致精度缺失(如果id最后三位是000则大概率是精度缺失),详情请参考这里精度问题及解决方法

7049216064080592940

audit_id

string

audit_id用于定位课程审核情况

"KNC202202090019433632267267"

响应示例

正常示例

{
  "err_msg": "success",
  "err_no": 0,
  "log_id": "2021122721141201022513314212345678",
  "data": {
    "product_id": 6543216888019123456,
    "audit_id": "KNC202202090019433632123456"
  }
}

异常示例

{
  "err_msg": "无效的AccessToken",
  "err_no": 10001,
  "log_id": "2021122721141201022513314212345678"
}

枚举参数

fulfillment_type--履约类型

履约类型

履约类型编码

上传方式

视频

1

课程资源上传接口上传

音频

2

课程资源上传接口上传

图片

3

课程资源上传接口上传

文字

4

功能接口字段中直接携带上传

图文

5

课程资源上传接口上传

富文本

6

功能接口字段中直接携带上传

其他

100

课程资源上传接口上传

refund_label->type(退款标签类型)

退款标签类型

退款标签类型编码

「xx天未学可退」

1

「学习进度不足xx%可退」

2

点击纠错
该文档是否对你的开发有所帮助?
有帮助
没帮助
该文档是否对你的开发有所帮助?
有帮助
没帮助