以下接口由您的系统主动调用我们的API,用于获取资源、发布稿件等操作。
获取媒体资源列表,支持按媒体类型、ID筛选,支持分页。
POST https://open-rw.jzguai.com/api/v1/resource
| 参数 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
model_id |
int | 是 | 媒体类型ID | 1(网络媒体) |
resource_id |
int | 否 | 上游媒体ID,不填则查询所有 | 12786 |
limit |
int | 否 | 每页条数,默认300,最大1000 | 300 |
page |
int | 否 | 当前页码 | 1 |
| model_id | 类型名称 | 说明 |
|---|---|---|
| 1 | 网络媒体 | 门户网站、新闻网站等 |
| 2 | 自媒体 | 今日头条、百家号等 |
| 3 | 微信 | 微信公众号 |
| 4 | 微博 | 新浪微博 |
| 5 | 贴吧 | 百度贴吧 |
| 6 | 论坛 | 各大论坛 |
| 7 | 问答 | 百度知道、知乎等 |
| 8 | 友链 | 友情链接 |
| 9 | 代写 | 文案代写服务 |
| 10 | 小红书 | 小红书笔记推广 |
| 11 | 百度百科 | 百科词条创建 |
| 12 | 品牌宝 | 品牌宝推广 |
| 13 | 短视频 | 抖音、快手等短视频平台 |
<?php
// 配置信息
$apiUrl = "https://open-rw.jzguai.com/api/v1/resource";
$appKey = "YOUR_APP_KEY";
// 请求数据
$requestData = [
"model_id" => 1,
"limit" => 300,
"page" => 1
];
// 创建加密实例
require_once 'Encrypt.class.php';
$encrypt = new Encrypt();
// 加密请求
$postData = $encrypt->encrypt($requestData, $appKey);
// 发送请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode != 200) {
die("请求失败,HTTP状态码: " . $httpCode);
}
// 解析响应
$responseData = json_decode($response, true);
if (!$responseData) {
die("响应数据解析失败");
}
// 解密响应
try {
$decryptedData = $encrypt->validateRequest($responseData);
print_r($decryptedData);
} catch (Exception $e) {
die("响应解密失败: " . $e->getMessage());
}
?>
{
"errorCode": "",
"message": "查询成功",
"data": {
"current_page": 1,
"data": [
{
"id": 67750, // 发布时候要用的,上游媒体ID【resource_id】
"model_id": 1, // 发布时候要用的,上游媒体类型ID 和 上上游媒体类型ID
"name": "长江网(科技热线)",
"price_assign": "20.00",
"price_proxy": "20.00",
"status": 1,
"source_id": 142114, // 发布时候要用的,上上游媒体ID 【out_resource_id】
"category": "IT科技",
"platform": "其他门户",
"region": "湖北",
"created_at": "2025-12-29 17:50:30",
"updated_at": "2025-12-30 00:19:41",
"sync_time": "2025-12-30 00:19:41",
"price_original_type": "基础价格",
"change_count": 0,
"last_change_summary": "",
"last_change_time": "",
"price_original": "20.00",
"meitibeizhu": null,
"celue": 0,
"sort": 0,
"is_press": 0,
"is_stop": 0,
"img_path": null,
"pindaoleixing": "IT科技",
"zonghemenhu": "其他门户",
"quyu": "湖北",
"meitianli": "https:\/\/h5.jp.cjn.cn\/#\/h5\/news?informationId=5127512&sourceType=0&type=android&isDetail=0",
"lianjieleixing": "不可带网址",
"shouluxiaoguo": "不包网页收录",
"weekend_active": 1,
"meitiquanzhong": "3",
"chugaosudu": "",
"tebiehangye": null,
"jiegaoshijian": "24:00",
"baikelaiyuan": "否",
"wanshangkechu": "否",
"kedaishipin": "否",
"jierikefa": "否",
"baidu_include": 0,
"is_beian": 0,
"domain_created_at": null,
"bd_ip_rank": "",
"anlijietu": null,
"no_disclaimer": 0,
"can_sign": 0,
"wechat_open": 0,
"has_read_count": 0,
"avg_delivery_speed": "",
"publish_rate": "0.00",
"is_tag": "",
"is_journal": 0,
"is_haiwai": 0,
"guojiadiqu": "",
"yuyanfenlei": "",
"tupianfeiyong": "",
"fanyixuanxiang": "",
"hw_fabusudu": "",
"ai_include": "",
"operate_out_uid": 0,
"remark": "",
"settle_cycle": 0,
"contact": "",
"contact_tel": "",
"stop_reason": "",
"site_type": "",
"policy_icon": "",
"price": "20.00"
}
],
"total": 5144
},
"t": 1563243867
}
提交稿件进行发布,系统会自动计算费用并从账户余额扣除。
POST https://open-rw.jzguai.com/api/v1/publish
| 参数 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
model_id |
int | 是 | 上游媒体类型ID | 1 |
resource_id |
int | 是 | 上游媒体ID | 12786 |
customer_order_id |
string | 是 | 上游订单ID(必须唯一) | ORDER20231215001 |
customer_batch_id |
string | 是 | 同customer_order_id【上上游订单ID(必须唯一】 | ORDER20231215001 |
out_model_id |
int | 是 | 上上游媒体类型ID | 1 |
out_resource_id |
int | 是 | 上上游媒体ID | 12222 |
resource_price |
float | 否 | 上上游媒体分配价格,填写则校验 | 10.00 |
price_type |
int | 特殊 | 价格类型(微信、微博、短视频需要) | 0 |
sale_id |
string | 是 | 销售ID,默认"0" | "0" |
sale_name |
string | 是 | 销售名称,默认空 | "" |
prop |
JSON | 是 | 稿件内容,JSON格式 | {"biaoti":"标题","neirong":"内容"} |
| 字段 | 必填 | 说明 |
|---|---|---|
biaoti |
是 | 文章标题/友链关键词/词条名(营销宝类型填"营销宝") |
neirong |
是 | 文章内容(HTML格式) |
laiyuan |
是 | 来源链接/参考文章/百科官网链接 |
miaoshu |
是 | 备注说明 |
leixing |
是 | 类型,默认1 |
tuiguang |
代写时必填 | 推广对象(代写字段) |
xuanchuan |
代写时必填 | 宣传要点(代写字段) |
xinwenlianjie |
百科时必填 | 新闻链接(百科字段),至少2条,分号;分隔 |
yingyezhizhao |
百科时必填 | 营业执照(百科字段),图片地址 |
qiyelogo |
百科时必填 | 企业LOGO(百科字段),图片地址 |
fengmian |
微信时必填 | 封面图片(微信字段),图片地址 |
yuanwenlianjie |
微信时必填 | 原文链接(微信字段) |
| 媒体类型 | price_type | 说明 |
|---|---|---|
| 微信 | 0 | 头条价格 |
| 微信 | 2 | 普条价格 |
| 微博 | 0 | 直发价格 |
| 微博 | 1 | 任务价格 |
| 微博 | 2 | 转发价格 |
| 短视频 | 0 | 直发视频价格 |
| 短视频 | 2 | 原创视频价格 |
<?php
// 配置信息
$apiUrl = "https://open-rw.jzguai.com/api/v1/publish";
$appKey = "YOUR_APP_KEY";
// 构建请求数据
$requestData = [
"model_id" => 1,
"resource_id" => 12786,
"customer_order_id" => "ORDER" . time(),
"customer_batch_id" => "ORDER" . time(),
"out_model_id" => 1,
"out_resource_id" => 12222,
"price_type" => 0,
"sale_id" => "0",
"sale_name" => "",
"prop" => json_encode([
"biaoti" => "测试文章标题",
"neirong" => "<p>测试文章内容</p><p>第二段内容</p>",
"laiyuan" => "http://example.com",
"miaoshu" => "测试备注信息",
"leixing" => 1
], JSON_UNESCAPED_UNICODE)
];
// 创建加密实例
require_once 'Encrypt.class.php';
$encrypt = new Encrypt();
// 加密请求
$postData = $encrypt->encrypt($requestData, $appKey);
// 发送请求
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$response = curl_exec($ch);
curl_close($ch);
// 处理响应
$responseData = json_decode($response, true);
if ($responseData) {
// 检查是否有错误
if (!empty($responseData['errorCode'])) {
echo "发布失败: " . $responseData['message'];
} else {
echo "发布成功,订单ID: ";
print_r($responseData['data']);
}
}
?>
{
"data": [
{
"resource_order_id": "120",
"model_id": "1",
"resource_id": "12786",
"resource_order_num": "MP20231215123456"
}
],
"errorCode": "",
"message": "",
"t": 1494227037
}
查询稿件的发布状态,包括回执链接、退稿原因等信息。
POST https://open-rw.jzguai.com/api/v1/status
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model_id |
int | 是 | 资源类型ID |
order_id |
string | 是 | 下游订单ID(即发布接口的customer_order_id) |
{
"data": "http://www.example.com/news/123.html",
"errorCode": "",
"message": "稿件状态:已发布",
"status": 1002,
"synced": false, // 可选:告知客户端是否进行了同步
"t": 1494227037
}
| 状态码 | 说明 |
|---|---|
| 1011 | 待安排 |
| 1001 | 已安排 |
| 1002 | 已发布(data字段为回执链接) |
| 1004 | 已退稿(data字段为退稿原因) |
| 1005 | 退单申请 |
| 1006 | 改稿中 |
查询账户余额、累计充值、累计消费信息,支持时间段查询。
POST https://open-rw.jzguai.com/api/v1/wallet
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
start |
string | 否 | 开始时间,格式:YYYY-MM-DD |
end |
string | 否 | 结束时间,格式:YYYY-MM-DD |
{
"data": {
"remaining": "5200.00",
"recharge": "5200.00",
"consume": 0,
"period_consume": "100.00",
"period_recharge": "500.00"
},
"errorCode": "",
"message": "",
"t": 1494227037
}
remaining:当前账户余额recharge:累计充值总额consume:累计消费总额period_consume:时间段内消费(需传start和end参数)period_recharge:时间段内充值(需传start和end参数)对已发布的稿件申请退稿退款。
POST https://open-rw.jzguai.com/api/v1/refund
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
customer_order_id |
string | 是 | 下游订单ID |
customer_model_id |
int | 是 | 下游媒体类型ID |
model_id |
int | 是 | 上游媒体类型ID |
back_reason |
string | 是 | 退稿理由 |
{
"data": [],
"errorCode": "",
"message": "退稿申请已提交",
"t": 1494227037
}
提交改稿申请、改稿留言或处理改稿结果。
POST https://open-rw.jzguai.com/api/v1/rewrite
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model_id |
int | 是 | 资源类型ID |
order_id |
string | 是 | 下游订单ID |
message |
string | 是 | 留言内容 |
type |
int | 是 | 类型:0-发起改稿,1-同意改稿,2-拒绝改稿 |
{
"data": "success",
"errorCode": "",
"message": "操作成功",
"t": 1494227037
}
以下接口需要您开发相应的接收接口,我们会主动POST通知数据到您配置的回调地址。
当媒体资源的价格、状态等信息发生变化时,我们会通知您。
您配置的回调地址
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
id |
int | 是 | 上游媒体资源ID |
model_id |
int | 是 | 上游媒体类型ID |
price_assign |
float | 是 | 上游分配价格(成本价) |
status |
int | 是 | 状态:1-正常,0-暂停,-1-删除 |
name |
string | 是 | 资源名称 |
其他属性 |
mixed | 否 | 具体媒体类型的其他字段 |
<?php
// 接收上游资源变更通知
header('Content-Type: application/json; charset=utf-8');
// 获取POST数据
$postData = $_POST;
// 验证必要参数
if (!isset($postData['response']) || !isset($postData['sign']) || !isset($postData['app_key'])) {
echo json_encode([
'data' => '',
'errorCode' => 'ERROR00015',
'message' => '缺少必要参数',
't' => time()
]);
exit;
}
// 获取您的App Key(从数据库或配置中获取)
$appKey = 'YOUR_APP_KEY';
// 验证签名
$sign = md5($postData['response']);
if ($sign !== $postData['sign']) {
echo json_encode([
'data' => '',
'errorCode' => 'ERROR00024',
'message' => '签名验证失败',
't' => time()
]);
exit;
}
// 解密数据
$responseData = json_decode(base64_decode($postData['response']), true);
if (!$responseData || !isset($responseData['iv']) || !isset($responseData['value'])) {
echo json_encode([
'data' => '',
'errorCode' => 'ERROR00015',
'message' => '数据格式错误',
't' => time()
]);
exit;
}
$iv = base64_decode($responseData['iv']);
$decrypted = openssl_decrypt(
$responseData['value'],
'AES-256-CBC',
$appKey,
0,
$iv
);
if ($decrypted === false) {
echo json_encode([
'data' => '',
'errorCode' => 'ERROR00015',
'message' => '解密失败',
't' => time()
]);
exit;
}
// 反序列化数据
$data = unserialize($decrypted);
// 处理资源变更数据
// $data 可能是单条数据或多条数据
if (isset($data[0]) && is_array($data[0])) {
// 批量更新
foreach ($data as $resource) {
processResourceUpdate($resource);
}
} else {
// 单条更新
processResourceUpdate($data);
}
// 返回成功响应
echo json_encode([
'data' => [],
'errorCode' => '',
'message' => '',
't' => time()
]);
function processResourceUpdate($resource) {
// 这里处理资源更新逻辑
// 更新您的数据库中的资源信息
$resourceId = $resource['id'];
$modelId = $resource['model_id'];
$price = $resource['price_assign'];
$status = $resource['status'];
$name = $resource['name'];
// 更新数据库...
// TODO: 实现您的资源更新逻辑
error_log("资源更新: ID={$resourceId}, 类型={$modelId}, 价格={$price}, 状态={$status}, 名称={$name}");
}
?>
{
"data": [],
"errorCode": "",
"message": "",
"t": 1494227037
}
当稿件安排状态发生变化时通知您。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
customer_model_id |
int | 是 | 下游媒体类型ID |
customer_order_id |
string | 是 | 下游稿件ID |
order_progress |
int | 是 | 安排进度:0-未安排,1-已安排 |
{
"data": [],
"errorCode": "",
"message": "",
"t": 1494227037
}
当稿件发布成功,收到回执链接时通知您。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
customer_model_id |
int | 是 | 下游媒体类型ID |
customer_order_id |
string | 是 | 下游稿件ID |
return_info |
string | 是 | 回执链接(多个链接用分号;分隔) |
return_content |
string | 否 | 回执内容 |
return_file |
string | 否 | 回执附件 |
{
"data": {
"model_id": "1",
"id": "121"
},
"errorCode": "",
"message": "",
"t": 1494227037
}
退稿申请处理结果通知。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
refund_reason |
string | 是 | 退稿原因 |
customer_order_id |
string | 是 | 下游稿件ID |
customer_model_id |
int | 是 | 下游媒体类型ID |
type |
int | 是 | 类型:1-同意退稿,2-拒绝退稿 |
{
"data": "",
"errorCode": "",
"message": "",
"t": 1494227037
}
收到上游的改稿留言时通知您。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model_id |
int | 是 | 下游资源类型ID |
order_id |
string | 是 | 下游稿件ID |
resource_id |
int | 是 | 上游资源ID |
message |
string | 是 | 改稿留言内容 |
{
"data": "success",
"errorCode": "",
"message": "",
"t": 1494227037
}
改稿处理结果通知。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
model_id |
int | 是 | 下游资源类型ID |
order_id |
string | 是 | 下游稿件ID |
resource_id |
int | 是 | 上游资源ID |
type |
int | 是 | 结果:1-同意改稿,2-拒绝改稿 |
{
"data": "success",
"errorCode": "",
"message": "",
"t": 1494227037
}
您需要开发能够接收我们通知的回调接口,并在用户设置页面配置回调地址。
| 错误代码 | 说明 |
|---|---|
| ERROR00001 | 接口不存在 |
| ERROR00013 | app_key异常 |
| ERROR00015 | 请求参数错误 |
| ERROR00020 | 余额不足 |
| ERROR00021 | 媒体资源不存在 |
| ERROR00022 | 订单已存在 |
| ERROR00023 | IP不在白名单中 |
| ERROR00024 | 签名验证失败 |
| ERROR00025 | 同步时间限制 |
| ERROR00026 | 订单状态不允许此操作 |
| ERROR00027 | 价格不匹配 |
| ERROR00028 | 媒体资源已暂停 |
| ERROR00029 | 重复请求 |
| ERROR00099 | 系统内部错误 |