文档转换-推送说明
<p>如果发起文档转换时,提供了参数callBackUrl,转换成功或失败后,聚美智数将结果推送至接入商提供的地址为callBackUrl的接口</p>
<h3>数据格式</h3>
<ul>
<li>成功推送格式</li>
</ul>
<pre><code class="language-json">{
&quot;code&quot;: &quot;200&quot;,
&quot;convertTaskId&quot;: &quot;900924122524274511&quot;,
&quot;urls&quot;: [
&quot;https://xxxx.pdf&quot;
]
}</code></pre>
<ul>
<li>失败推送格式</li>
</ul>
<pre><code class="language-json">{
&quot;code&quot;: &quot;202&quot;,
&quot;convertTaskId&quot;: &quot;900924122524274511&quot;
}</code></pre>
<h3>请求格式</h3>
<ul>
<li>application/json</li>
</ul>
<h3>签名验证</h3>
<p>为了防止推动过程中数据被篡改,聚美智数将推送数据进行签名,将签名和数据一并推送,具体步骤如下:</p>
<p>1、在推送数据前拼接appSecret,对拼接后的数据做SHA256哈希,得到sign</p>
<pre><code class="language-java">sign = sha256(appSecret + 推送数据)</code></pre>
<p>例如:
appSecret:312aadadas3123ddadas
推送数据: {"code": "200", "convertTaskId": "900924122524274511", "urls": ["<a href="https://xxxx.pdf"">https://xxxx.pdf"</a>; ]}
则拼接后数据为:312aadadas3123ddadas {"code": "200", "convertTaskId": "900924122524274511", "urls": ["<a href="https://xxxx.pdf"">https://xxxx.pdf"</a>; ]}
再将拼接后的数据进行SHA256哈希,得到sign:trtret31212aa2312312dadas3123ddadas</p>
<p>2、sign放置在请求header中推送至接入商,header name=sign
3、接入商接收到推送数据后,根据步骤1生成sign,与header中的sign进行比较是否一致,一致说明数据没有被篡改</p>
<h3>返回接收结果</h3>
<ul>
<li>接入商需要把接收处理结果返回给聚美智数,否则聚美智数无法判断接入商是否成功接收,会导致重复推送,格式如下:</li>
</ul>
<pre><code class="language-json">//接收成功
{
&quot;success&quot;:true
}
// 接收失败
{
&quot;success&quot;:false,
&quot;msg&quot;: &quot;接收失败&quot;
} </code></pre>
<ul>
<li>如果是接收失败,聚美智能会再次推送,最多推送3次。</li>
</ul>
<h3>接收示例(java)</h3>
<pre><code class="language-java">@PostMapping(&quot;callbackUrl&quot;)
public Map&lt;String,Object&gt; receive(@RequestBody String data, HttpServletRequest request) {
log.info(&quot;接收到文档转换推送数据: {}&quot;, data);
String signInHeader = request.getHeader(&quot;sign&quot;);
String signText = appSecret + data;
String sign = DigestUtils.sha256Hex(signText);
log.info(&quot;sign: {}&quot;, sign);
log.info(&quot;signInHeader: {}&quot;, signInHeader);
Map&lt;String,Object&gt; map = new HashMap&lt;&gt;();
if (StringUtils.equals(sign, signInHeader)) {
... // 处理自己的业务逻辑
if (处理成功) {
map.put(&quot;success&quot;,true);
} else {
map.put(&quot;success&quot;,false);
map.put(&quot;msg&quot;,&quot;接收失败, xxx&quot;);
}
} else {
map.put(&quot;success&quot;,false);
map.put(&quot;msg&quot;,&quot;接收失败,签名不正确&quot;);
}
return map;
}</code></pre>