帮助文档
文档中心
开发者文档
  • AVATA API 文档
  • 底层链 SDK 文档
开发者社区
区块链浏览器
  • 文昌链网浏览器
  • 文昌链极速网
  • 文昌链-天舟
  • 文昌链-神舟
  • 文昌链-天和
关于文昌链
文档中心
开发者文档
  • AVATA API 文档
  • 底层链 SDK 文档
开发者社区
区块链浏览器
  • 文昌链网浏览器
  • 文昌链极速网
  • 文昌链-天舟
  • 文昌链-神舟
  • 文昌链-天和
关于文昌链
AVATA API 文档
  • AVATA API 文档
接入说明AVATA v3 API 文档AVATA v1 API 文档AVATA v2 API 文档
接入说明AVATA v3 API 文档AVATA v1 API 文档AVATA v2 API 文档
  1. 接入说明
  • AVATA API 最佳实践
  • 网关鉴权签名示例
  • 交易结果异步回调通知
  1. 接入说明

交易结果异步回调通知

应用平台方可通过该服务来接收 AVATA 平台主动推送的上链交易结果异步通知消息。

操作流程

  1. 登录 AVATA 服务平台
  2. 在项目管理页 - 更多操作项中,点击「设置回调地址」,输入您的上链交易结果异步推送回调地址;
    image.png
    或者在项目管理页中,点击编辑,输入您的上链交易结果异步推送回调地址。

image.png
注意:需保证回调地址能够被外网访问

  1. 设置成功后,AVATA 平台会将您每次接口请求上链的交易结果信息推送至设置好的地址。
  2. 单笔交易推送失败,触发重试机制,重新推送 4 次,时间间隔为 1、3、5、10 分钟。
  3. 成功接收到请求后,需要返回字符串 SUCCESS。(区分大小写)

回调推送

触发回调行为时,AVATA 平台会发送回调消息到您设置的服务回调地址中,请求内容如下:

  • 请求方式:POST

  • Header Parameters ( V1 版本):

参数类型说明
X-Api-Keystring项目 API Key
X-SignaturestringAPI 签名,算法为 SHA256 (Params+ApiSecret)
  • 推送参数( V1 版本):
{
    "operation_id":"string",                 // 操作 ID
    "type": "string",                        // 用户操作类型
    "module": "string",                      // 交易模块
    "tx_hash": "string",                     // 交易哈希
    "status": 0,                             // 交易状态,1 成功; 2 失败
    "message": "string",                     // 交易失败的错误描述信息
    "block_height": 0,                       // 交易上链的区块高度
    "timestamp": "string",                    // 交易上链时间(UTC 时间)
    "nft": "{                                // 对应不同操作类型的消息体 (参数值为:json字符串)
         "class_id": "string"
         "nft_id": "string",
    }",
     "mt": "{                                // 对应不同操作类型的消息体(参数值为:json字符串)
         "class_id": "string"
         "mt_id": "string",
    }",
     "record": "{                            // 对应不同操作类型的消息体(参数值为:json字符串)
         "record_id": "string",              // 区块链存证 ID
         "certificate_url": "string"         // 区块链存证证书的下载链接;证书下载链接并非长期有效,请您尽快将证书文件下载至本地并妥善保管。
    }"
}
  • Header Parameters ( V2 & V3 版本):
参数类型说明
X-Api-Keystring项目 API Key
X-SignaturestringAPI 签名,与 网关鉴权签名 方式保持一致
X-Timestampstring时间, 1642065511000
  • 推送参数( V2 & V3 版本):
{
    "operation_id":"string",                 // 操作 ID
    "module": 0,                             // 交易模块
    "operation": 0,                          // 用户操作类型
    "tx_hash": "string",                     // 交易哈希
    "status": 0,                             // 交易状态,1 成功; 2 失败
    "message": "string",                     // 交易失败的错误描述信息
    "block_height": 0,                       // 交易上链的区块高度
    "timestamp": "string,                    // 交易上链时间(UTC 时间)
    "nft": {                                 // 对应不同操作类型的消息体(参数值为:json 结构体)
         "class_id": "string",
         "id": "string"                      // 服务为 native 时,id 为字符串,服务为 evm 时,id 为 int
    },
    "mt": {                                  // 对应不同操作类型的消息体(参数值为:json 结构体)
         "class_id": "string",
         "mt_id": "string"
    },
    "record": {                              // 对应不同操作类型的消息体(参数值为:json 结构体)
         "record_id": "string",              // 区块链存证 ID
         "certificate_url": "string"         // 区块链存证证书的下载链接;证书下载链接并非长期有效,请您尽快将证书文件下载至本地并妥善保管。
    },
    "kind": "string"                         // 区分服务,native/evm
}

回调验签

  • v1 版本验签:

签名 = sha256 (body + api_secret)
将接收到的 body 转换成 json 字符串,拼接上 api_secret ,进行 sha256 计算。可参考网关鉴权签名示例中的 sha256 的计算方法。

       JSONObject jsonStr = JSON.parseObject("body参数");
       String jsonStr1 = JSON.toJSONString(jsonStr, SerializerFeature.MapSortField);
        // 执行签名
        String signature = sha256Sum(jsonStr1 + "api_secret");
  • v2 & V3 版本验签:

签名 = signRequest (“回调地址(去掉域名)”,null,Map<string,object> body,推送的请求头中的时间戳 (Long型),“apisecret”);

tip: 在接收到body后,需要调整部分参数类型为int型,在转换为body进行签名。否则无法验签通过。

回调验签示例 (java)

public String huidiao(HttpServletRequest request, HttpServletResponse response,@RequestBody String data) throws Exception{
        String timestamp =  request.getHeader("X-Timestamp");
        String qianming = request.getHeader("X-Signature");
        // //v1 版本验签
        // JSONObject jsonStr = JSON.parseObject("data");
        // String jsonStr1 = JSON.toJSONString(jsonStr, SerializerFeature.MapSortField);
        // // 执行签名
        // String signature = sha256Sum(jsonStr1 + "api_secret");
        // if(!signature.equals(qianming)){
        //     return "failed";
        // }
        // Map map = new HashMap<>();//map是data转换成json格式后将数据组装到map中
        // //v2 v3 版本验签
        // String signature=signRequest("设置的回调地址去掉域名", null, map, Integer.valueOf(timestamp), "api-secret");
        // if(!signature.equals(qianming)){
        //         return "failed";
        //     }
            return "SUCCESS";
    }

地址无法接收到回调

  • 请检查设置的地址是否能够被外网访问。
  • 请检查是否正确接收到回调信息。(建议接收 body、header 两个部分内容)
  • 如果使用代理等配置(包括但不限限于问题),请检查确保能够成功请求到这个地址。
  • 如果有设置白名单配置:
    • 正式环境:69.234.228.106
    • 测试环境:101.132.149.235、139.196.57.84 、47.101.67.19 、106.15.57.49

扫码加入文昌链微信技术交流群

在这里,获得 Avata 使用上的任何帮助,快速上手让你的研测效率大幅提升

扫码添加小助手
上一页
网关鉴权签名示例
Built with