1、调用链码的查询接口
https://apibaas.58.com/chaincode/query请求方式:POST输入参数 :
参数名
必填
类型
示例值
描述
appKey
是
string
0e7c23s9e4453d90db7a42f61d2
区块链网络Key
appKey
是
string
xOJb3dn3dfdrQixDgffdds2YOnIH
组织Key
channelName
是
string
mychannel
通道名称
chaincodeName
是
string
chaincode
链码名称
chaincodeVersion
是
string
1.0
链码版本
func
是
string
query
链码方法名称
args
是
string
a
链码参数,若有多个参数,args后加数字,从0开始。如有三个参数a、b、100,则需传递三个参数 args0=a&args1=b&args2=100
nonce
是
string(32)
C380BEC2BFD727A4B6845133519F3AD6
随机数
orgs
否
string
org1
链码调用的组织名称,默认调用orgKey所属组织,如调用多个组织,则需用“|”分割组织名,如:orgs=org1|org2
sign
是
string
6C7A87D8B55DAA1FF5DDF3F4243B7AE9
签名
输出参数 :
参数名称
类型
描述
code
int
公共错误码, 200 表示成功,其他值表示失败,详见错误码
message
string
模块错误信息描述,与接口相关
data
json
在code=200时,返回查询结果数据
在code=200时,data中的数据:
参数名称
类型
描述
status
int
公共错误码, 200 表示成功,其他值表示失败,详见错误码
message
string
模块错误信息描述,与接口相关
data
json
区块链返回的结果数据
2、调用链码的方法
https://apibaas.58.com/chaincode/invoke请求方式:POST
输入参数 :
参数名
必填
类型
示例值
描述
appKey
是
string
0e7c23s9e4453d90db7a42f61d2
区块链网络Key
orgKey
是
string
xOJb3dn3dfdrQixDgffdds2YOnIH
组织Key
channelName
是
string
mychannel
通道名称
chaincodeName
是
string
chaincode
链码名称
chaincodeVersion
是
string
1.0
链码版本
func
是
string
transfer
链码方法名称
args
否
string
a
链码参数,若有多个参数,args后加数字,从0开始。如有三个参数a、b、100,则需传递三个参数 args0=a&args1=b&args2=100
nonce
是
string(32)
C380BEC2BFD727A4B6845133519F3AD6
随机数
orgs
否
string
org1
链码调用的组织名称,默认调用orgKey所属组织,如调用多个组织,则需用“|”分割组织名,如:orgs=org1|org2
sign
是
string
6C7A87D8B55DAA1FF5DDF3F4243B7AE9
签名,签名算法见第3部分
输出参数 :
3、错误码
code
message
说明
200
SUCCESS
成功
500
ERROR
失败
501
PARAM_MISSING
缺少参数
502
PARAM_ERROR
参数错误
503
INVALID_SIGN
参数签名错误
504
RATE_LIMIT
调用太频繁,被限流(不超过2000TPS)
505
BLACK_LIST
已被加入黑名单
4、签名算法
签名生成的通用步骤如下:
第一步,将请求参数集合中非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
◆ 参数名ASCII码从小到大排序(字典序);◆ 如果参数的值为空不参与签名;◆ 参数名区分大小写;◆ sign参数不参与签名
第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
◆ key路径:58区块链平台(baas.58.com)–> 查看组织密钥
举例:假设传送的参数如下:
appKey=0e7c23s9e4453orgKey=xOJb3dn3dfdrQichannelName=mychannelchaincodeName=chaincodechaincodeVersion=1.0func=transferargs0=aargs1=bargs2=10nonce=d8jcd77xss
第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
StringA = appKey=0e7c23s9e4453&args0=a&args1=b&args2=10&chaincodeName=chaincode&chaincodeVersion=1.0&channelName=mychannel&func=transfer&nonce=d8jcd77xss&orgKey=xOJb3dn3dfdrQi
第二步:拼接API密钥:
stringSignTemp=stringA+"&key=123wwd"//注:key为组织秘钥
第三步:生成MD5签名
sign=MD5(stringSignTemp).toUpperCase() = "9A0A8659F005D6984697E2CA0A9CF3B7"
最终得到最终发送的数据:
appKey=0e7c23s9e4453orgKey=xOJb3dn3dfdrQichannelName=mychannelchaincodeName=chaincodechaincodeVersion=1.0func=transferargs0=aargs1=bargs2=10nonce=d8jcd77xsssign=9A0A8659F005D6984697E2CA0A9CF3B7