淘派 OPEN API 接口文档
1. 环境
测试环境地址:https://nft-test0.taopainft.com/v1
线上环境地址:https://nft.taopainft.com/v1
2. 鉴权
前置条件:找淘派申请 appid
和 app secret
发起HTTP请求时,需要携带三个header头:
appid
:申请的appidsign
:使用app secret
生成的签名sign-time
:发起请求的时间戳,单位s
HTTP header头中 sign
签名的生成方式(伪代码):
sign_time = <当前时间戳>
http_body = <发起请求中的http body原始字节数据,不要经过任何处理>
appid = <淘派分配的appid>
app_secret = <淘派分配的app secret,请勿泄露>
// 1. 构造需要签名的数据
signdata = appid + "@" + app_secret + "@" + sign_time + "@" + http_body
// 2. 用sha256签名
signbyts = sha256.sign(signdata)
// 3. 将签名转换成功16进制小写字符串
sign = hex.toString(signbyts)
// 4. 将sign放到Http请求的header头中即可
Golang示例代码:
package main
import (
"bytes"
"crypto/sha256"
"encoding/hex"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"time"
"github.com/spf13/cast"
)
type TokenHasArg struct {
Mobile string `json:"mobile"`
ContractAddr string `json:"contractAddr"`
}
func main() {
appid := 1000001
appSecret := "c8c1e6b11855733b542cc655f62239c4"
signTime := time.Now().Unix()
arg := TokenHasArg{
Mobile: "18804919650",
ContractAddr:
"cfxtest:acfa7wc6ejegtw955e9tcrh1r7z2kyt49uzwjnh657",
}
argbyts, err := json.Marshal(arg)
if err != nil {
panic(err)
}
signData := cast.ToString(appid) + "@" + appSecret + "@" +
cast.ToString(signTime) + "@" + string(argbyts)
// sha256
shains := sha256.New()
shains.Write([]byte(signData))
signbyts := shains.Sum(nil)
signstr := string(hex.EncodeToString(signbyts))
// build http request
request, err := http.NewRequest(http.MethodPost,
"https://nft-test0.taopainft.com/v1/openapi/token/has",
bytes.NewBuffer(argbyts))
if err != nil {
panic(err)
}
request.Header.Set("appid", cast.ToString(appid))
request.Header.Set("sign-time", cast.ToString(signTime))
request.Header.Set("sign", signstr)
request.Header.Set("Content-Type", "application/json")
cli := &http.Client{}
resp, err := cli.Do(request)
if err != nil {
panic(err)
}
res, err := ioutil.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println(string(res))
}
其他说明:
签名后60s请求会过期,需要重新签名
签名验证失败,接口会返回http status 403
3. 接口列表
1.判断用户是否持有某个合约的NFT:
接口地址:
/openapi/token/has
请求方式:
POST
参数:
{
"mobile":"18804919650", // 手机号
"contractAddr":"cfxtest:acfa7wc6ejegtw955e9tcrh1r7z2kyt49uzwjnh657" //
合约地址
}
返回值
{
"code":0, // 0 表示正常, 其他值表示异常
"message":"ok", // 如果code非0,则会返回此错误信息
"data":{ // 数据
"has":true // 是否持有 true:持有 false:不持有
}
}
2.获取用户持有的合约列表
接口地址:
/openapi/user/contract/list
请求方式:
POST
参数:
{
"mobile":"18804919650" // 手机号
}
返回值
{
"code":0,
"message":"ok",
"data":{
"list":[
{
"name":"AnyTest",
// 合约名称
"symbol":"AnyTest",
// 合约标识
"description":"",
// 合约描述
"address":"cfxtest:acfa7wc6ejegtw955e9tcrh1r7z2kyt49uzwjnh657", //
合约地址
"image":""
// 合约图片地址
}
]
}
}
3.获取用户持有的NFT列表:
接口地址:
/openapi/user/token/list
请求方式:
POST
参数:
{
"mobile":"18804919650", // 手机号<必填字段>
"contractAddr":"cfxtest:acfa7wc6ejegtw955e9tcrh1r7z2kyt49uzwjnh657" //
合约地址<可选字段>:不填合约地址,则返回用户持有的所有合约藏品列表
"limit":1, // 要求返回的条目数,最大50条
"offset":0 // 要求返回的起始偏移
}
返回值
{
"code": 0,
"message": "ok",
"data": {
"total": 21, // 总条目数量
"list": [ // 条目
{
"tokenId": "31", // token id
"name": "Any测试31", // 藏品名称
"description": "Confi Anonymous(测试)", // 藏品描述
"image":
"https://taopainft-test.oss-cn-hangzhou.aliyuncs.com/TestIP/cfx%3Axdxxxxxx/Confi%20Anonymous%EF%BC%88%E6%B5%8B%E8%AF%95%E5%95%86%E5%93%81%EF%BC%89.jpg",
// 藏品图片
"metadata": "{\"author\": \"王小二\",\"series\": \"国潮盲盒系列\"
}", // 藏品metadata信息
"contractInfo": { // 藏品的合约信息
"name": "AnyTest", // 合约名称
"symbol": "AnyTest", // 合约标识
"description": "", // 合约描述
"address": "cfxtest:acfa7wc6ejegtw955e9tcrh1r7z2kyt49uzwjnh657",
// 合约地址
"image": "" // 合约图片地址
}
}
]
}
}
4.获取某个合约下的NFT列表:
接口地址:
/openapi/contract/token/list
请求方式:
POST
参数:
{
"contractAddr":"cfxtest:acfa7wc6ejegtw955e9tcrh1r7z2kyt49uzwjnh657" //
合约地址
"limit":1, // 要求返回的条目数,最大50条
"offset":0 // 要求返回的起始偏移
}
返回值
{
"code": 0,
"message": "ok",
"data": {
"total": 590, // 总条目数
"list": [ // 条目
{
"tokenId": "111", // token id
"name": "Any测试111", // 藏品名称
"description": "Confi Miiner test test", // 藏品描述
"image":
"https://taopainft-test.oss-cn-hangzhou.aliyuncs.com/TestIP/cfx%3Axdxxxxxx/Confi%20Mario%EF%BC%88%E6%B5%8B%E8%AF%95%E5%95%86%E5%93%81%EF%BC%89.jpeg",
// 藏品图片地址
"metadata": "{\"author\": \"王小二\",\"series\": \"国潮盲盒系列\"
}", // 藏品metadata信息
"contractInfo": { // 藏品的合约信息
"name": "AnyTest", // 合约名称
"symbol": "AnyTest", // 合约标识
"description": "", // 合约描述
"address": "cfxtest:acfa7wc6ejegtw955e9tcrh1r7z2kyt49uzwjnh657",
// 合约地址
"image": "" // 合约图片地址
}
}
]
}
}
Last updated