# 发布草稿

[调试诊断](https://developers.weixin.qq.com/console/devtools/debug?utm_source=api_tools)

> 接口应在服务器端调用，不可在前端（小程序、网页、APP等）直接调用，具体可参考[接口调用指南](/doc/oplatform/developers/dev/guide.md)。

接口英文名：freepublish_submit

本接口用于将图文草稿提交发布。

开发者需要先将图文素材以草稿的形式保存，选择要发布的草稿 media_id 进行发布。

## 1. 调用方式

### HTTPS 调用

```bash
POST https://api.weixin.qq.com/cgi-bin/freepublish/submit?access_token=ACCESS_TOKEN
```

### 云调用

- 本接口不支持云调用。

### 第三方调用

- 本接口支持第三方平台代商家调用。

- 该接口所属的权限集 id 为：7

- 服务商获得其中之一权限集授权后，可通过使用 [authorizer_access_token](/doc/oplatform/developers/dev/AuthorizerAccessToken.md) 代商家进行调用，具体可查看 [第三方调用](/doc/oplatform/Third-party_Platforms/2.0/Before_Develop/call_interface.md) 说明文档。

## 2. 请求参数

### 查询参数 `Query String Parameters`

```json
[
  {
    "参数名": "access_token",
    "类型": "string",
    "必填": "是",
    "说明": "接口调用凭证，可使用 [access_token](/doc/subscription/api/base/api_getaccesstoken)、[authorizer_access_token](/doc/oplatform/openApi/ticket-token/api_getauthorizeraccesstoken.md)"
  }
]
```

### 请求体 `Request Payload`

```json
[
  {
    "参数名": "media_id",
    "类型": "string",
    "必填": "是",
    "示例": "MEDIA_ID",
    "说明": "要发布的草稿的media_id"
  }
]
```

## 3. 返回参数

### 返回体 `Response Payload`

```json
[
  {
    "参数名": "errcode",
    "类型": "number",
    "说明": "错误码"
  },
  {
    "参数名": "errmsg",
    "类型": "string",
    "说明": "错误信息"
  },
  {
    "参数名": "publish_id",
    "类型": "int",
    "说明": "发布任务的id"
  },
  {
    "参数名": "msg_data_id",
    "类型": "string",
    "说明": "消息的数据ID"
  }
]
```

## 4. 注意事项

请注意：正常情况下调用成功时，errcode将为0，此时只意味着发布任务提交成功，并不意味着此时发布已经完成，所以，仍有可能在后续的发布过程中出现异常情况导致发布失败，如原创声明失败、平台审核不通过等。

#### 发布结果的事件推送

由于发布任务提交后，发布任务可能在一定时间后才完成，因此，发布接口调用时，仅会给出发布任务是否提交成功的提示，若发布任务提交成功，则在发布任务结束时，会向开发者在公众平台填写的开发者URL（callback URL）推送事件。

推送的XML结构成功时示例：

```xml
<xml> 
  <ToUserName><![CDATA[gh_4d00ed8d6399]]></ToUserName>  
  <FromUserName><![CDATA[oV5CrjpxgaGXNHIQigzNlgLTnwic]]></FromUserName>  
  <CreateTime>1481013459</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[PUBLISHJOBFINISH]]></Event>
  <PublishEventInfo>
    <publish_id>2247503051</publish_id>
    <publish_status>0</publish_status>
    <article_id><![CDATA[b5O2OUs25HBxRceL7hfReg-U9QGeq9zQjiDvy
WP4Hq4]]></article_id>
    <article_detail>
      <count>1</count>
      <item>
        <idx>1</idx>
        <article_url><![CDATA[ARTICLE_URL]]></article_url>
      </item>
    </article_detail>
  </PublishEventInfo>
</xml>
```

原创审核不通过时示例：

```xml
<xml> 
  <ToUserName><![CDATA[gh_4d00ed8d6399]]></ToUserName>  
  <FromUserName><![CDATA[oV5CrjpxgaGXNHIQigzNlgLTnwic]]></FromUserName>  
  <CreateTime>1481013459</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>
  <Event><![CDATA[PUBLISHJOBFINISH]]></Event>
  <PublishEventInfo>
    <publish_id>2247503051</publish_id>
    <publish_status>2</publish_status>
    <fail_idx>1</fail_idx>
    <fail_idx>2</fail_idx>
  </PublishEventInfo>
</xml>
```

返回参数说明

| 参数             | 说明                                                                         |
| -------------- | -------------------------------------------------------------------------- |
| ToUserName     | 公众号的ghid                                                                   |
| FromUserName   | 公众号群发助手的openid，为mphelper                                                   |
| CreateTime     | 创建时间的时间戳                                                                   |
| MsgType        | 消息类型，此处为event                                                              |
| Event          | 事件信息，此处为PUBLISHJOBFINISH                                                  |
| publish_id     | 发布任务id                                                                     |
| publish_status | 发布状态，0:成功, 1:发布中，2:原创失败, 3: 常规失败, 4:平台审核不通过, 5:成功后用户删除所有文章, 6: 成功后系统封禁所有文章 |
| article_id     | 当发布状态为0时（即成功）时，返回图文的 article_id，可用于“客服消息”场景                                |
| count          | 当发布状态为0时（即成功）时，返回文章数量                                                      |
| idx            | 当发布状态为0时（即成功）时，返回文章对应的编号                                                   |
| article_url    | 当发布状态为0时（即成功）时，返回图文的永久链接                                                   |
| fail_idx       | 当发布状态为2或4时，返回不通过的文章编号，第一篇为 1；其他发布状态则为空                                     |

## 5. 代码示例

请求示例

``` json
{
  "media_id": "MEDIA_ID"
}
```

返回示例

``` json
{
  "errcode": 0,
  "errmsg": "ok",
  "publish_id": "100000001"
}
```

## 6. 错误码

以下是本接口的错误码列表，其他错误码可参考 [通用错误码](/doc/oplatform/developers/errCode/README.md)；调用接口遇到报错，可使用官方提供的 [API 诊断工具](https://developers.weixin.qq.com/console/devtools/debug?utm_source=api_errcode) 辅助定位和分析问题。

```json
[
  {
    "错误码": "0",
    "错误描述": "ok",
    "解决方案": "成功"
  },
  {
    "错误码": "48001",
    "错误描述": "api unauthorized",
    "解决方案": "api 功能未授权，请确认公众号/服务号已获得该接口，可以在「公众平台官网 - 开发者中心页」中查看接口权限"
  },
  {
    "错误码": "53503",
    "错误描述": "该草稿未通过发布检查",
    "解决方案": "检查下草稿信息"
  },
  {
    "错误码": "53504",
    "错误描述": "需前往公众平台官网使用草稿",
    "解决方案": "需前往公众平台官网使用草稿"
  },
  {
    "错误码": "53505",
    "错误描述": "请手动保存成功后再发表",
    "解决方案": "请前往公众平台官网手动保存成功后再发表"
  }
]
```

## 7. 适用范围

本接口在不同账号类型下的可调用情况：

```json
[
  {
    "公众号": "仅认证",
    "服务号": "✔"
  }
]
```

- 仅认证：表示仅允许企业主体已认证账号调用，未认证或不支持认证的账号无法调用。
- ✔：该账号可调用此接口。
- 其他未明确声明的账号类型，如无特殊说明，均不可调用此接口。
