NFT导入

1、资产导入时序图

时序图

2、术语

接入方:用户资产的外部所有者

平台方:数源卡包

所属链:资产所在的区块链

3、生成签名

使用对接方的corp_secret对Url查询参数进行HMACSHA256签名

step1 生成公共请求参数(UTC时间戳、nonce随机6位非0开头正整数、corp_id)

step2 将请求数据格式化为Url查询参数的形式

step3 对Url查询参数按照字母升序排列

step4 进行一次UrlEncode后,使用corp_secret对UrlEncode的字符串签名,生成hex字符串

step5 将&sign=签名字符串追加在UrlEncode后的字符串尾部,即可获得完整的Url查询参数

代码示例

GET https://out.xxxxx.com/assets/account/verification

以请求验证用户账号为例(Golang Function)

func SignByUrl(corpSecret string, query *url.Values) (string, string, error) {
    queryStr := query.Encode()

    hash := hmac.New(sha256.New, []byte(corpSecret))
    _, err := hash.Write([]byte(queryStr))
    if err != nil {
        return "", "", err
    }
    signData := hash.Sum(nil)
    signature := hex.EncodeToString(signData)
    queryStr = fmt.Sprintf("%s&sign=%s", queryStr, signature)
    return queryStr, signature, nil
}

func DoRequest() {
    domain := "https://out.xxxxx.com/assets/single/importing"
    corpId := "wn9ybdkn78z33x9fsbu4cu63ft6gnf7m"
    corpSecret := "9eysdhsal1212knmo358sdd"
    account := "18690706666"

    query := &url.Values{}
    query.Add("account", account)
    
    // 增加默认字段
    timestamp := uint64(time.Now().UTC().Unix())
    nonce := rand.Intn(800000) + 100000
    
    query.Add("corp_id", corpId)
    query.Add("nonce", strconv.Itoa(nonce))
    query.Add("timestamp", strconv.FormatUint(timestamp, 10))
    queryStr, _, err := SignByUrl(corpSecret, query)
    if err != nil {
        return
    }

    reqUrl := fmt.Sprintf("%s?%s", domain, queryStr)

    req, _ := http.NewRequest("GET", reqUrl, nil)
    req.Header.Add("Content-Type", "application/json")
  
    client := &http.Client{}
    defer client.CloseIdleConnections()
    resp, err := client.Do(req)
  
    if err != nil {
        fmt.Println(err)
        return
    }
    defer resp.Body.Close()
  
    var buf bytes.Buffer
    _, err = buf.ReadFrom(resp.Body)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(buf.String())
}

4、API列表

(1) 用户账号验证

(2) 处理资产单笔导入

(3) 处理资产批量导入

(4) 导入结果回调

(1) 用户账号验证

调用接入方已登记的用户账号验证接口

基本信息

请求方式:GET

请求地址:https://out.xxxxx.com/assets/account/verification

Query参数

名称 类型 是否必填 示例值 描述
account String 18690706666 用户在接入方的账号
corp_id String wn9ybdkn78z33x9fsbu4cu63ft6gnf7m 平台方分配给接入方的ID
nonce String 81244707 签名随机数
timestamp String 1656191400 平台方请求接入方的时间
sign String qywed612ebasad9123nac101ma 签名字符串

返回参数

名称 是否必填 类型 示例值 描述
code String 200 状态码
msg String success 状态码对应的提示内容
data Object 返回内容

(2) 请求资产单笔导入

调用接入方已登记的资产单笔导入接口

基本信息

请求方式:GET

请求地址:https://out.xxxxx.com/assets/single/importing

Query参数

名称 类型 是否必填 示例值 描述
account String 18690706666 用户在接入方的账号
address String 0x9cBA7K78040c67d99016a923289D8691aLLop 平台方充值钱包地址
callback_url String https://api.xxxxx.com/api/v1/assets/importing/callback 平台方回调接口地址
token_id String 21 资产tokenID
corp_id String wn9ybdkn78z33x9fsbu4cu63ft6gnf7m 平台方分配给接入方的ID
nonce String 51237001 签名随机数
timestamp String 1659198482 平台方请求接入方的时间
sign String qywed612ebasad9123nac101ma 签名字符串

返回参数

名称 是否必填 类型 示例值 描述
code String 200 状态码
msg String success 状态码对应的提示内容
data Object 返回内容
|—total Integer 1 可导入的总条目数
|—tx_hash String 0xe9ec888b68569610275868b8520a047f0ded4c575b197e3e9f621f04e7c 交易唯一编号,接入方需要保证唯一性
|—content Array<Object>
||—name String 清明上河图A 资产名
||—contract_address String 0x3A418ed9d8C5Bc3A6382A673526efF05CC314 合约地址
||—contract_network String Polygon 合约所属网络
||—contract_protocol String erc1155 合约协议类型
||—content_type String image/jpeg 资产的资源类型
||—content_uri String https://joysae-test-nft.oss-cn-chengdu.aliyuncs.com/userspace/Polygon.png 资产的资源地址
||—latest_trade_timestamp Integer 1659190482 上一次交易时间,UTC时间戳,单位'秒'
||—mint_timestamp Integer 1659090482 铸造时间,UTC时间戳,单位'秒'
||—owner String 0x4EC2fF78040c67d99016a923289D8691a 资产拥有者地址
||—open_id String 922 资产在接入方的唯一ID
||—price Integer 888 资产价格,单位'分'
||—token_id String 21 资产tokenID

(3) 请求资产批量导入

调用接入方已登记的资产批量导入接口

基本信息

请求方式:GET

请求地址:https://out.xxxxx.com/assets/batch/importing

Query参数

名称 类型 是否必填 示例值 描述
account String 6d1bxxxx 用户在接入方的账号
address String 6d1bxxxx 平台方充值钱包地址
callback_url String 6d1bxxxx 平台方回调接口地址
corp_id String 6d1bxxxx 平台方分配给接入方的ID
nonce String 6d1bxxxx 签名随机数
timestamp String 6d1bxxxx 平台方请求接入方的时间
sign String 6d1bxxxx 签名字符串

返回参数

名称 是否必填 类型 示例值 描述
code String 200 状态码
msg String success 状态码对应的提示内容
data Object 返回内容
|—total Integer 55 可导入的总条目数
|—tx_hash String 0xe9ec888b68569610275868b8520a047f0ded4c575b197e3e9f621f04e7c 导入hash,接入方要保证唯一
|—content Array<Object>
||—name String 清明上河图A 资产名
||—contract_address String 0x3A418ed9d8C5Bc3A6382A673526efF05CC314 合约地址
||—contract_network String Polygon 合约所属网络
||—contract_protocol String erc1155 合约协议类型
||—content_type String image/jpeg 资产的资源类型
||—content_uri String https://joysae-test-nft.oss-cn-chengdu.aliyuncs.com/userspace/Polygon.png 资产的资源地址
||—latest_trade_timestamp Integer 1659190482 上一次交易时间,UTC时间戳,单位'秒'
||—mint_timestamp Integer 1659090482 铸造时间,UTC时间戳,单位'秒'
||—owner String 0x4EC2fF78040c67d99016a923289D8691a 资产拥有者地址
||—open_id String 922 资产在接入方的唯一ID
||—price Integer 888 资产价格,单位'分'
||—token_id String 21 资产tokenID

(4) 导入结果回调

接入方在转账成功后,调用平台方的回调接口

基本信息

请求方式:GET

请求地址:https://out.xxxxx.com/assets/importing/callback

Query参数

名称 类型 是否必填 示例值 描述
status String success 处理状态,success|fail
tx_hash String 0xe9ec888b68569610275868b8520a047f0ded4c575b197e3e9f621f04e7c 接入方在请求导入接口返回给平台方的tx_hash
corp_id String wn9ybdkn78z33x9fsbu4cu63ft6gnf7m 平台方分配给接入方的ID
nonce String 30128712 签名随机数
timestamp String 1659191077 接入方请求平台方的时间
sign String asdh7812bas9123heuwg8sc 签名字符串

返回参数

名称 是否必填 类型 示例值 描述
code String 200 状态码
msg String 状态码对应的提示内容,处理失败时该字段才有值
data Object 返回内容

5、状态码列表

当code值不等于200时,返回数据的data为null,并且msg有错误提示信息

code值 类型 错误内容
200 String
400 String 请求参数错误
500 String 系统错误
12000 String 未找到资产平台
12015 String 签名无效
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容