授权应用回调
<p><strong>简要描述:</strong></p>
<ul>
<li>本回调主要用于通知第三方授权应用相关通知事件。</li>
<li>开发商如果有多个飞印应用,可以分别给每个应用设置专有的回调地址。</li>
<li>譬如:当有新的商户授权给一个应用时,飞印平台会立即通过回调地址向第三方应用系统通知该授权事件。</li>
<li>当授权商户名下的设备离线/上线/缺纸等情况发生时也会通知到第三方系统。</li>
</ul>
<p><strong>请求方式:</strong></p>
<ul>
<li>POST,JSON提交</li>
</ul>
<p><strong>异常重试策略:</strong></p>
<ul>
<li>如果商户的系统没有响应(譬如在维护或网络异常),飞印平台会依次按照如下时间间隔(秒)共重试7次:1, 3, 6, 9, 12, 15, 18秒 (一共64秒)</li>
</ul>
<p><strong>参数:</strong> </p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">msg_type</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>回调的消息类型,主要有<br/><strong>heartbeat</strong> 健康心跳检查<br/><strong>auth_added</strong> 有商户授权该应用<br/><strong>auth_removed</strong> 商户取消了授权<br/><strong>msg_printed</strong> 第三发应用发送给授权商户的消息打印回调<br/> <strong>device_status</strong> 授权商户的打印机状态变更回调<br/> <strong>app_paid</strong> 授权商户购买记录回调</td>
</tr>
<tr>
<td style="text-align: left;">payload</td>
<td style="text-align: left;">否</td>
<td style="text-align: left;">object</td>
<td>回调消息体,object格式视msg_type的值而定,详见下面说明</td>
</tr>
</tbody>
</table>
<ul>
<li>
<p>当msg_type=<strong>heartbeat</strong>时,payload为一个空字符串</p>
</li>
<li>当msg_type=<strong>auth_added</strong>时,payload为下列对象</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">appid</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>飞印平台中的第三方应用id</td>
</tr>
<tr>
<td style="text-align: left;">uid</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>授权商户的id</td>
</tr>
<tr>
<td style="text-align: left;">name</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>授权商户的名称</td>
</tr>
<tr>
<td style="text-align: left;">time</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>授权时间,yyyy-MM-dd HH:mm:ss 格式</td>
</tr>
<tr>
<td style="text-align: left;">secret</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>签名,把appid,time, uid和API_KEY 的值按顺序直接拼接起来,做MD5加密:<br/> md5(appid + time + uid + API_KEY)</td>
</tr>
</tbody>
</table>
<p><strong>请求示例</strong></p>
<pre><code> {
"msg_type":"auth_added",
"payload": {
"uid": "5a58867e0aca3027f742a4de",
"name": "商户名称",
"appid": "5a58867e0aca3027f742a4de",
"time":"2018-01-25 23:00:00",
"secret": "1122abe86be0b7de3cee8cfbffef3344"
}
}</code></pre>
<ul>
<li>当msg_type=<strong>auth_remove</strong>时,payload为下列对象</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">appid</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>飞印平台中的第三方应用id</td>
</tr>
<tr>
<td style="text-align: left;">uid</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>授权商户的id</td>
</tr>
<tr>
<td style="text-align: left;">name</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>授权商户的名称</td>
</tr>
<tr>
<td style="text-align: left;">time</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>取消授权时间,yyyy-MM-dd HH:mm:ss 格式</td>
</tr>
<tr>
<td style="text-align: left;">secret</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>签名,把appid,time, uid和API_KEY 的值按顺序直接拼接起来,做MD5加密:<br/> md5(appid + time + uid + API_KEY)</td>
</tr>
</tbody>
</table>
<p><strong>请求示例</strong></p>
<pre><code> {
"msg_type":"auth_removed",
"payload": {
"uid": "5a58867e0aca3027f742a4de",
"name": "商户名称",
"appid": "5a58867e0aca3027f742a4de",
"time":"2018-01-25 23:00:00",
"secret": "1122abe86be0b7de3cee8cfbffef3344"
}
}</code></pre>
<ul>
<li>当msg_type=<strong>msg_printed</strong>时,payload为下列对象</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">device_no</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>机器编号</td>
</tr>
<tr>
<td style="text-align: left;">msg_no</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>第三方应用在向商户 <a href="https://www.showdoc.cc/home/page/index/page_id/82826059039914" title="发送消息">发送消息</a>时指定的关联id: <strong>msg_no</strong> 如果没有关联,飞印平台会自动生成一个uuid代替</td>
</tr>
<tr>
<td style="text-align: left;">print_time</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>打印完成的时间,yyyy-MM-dd HH:mm:ss</td>
</tr>
<tr>
<td style="text-align: left;">secret</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>签名,把device_no,msg_no, print_time和API_KEY 的值按顺序直接拼接起来,做MD5加密: md5(把device_no + msg_no + print_time + API_KEY)</td>
</tr>
</tbody>
</table>
<p><strong>请求示例</strong></p>
<pre><code> {
"msg_type":"msg_printed",
"payload": {
"device_no": "4600408123456789",
"print_time": "2017-08-01 10:03:04",
"msg_no":"some-thirdparty-id",
"secret": "005eabe86be0b7de3cee8cfbffeff96a"
}
}</code></pre>
<ul>
<li>当msg_type=<strong>device_status</strong>时,payload为下列对象</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">device_no</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>机器编号</td>
</tr>
<tr>
<td style="text-align: left;">online_status</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>打印机在线运行状态,包括:<br/> <strong>online</strong> 在线 <br/> <strong>offline</strong> 离线 <br/> <strong>overheat</strong> 打印头过热 <br/> <strong>error</strong> 打印机系统故障</td>
</tr>
<tr>
<td style="text-align: left;">paper_status</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>打印机纸张状态,包括:<br/> <strong>normal</strong> 正常 <br/> <strong>lack</strong> 缺纸</td>
</tr>
<tr>
<td style="text-align: left;">secret</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>签名,把device_no,online_status, paper_status和API_KEY 的值按顺序直接拼接起来,做MD5加密: md5(把device_no + online_status + paper_status + API_KEY)</td>
</tr>
</tbody>
</table>
<p><strong>请求示例</strong></p>
<pre><code> {
"msg_type":"device_status",
"payload": {
"device_no": "4600408123456789",
"online_status": "online",
"paper_status":"normal",
"secret": "1122abe86be0b7de3cee8cfbffef3344"
}
}</code></pre>
<ul>
<li>当msg_type=<strong>app_paid</strong>时,payload为下列对象</li>
</ul>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">必选</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">appid</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>飞印平台中的第三方应用id</td>
</tr>
<tr>
<td style="text-align: left;">uid</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>授权商户的id</td>
</tr>
<tr>
<td style="text-align: left;">name</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>授权商户的名称</td>
</tr>
<tr>
<td style="text-align: left;">offering</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>授权商户购买的产品</td>
</tr>
<tr>
<td style="text-align: left;">time</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>购买时间,yyyy-MM-dd HH:mm:ss 格式</td>
</tr>
<tr>
<td style="text-align: left;">secret</td>
<td style="text-align: left;">是</td>
<td style="text-align: left;">string</td>
<td>签名,把appid,offering, time, uid和API_KEY 的值按顺序直接拼接起来,做MD5加密:<br/> md5(appid + offering + time + uid + API_KEY)</td>
</tr>
</tbody>
</table>
<p><strong>请求示例</strong></p>
<pre><code> {
"msg_type":"app_paid",
"payload": {
"appid": "5a58867e0aca3027f742a4de",
"uid": "5a58867e0aca3027f742a4de",
"name": "商户名称",
"offering" : "30元包月套餐",
"time":"2019-03-25 23:00:00",
"secret": "1122abe86be0b7de3cee8cfbffef3344"
}
}</code></pre>
<p>对于所有飞印平台发出的回调请求,飞印平台会预期得到第三方系统返回如下response,</p>
<pre><code>{
"errcode": 0,
"errmsg" : "ok"
}</code></pre>
<p><strong>返回参数说明</strong></p>
<table>
<thead>
<tr>
<th style="text-align: left;">参数名</th>
<th style="text-align: left;">类型</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: left;">errcode</td>
<td style="text-align: left;">number</td>
<td>返回状态,0为成功,非0表示第三方系统未能正确处理飞印发送过来的回调请求</td>
</tr>
<tr>
<td style="text-align: left;">errmsg</td>
<td style="text-align: left;">string</td>
<td>错误说明,当errcode为0时为"ok",否则需要填写出错说明</td>
</tr>
</tbody>
</table>