聚美智数


文档转换-推送说明

<p>如果发起文档转换时,提供了参数callBackUrl,转换成功或失败后,聚美智数将结果推送至接入商提供的地址为callBackUrl的接口</p> <h3>数据格式</h3> <ul> <li>成功推送格式</li> </ul> <pre><code class="language-json">{ &amp;quot;code&amp;quot;: &amp;quot;200&amp;quot;, &amp;quot;convertTaskId&amp;quot;: &amp;quot;900924122524274511&amp;quot;, &amp;quot;urls&amp;quot;: [ &amp;quot;https://xxxx.pdf&amp;quot; ] }</code></pre> <ul> <li>失败推送格式</li> </ul> <pre><code class="language-json">{ &amp;quot;code&amp;quot;: &amp;quot;202&amp;quot;, &amp;quot;convertTaskId&amp;quot;: &amp;quot;900924122524274511&amp;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 推送数据: {&quot;code&quot;: &quot;200&quot;, &quot;convertTaskId&quot;: &quot;900924122524274511&quot;, &quot;urls&quot;: [&quot;<a href="https://xxxx.pdf&quot">https://xxxx.pdf&quot</a>; ]} 则拼接后数据为:312aadadas3123ddadas {&quot;code&quot;: &quot;200&quot;, &quot;convertTaskId&quot;: &quot;900924122524274511&quot;, &quot;urls&quot;: [&quot;<a href="https://xxxx.pdf&quot">https://xxxx.pdf&quot</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">//接收成功 { &amp;quot;success&amp;quot;:true } // 接收失败 { &amp;quot;success&amp;quot;:false, &amp;quot;msg&amp;quot;: &amp;quot;接收失败&amp;quot; } </code></pre> <ul> <li>如果是接收失败,聚美智能会再次推送,最多推送3次。</li> </ul> <h3>接收示例(java)</h3> <pre><code class="language-java">@PostMapping(&amp;quot;callbackUrl&amp;quot;) public Map&amp;lt;String,Object&amp;gt; receive(@RequestBody String data, HttpServletRequest request) { log.info(&amp;quot;接收到文档转换推送数据: {}&amp;quot;, data); String signInHeader = request.getHeader(&amp;quot;sign&amp;quot;); String signText = appSecret + data; String sign = DigestUtils.sha256Hex(signText); log.info(&amp;quot;sign: {}&amp;quot;, sign); log.info(&amp;quot;signInHeader: {}&amp;quot;, signInHeader); Map&amp;lt;String,Object&amp;gt; map = new HashMap&amp;lt;&amp;gt;(); if (StringUtils.equals(sign, signInHeader)) { ... // 处理自己的业务逻辑 if (处理成功) { map.put(&amp;quot;success&amp;quot;,true); } else { map.put(&amp;quot;success&amp;quot;,false); map.put(&amp;quot;msg&amp;quot;,&amp;quot;接收失败, xxx&amp;quot;); } } else { map.put(&amp;quot;success&amp;quot;,false); map.put(&amp;quot;msg&amp;quot;,&amp;quot;接收失败,签名不正确&amp;quot;); } return map; }</code></pre>

页面列表

ITEM_HTML