CaTalk
  1. 开发者必看
CaTalk
  • 产品说明
    • 建议先读这里
  • 运营者必看
    • CaTalk社群创建指南
    • CaTalk品牌超级专区后台管理
  • 开发者必看
    • 前端优化指南 - Webview容器与H5页面通讯
    • 后端接入指南 - 私有链
    • 后端接入指南 - 公链/开放联盟链
  • 在线调试
    • 查询用户链地址
      POST
  • Claude
  1. 开发者必看

后端接入指南 - 私有链

主要功能: 通过手机号查询用户持有的资产情况
仅针对冷门链或私有链
image.png

开发者端需处理的来自CaTalk服务端的查询请求:#

约定传递参数如下:#

userHash#

对手机号进行加密后的字符串,加密的目的是防御中间人攻击,避免用户手机号暴露在不安全的网络环境,造成隐私泄露;
可选的加密算法如下:
方案A: SHA256 / MD5不可逆加密,需要开发者后端能通过加密后的字符串查询到用户在数据库中对应的记录;
方案B: AES加密解密,由CaTalk端加密,开发者端解密,需要开发者对AES解密方法有了解,目前我们采用的是AES/CBC/Pkcs5Padding方式
无论是哪种方案需同CaTalk先协商好;

sign (可选,建议在采用以上方案A时加上)#

验签字段,开发者端可忽略,但不建议忽略,此字段的功能是防止API地址被第三方泄露后,再结合猜到的SHA256 / MD5加密算法,发起恶意请求。
验签规则如下:
开发者端拿到sign的值后,先将 userHash + timestamp + apikey 这三个字符串拼接后做 sha256加密,如果等于sign值,则表示来源请求合法,具体公式如下:
if  sha256(userHash+timestamp+apikey) == sign {
     return "合法请求,继续处理查询"
} else {
     return "非法请求,阻止查询"
}
apikey由catalk官方生成,开发者拿到后注意保管好,不要告诉任何人!
测试 apikey:test

来自CaTalk端发出的 POST 请求范例:#

POST https://api.xxx.com/v1/queryUserNFTs
Header 'Content-Type: application/json'
JSON:
方案A:
{
    "userHash":"fe1608296a23c1e41bb8f2534261ba54f893c68b1fd1ea3eb1e4f575c395fc39",//手机号12300000000加密后的字符串
    "sign":"e9f64f6c3b8b735f8cb3ca99ecbbde3101b7c8ec612523f3a67bf3201bf13a40", //sha256(fe1608296a23c1e41bb8f2534261ba54f893c68b1fd1ea3eb1e4f575c395fc391680514641test)
    "timestamp":"1680514641"
}
方案B:
{
    "userHash":"i86b1bOL0qzj23WpDbYr0A==",//通过密钥key:XvAmOAzc7BBVXEDVdup2DPUNZJShJcJ6 ,能解密出手机号12300000000,即表示解密算法正确
}

开发者服务端需返回的字段:#

data#

出错时,请传空数组 []
token可以理解为一条藏品记录,group可以理解为一个系列,多条不同的token_no记录可以是同样的group_no,相当于用户持有同系列的#1、#2编号,可以是2条记录,每条记录count=1(即ERC721),或者某种徽章全都是一样的,不区分编号,那么可能count > 1(即ERC1155)。
群是以系列为单位来建立的,group_image即群封面,token_image即用户头像,用户可能持有一个系列的多个不一样的头像。
字段名类型必填说明注意事项
token_nostring必填藏品唯一编号建议仅英文数字,注意正式上线后如出现修改,则被当成新的藏品记录被读取,且旧记录会被自动删除
token_namestring必填昵称/藏品名称CaTalk方初次收录藏品信息时读取,如果是域名,则可以作为用户昵称
token_imagestring必填头像/藏品图片urlurl地址建议是给出后缀(如.png),否则可能导致用户头像无法正常展示
group_nostring必填群组/系列/合约唯一编号建议仅英文数字,注意正式上线后不可随意更改,否则会导致用户的群关系丢失
group_namestring必填群组/系列/合约名称建议与藏品系列名称一致,初次建群时读取,至少要与藏品系列有关联,方便用户加群时识别
group_imagestring必填群组/系列/合约封面图片url建议与藏品图片url一致,原因同群组名称
countnumber必填藏品/系列持有数量用于排行榜计算,为0或整条记录不存在则表示已转让

error_code#

未出错时,请传空字符串 ""
开发者返回出错码说明CaTalk会如何处理?
user_not_exist当前用户不存在针对当前用户,下次进社群再查询
user_query_too_frequently当前用户查询太频繁针对当前用户,记录本次查询时间,过一段时间再次查询。(即使未收到此错误,CaTalk也默认有开启防频繁查询策略)
user_block_query禁止查询当前用户针对当前用户,禁止后续再次查询
system_query_too_frequently被开发者端全面限流针对所有用户,记录本次查询时间,过一段时间再次查询
system_shutdown开发者端系统维护中针对所有用户,关闭查询,等待手动开启

error_msg#

请至少传空字符串 ""
出错提示信息,建议直接返回用户可读的中文提示,方便即时查错。

next_query_time (选填)#

秒级Unix时间戳;
如果存在此字段,那么表示要求CaTalk遵循开发者端自身的限流策略,CaTalk会记录此时间,并关闭默认的防频繁查询策略,改成以这个字段传递的时间为下次查询时间,未到此时间,CaTalk不会执行下一次查询。
请注意:太低频率的查询,可能导致用户的藏品数据在开发者端发生变化时,CaTalk无法实时同步更新状态,造成用户无法立即加群或者即时退群。

返回范例:#

正常返回:#

HTTP状态码:200

{
    "error_code":"", //出错码,报错时有值,正常时为空字符串
    "error_msg": "", //出错提示信息,建议直接返回用户可读的中文提示,方便即时查错。
    "data": [
        {
            "count": 1,  
            "token_no":"abc1",
            "token_name": "藏品A-1",
            "token_image": "https://xxx.com/xxx1.png",
            "group_no": "aaaa111",
            "group_name": "群名A",
            "group_image": "https://xxx.com/group/xxx.png"
        },
        {
            "count": 1,  
            "token_no":"abc2",
            "token_name": "藏品A-2",
            "token_image": "https://xxx.com/xxx2.png",
            "group_no": "aaaa111",
            "group_name": "群名A",
            "group_image": "https://xxx.com/group/xxx.png"
        },
        {
            "count": 3,
            "token_no":"xyz456",
            "token_name": "藏品B",
            "token_image": "https://xxx.com/yyy.png",
            "group_no": "bbbb222",
            "group_name": "群名B",
            "group_image": "https://xxx.com/group/yyy.png"
        },
        ...
    ]
}

出错了:#

HTTP状态码:400 / 401 / 400
{
    "error_code":"user_not_exist", //出错码,报错时有值,正常时为空字符串
    "error_msg": "用户不存在,可能是您还未注册XXX账号", //出错提示信息,建议直接返回用户可读的中文提示,方便即时查错。
    "data": []
}
上一页
前端优化指南 - Webview容器与H5页面通讯
下一页
后端接入指南 - 公链/开放联盟链
Built with