亿链 API 文档

witness ly


回调通知服务

<h3>说明</h3> <p>&gt; 回调通知服务用来提高上链的<code>响应速度</code>,在上链后,交易回执会第一时间通过<code>回调通知服务</code>进行通知,客户方接收到回执后执行后续操作。</p> <p>&gt; 如果客户方不使用回调,使用查询接口去查询结果,一是浪费资源,始终保持轮询的操作,二是交易确认时间不够及时,拉长了单笔交易的响应时间,应配合<code>查询上链结果</code>接口一起使用</p> <hr /> <h3>使用</h3> <p>&gt; 在 API 文档上链接口中铸造、转移以及销毁的入参 <code>callbackUrl</code> 中填入接受通知服务的接口地址,接收回调服务通知的服务器需要加亿链侧的白名单,面向公网则无需配置,测试环境出口ip:<code>120.46.99.71</code></p> <hr /> <h3>Java 回调示例</h3> <p>&gt;回调方法必须为<code>POST</code>,接收回调通知后需要返回<code>{&amp;quot;code&amp;quot;:&amp;quot;200&amp;quot;,&amp;quot;msg&amp;quot;:&amp;quot;success&amp;quot;}</code></p> <p>注意 code、msg都为<code>字符串</code>,如果响应值不为<code>{&amp;quot;code&amp;quot;:&amp;quot;200&amp;quot;,&amp;quot;msg&amp;quot;:&amp;quot;success&amp;quot;}</code>,则会进行<code>重新推送</code>,每次推送间隔为10 s,一共重新推送 3 次,3次过后不再进行通知,客户侧调用<code>查询上链结果</code>接口查询结果。</p> <pre><code class="language-java">@RestController public class CallbackController { @RequestMapping(value = &amp;quot;/callback&amp;quot;, method = RequestMethod.POST ) public CallBackResult callback(@RequestBody String requestBody) { log.info(&amp;quot;交易回执:{}&amp;quot;, requestBody); CallBackResult callBackResult = new CallBackResult(); callBackResult.setCode(&amp;quot;200&amp;quot;); callBackResult.setMsg(&amp;quot;success&amp;quot;); return callBackResult; } }</code></pre> <hr /> <h3>通知结果示例</h3> <p>&gt;业务方获得回执结果以后,重点关注包体中data 中的 :transactionHash,reqNo,status 其中:</p> <p><code>transactionHash</code>是交易哈希,与铸造、转移以及销毁接口返回的txHash字段相同</p> <p><code>reqNo</code>是业务方发起的请求号,主要用于问题排查。</p> <p><code>status</code>是交易状态</p> <h4>示例:</h4> <p>&gt;响应有以下几种情况:因为 API 服务在上链前已经做了很多校验,只有极特殊的情况下才会出现status不为0的情况,如果出现联系亿链技术人员排查</p> <p>status 为<code>0</code>则代表上链成功,判断包体其中 status 为 0,或 statusOK 为 true</p> <pre><code class="language-json">{ &amp;quot;code&amp;quot;:&amp;quot;EC000000&amp;quot;, &amp;quot;data&amp;quot;:{ &amp;quot;jsonRpcResp&amp;quot;:{ &amp;quot;id&amp;quot;:737095, &amp;quot;jsonrpc&amp;quot;:&amp;quot;2.0&amp;quot;, &amp;quot;result&amp;quot;:{ &amp;quot;blockNumber&amp;quot;:1039598, &amp;quot;checksumContractAddress&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;contractAddress&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;extraData&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;from&amp;quot;:&amp;quot;0x75ac45d3f9c5532dff97350954449fc47c03250b&amp;quot;, &amp;quot;gasUsed&amp;quot;:&amp;quot;23432&amp;quot;, &amp;quot;hash&amp;quot;:&amp;quot;0x03d8b171f9798bad9037565c90b5990ae5d20a10b1d2556de4f551cc643b33e2&amp;quot;, &amp;quot;input&amp;quot;:&amp;quot;0x40c10f1900000000000000000000000094d5fff3ccb536033ce2f68f68b60ff514367036000000000000000000000000000000000000000000000000000000000012c980&amp;quot;, &amp;quot;logEntries&amp;quot;:[ { &amp;quot;address&amp;quot;:&amp;quot;93644794acfe95135a9df2db6ca6bf301886e817&amp;quot;, &amp;quot;data&amp;quot;:&amp;quot;0x&amp;quot;, &amp;quot;topics&amp;quot;:[ &amp;quot;0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef&amp;quot;, &amp;quot;0x0000000000000000000000000000000000000000000000000000000000000000&amp;quot;, &amp;quot;0x00000000000000000000000094d5fff3ccb536033ce2f68f68b60ff514367036&amp;quot;, &amp;quot;0x000000000000000000000000000000000000000000000000000000000012c980&amp;quot; ] } ], &amp;quot;message&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;output&amp;quot;:&amp;quot;0x&amp;quot;, &amp;quot;status&amp;quot;:0, &amp;quot;statusOK&amp;quot;:true, &amp;quot;to&amp;quot;:&amp;quot;0x93644794acfe95135a9df2db6ca6bf301886e817&amp;quot;, &amp;quot;transactionHash&amp;quot;:&amp;quot;0xbfcf9bace917c5d79e47f774187806904c6d7a52578ff015248695e52decb6c8&amp;quot;, &amp;quot;version&amp;quot;:0 } }, &amp;quot;reqNo&amp;quot;:&amp;quot;1&amp;quot; }, &amp;quot;message&amp;quot;:&amp;quot;成功&amp;quot; }</code></pre> <p>&gt;status 为 <code>16</code> 是在出块过程中执行合约逻辑失败交易回滚,会将具体错误响应</p> <pre><code class="language-json">{ &amp;quot;code&amp;quot;:&amp;quot;EC000000&amp;quot;, &amp;quot;data&amp;quot;:{ &amp;quot;jsonRpcResp&amp;quot;:{ &amp;quot;error&amp;quot;:{ &amp;quot;code&amp;quot;:16, &amp;quot;message&amp;quot;:&amp;quot;Ownable: caller is not the owner&amp;quot; }, &amp;quot;id&amp;quot;:4, &amp;quot;jsonrpc&amp;quot;:&amp;quot;2.0&amp;quot;, &amp;quot;result&amp;quot;:{ &amp;quot;blockNumber&amp;quot;:29874, &amp;quot;checksumContractAddress&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;contractAddress&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;extraData&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;from&amp;quot;:&amp;quot;0x95a1a99be965777d8b0e42fe5ec1c161f6c3a5da&amp;quot;, &amp;quot;gasUsed&amp;quot;:&amp;quot;2633&amp;quot;, &amp;quot;hash&amp;quot;:&amp;quot;0x&amp;quot;, &amp;quot;input&amp;quot;:&amp;quot;0x40c10f1900000000000000000000000095a1a99be965777d8b0e42fe5ec1c161f6c3a5da00000000000000000000000000000000000000000000000000000187eb127a14&amp;quot;, &amp;quot;logEntries&amp;quot;:[ ], &amp;quot;message&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;output&amp;quot;:&amp;quot;0x08c379a0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000204f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572&amp;quot;, &amp;quot;status&amp;quot;:16, &amp;quot;statusOK&amp;quot;:false, &amp;quot;to&amp;quot;:&amp;quot;0x18f8597118953b3374c2515ecf799ce4750361bb&amp;quot;, &amp;quot;transactionHash&amp;quot;:&amp;quot;0x3b1987a1ede1b2de8e3964c68c4c347ed3efbc0195354d723a3fc2922742bf5b&amp;quot;, &amp;quot;version&amp;quot;:0 } }, &amp;quot;reqNo&amp;quot;:&amp;quot;1&amp;quot; }, &amp;quot;message&amp;quot;:&amp;quot;成功&amp;quot; }</code></pre> <p>&gt;status 为 <code>19</code> 是因为请求合约地址不存在,更改已部署的合约地址</p> <pre><code class="language-json">{ &amp;quot;code&amp;quot;:&amp;quot;EC000000&amp;quot;, &amp;quot;data&amp;quot;:{ &amp;quot;jsonRpcResp&amp;quot;:{ &amp;quot;error&amp;quot;:{ &amp;quot;code&amp;quot;:19, &amp;quot;message&amp;quot;:&amp;quot;CallAddressError&amp;quot; }, &amp;quot;id&amp;quot;:7, &amp;quot;jsonrpc&amp;quot;:&amp;quot;2.0&amp;quot;, &amp;quot;result&amp;quot;:{ &amp;quot;blockNumber&amp;quot;:29875, &amp;quot;checksumContractAddress&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;contractAddress&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;extraData&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;from&amp;quot;:&amp;quot;0x95a1a99be965777d8b0e42fe5ec1c161f6c3a5da&amp;quot;, &amp;quot;gasUsed&amp;quot;:&amp;quot;0&amp;quot;, &amp;quot;hash&amp;quot;:&amp;quot;0x&amp;quot;, &amp;quot;input&amp;quot;:&amp;quot;0x40c10f1900000000000000000000000095a1a99be965777d8b0e42fe5ec1c161f6c3a5da00000000000000000000000000000000000000000000000000000187eb14d822&amp;quot;, &amp;quot;logEntries&amp;quot;:[ ], &amp;quot;message&amp;quot;:&amp;quot;&amp;quot;, &amp;quot;output&amp;quot;:&amp;quot;0x08c379a00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001343616c6c2061646472657373206572726f722e00000000000000000000000000&amp;quot;, &amp;quot;status&amp;quot;:19, &amp;quot;statusOK&amp;quot;:false, &amp;quot;to&amp;quot;:&amp;quot;0x18f8597118953b3374c2515ecf799ce4750361b1&amp;quot;, &amp;quot;transactionHash&amp;quot;:&amp;quot;0xdf219aa078e5eb958da1701ada37ba86f9dec77f858c074c2a65220d5c178864&amp;quot;, &amp;quot;version&amp;quot;:0 } }, &amp;quot;reqNo&amp;quot;:&amp;quot;1&amp;quot; }, &amp;quot;message&amp;quot;:&amp;quot;成功&amp;quot; }</code></pre> <p>&gt;无staus: 交易未上链</p> <pre><code class="language-json">{ &amp;quot;code&amp;quot;:&amp;quot;EC000000&amp;quot;, &amp;quot;data&amp;quot;:{ &amp;quot;jsonRpcResp&amp;quot;:{ &amp;quot;error&amp;quot;:{ &amp;quot;code&amp;quot;:10001, &amp;quot;message&amp;quot;:&amp;quot;BlockLimitCheckFail&amp;quot; }, &amp;quot;id&amp;quot;:0 }, &amp;quot;reqNo&amp;quot;:&amp;quot;0x661a7133856fee642d553dc7263511f0be2fe34c012e16d841ee761410d05fe3&amp;quot; }, &amp;quot;message&amp;quot;:&amp;quot;成功&amp;quot; }</code></pre>

页面列表

ITEM_HTML