5 服务市场
服务市场是为星火·链网网生态内企业提供的区块链应用的市场平台。服务市场联合众多合作伙伴,共同打造区块链应用服务生态,为用户推出一系列有价值的区块链商品服务。企业可开发基于区块链的服务或应用,上架到服务市场进行售卖。服务市场由星火·链网网超级节点共同运营,平等共治。
5.1服务商认证申请(暂缓开通)
服务商认证需要用户支付1星火链令,
服务商认证申请需要两步操作,(1)获取服务商认证blob,用于将服务商认证费用上链;(2)用户私钥对blob进行签名,并提交上链。
5.1.1 获取服务商认证blob
接口说明:
获取服务商认证blob。
请求参数:
字段名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
userBid | String | 是 | 用户bid(需要有星火链令) |
companyName | String(128) | 是 | 公司名称 |
companyPicUrl | String(1024) | 是 | 公司海报 |
companyWebsite | String(1024) | 是 | 企业网站 |
companyAddress | String(1024) | 是 | 公司地址 |
linkmanName | String(128) | 是 | 商务联系人 |
linkmanPhone | String(20) | 是 | 商务联系人电话 |
linkmanMail | String(128) | 是 | 商务联系人邮箱 |
applyReason | String(1024) | 是 | 认证理由 |
返回数据:
字段名 | 类型 | 描述 |
---|---|---|
blobId | String | blodId |
txHash | String | 交易hash |
blob | String | blob串 |
示例:
(1)请求示例:
http请求方式:POST
https://{url}/v1/gpds/service/provider/blob
{
"accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhcGlLZXkiOiJDcHB0NHRuMFlFZkIyMHJXIiwiaXNzIjoiQklGLUNIQUlOIiwiZXhwIjoxNjIxNTcxMjg0LCJiaWQiOiJkaWQ6YmlkOmVmMjhwTTlNRzNUR1hHeVdBVzRKcFdDRnNKRGQ1TUJuYyJ9.9tTPWasYgCs1yC3qYJYSjCGvd9Syl1mr6G2EVrKeq2E",
"params": {
"userBid": "did:bid:efUVp9QZuJRQRRWsRU4ZanZukpNcLksL",
"companyName": "链通科技",
"companyPicUrl": "ipfs://QmV1Z7syFkw8Tg41RuWChn7Ad3KjwgTexHeJ2LiYEEK2rd",
"companyWebsite": "http://lt369.com",
"companyAddress": "北京市朝阳区",
"linkmanName": "张三",
"linkmanPhone": "13812348989",
"linkmanMail": "zhangsan@126.com",
"applyReason": "申请服务商"
}
}
(2)返回结果示例:
a. 接口调用成功,则返回JSON数据示例为:
{
"errorCode": 0,
"message": "操作成功",
"data": {
"blobId": "15",
"txHash": "d60c15bacbb7f98f00921d5ad17d49fafe0c65ea706d5d4ced25e490ac35e9e0",
"blob": "0A286469643A6269643A65663477776B727A53564650545A4A627257433439446B416554535169377241101E228304080712286469643A6269643A656662384568753953475643546D32426276705069516A7A4E576F344C51414152D4030A286469643A6269643A6566427070397753676564315A5A72437566426D36374A4C55635255396375321AA7037B226D6574686F64223A227375626D6974426C6F636B486561646572222C22706172616D73223A7B22626C6F636B486561646572223A7B226163636F756E745F747265655F68617368223A22222C22636C6F73655F74696D65223A2231353933333338343030303032303030222C22636F6E73656E7375735F76616C75655F68617368223A22222C22666565735F68617368223A22222C2268617368223A2235323134303538363966626533633132396237383434383232333566616365633435656438653432313666633834653962623665336136386661653430636232222C2270726576696F75735F68617368223A2231323334363966626533633132396237383434383232333566616365633435656438653233313435363537646161313233343131326136386661653430636232222C22736571223A223938222C2274785F636F756E74223A223132222C2276616C696461746F72735F68617368223A22696E7465726E616C436861696E496432222C2276657273696F6E223A22227D2C22636861696E436F6465223A2262793031222C2264796E616D6963496E666F223A7B7D7D7D3080EAADE907"
}
}
b. 接口调用失败,则返回JSON数据示例为:
{
"errorCode": 940000,
"message": "系统内部错误"
}
5.1.2 服务商认证提交(上链)
接口说明:
对blob数据进行签名(参考 签名算法 章节),并提交至主链执行上链操作,用于服务商认证提交
请求参数:
字段名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
blobId | String(20) | 是 | blobId(5.1.1返回blobId) |
signerList | List | 是 | 签名者列表(注意:需要用户签名) |
signerList.signBlob | String(128) | 是 | 签名串 |
signerList.publicKey | String(128) | 是 | 签名者公钥 |
返回数据:
字段名 | 类型 | 描述 |
---|---|---|
applyNo | String | 申请编号 |
txHash | String | 链上交易hash |
示例:
(1)请求示例:
http请求方式:POST
https://{url}/v1/gpds/service/provider/submit
{
"accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhcGlLZXkiOiJDcHB0NHRuMFlFZkIyMHJXIiwiaXNzIjoiQklGLUNIQUlOIiwiZXhwIjoxNjE5MzQyNDIyLCJiaWQiOiJkaWQ6YmlkOmVmMjhwTTlNRzNUR1hHeVdBVzRKcFdDRnNKRGQ1TUJuYyJ9.3gcQQBqvqtZH1q-TfUiGne68R1TnBcvLAA6nIJ8qDGU",
"params": {
"blobId": "3",
"signerList": [{
"signBlob": "4D47D46AA467C8DF8FD1D60374D9D2378AC536612C3B84E1AC9BA4EA55E10810482EC634EADED63A389F82573AB1E055698189F7497DF23C5E32CF26A7D8270F",
"publicKey": "b06566086febd16adf6553cc9c000dba5f9f410d34f8541392303561dddc045b15ef4c"
}]
}
}
(2)返回结果示例:
a. 接口调用成功,则返回JSON数据示例为:
{
"errorCode": "0",
"message": "操作成功",
"data": {
"applyNo":"",
"txHash": "083b797ea00204d2c17a9e1bd77cab11385f475da756f76a96b922e4c7b8f7c7"
}
}
b. 接口调用失败,则返回JSON数据示例为:
{
"errorCode": 940000,
"message": "系统内部错误"
}
5.1.3 查询服务商认证结果
接口说明:
查询服务商认证申请结果
请求参数:
字段名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
applyNo | String | 是 | 申请编号 |
返回数据:
字段名 | 类型 | 描述 |
---|---|---|
applyStatus | String | 1待审核 2审核不通过 3审核通过 |
示例:
(1)请求示例:
http请求方式:POST
https://{url}/v1/gpds/service/provider/authStatus
{
"accessToken":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhcGlLZXkiOiJhdkNmcDdscU16SDVtTk5kIiwiaXNzIjoiQklGLUNIQUlOIiwiZXhwIjoxNjExNzQ0NjIwLCJiaWQiOiJkaWQ6YmlkOmVmejNvVFFHN0xZZktKRWlDeU1nNThOOVREZjl2cFd5In0.sCm7gaWX_nmIasUyo64tn5FeAqDaxxDn2Kb9Jixk2YI",
"params":{
"applyNo":"efNY98KmDLXQFvJuJEtMUvFX3fTEvxVS"
}
}
(2)返回结果示例:
a. 接口调用成功,则返回JSON数据示例为:
{
"errorCode": 0,
"message": "操作成功",
"data": {
"applyStatus":"1"
}
}
b. 接口调用失败,则返回JSON数据示例为:
{
"errorCode": 941089,
"message": "申请编号不存在"
}
5.2服务上架
用户可以在星火·链网平台申请成为服务商,审核通过后,可以在星火·链网平台上服务市场上架自己的服务(业务管理平台上操作,API接口)
5.3 查询应用服务订单数据
接口说明:
针对星火·链网公共数据服平台上架的应用服务,服务商使用此接口可以向主链查询服务商品的售卖情订单数据,服务商需根据订单数据为用户提供对应服务。
请求参数:
字段名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
spu | String | 否 | 服务商品ID |
startTime | String | 否 | 订单查询开始时间(格式 2020-12-24 12:18:22) |
endTime | String | 否 | 订单查询结束时间 (格式 2020-12-25 12:18:22) |
pageStart | Integer | 否 | 开始页 默认1 |
pageSize | Integer | 否 | 每页条数 默认100条 |
返回数据:
字段名 | 类型 | 描述 |
---|---|---|
orderList | List | 订单列表 |
orderList.orderNo | String | 订单编号 |
orderList.buyerBid | String | 购买者主链bid |
orderList.spu | String | 服务商品ID |
orderList.sku | String | 服务商品规格ID |
orderList.skuDescribe | String | 商品规格描述 |
orderList.orderType | String | 订单类型 0首次购买 1续费购买 |
orderList.serviceName | String | 服务名称 |
orderList.serviceRatio | String | 服务费率 |
orderList.orderAmount | String | 订单总额 |
orderList.arrivalAmount | String | 到账金额 |
orderList.orderTime | Long | 下单时间(时间戳 单位:毫秒) |
orderList.paymentTime | Long | 支付完成时间时间戳 单位:毫秒) |
orderList.orderStatus | String | 0支付中,1支付成功,2支付失败,3支付超时' |
orderList.remark | String | 备注 |
示例:
(1)请求示例:
http请求方式:POST
https://{url}/v1/gpds/order/list
{
"accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhcGlLZXkiOiJhdkNmcDdscU16SDVtTk5kIiwiaXNzIjoiQklGLUNIQUlOIiwiZXhwIjoxNjExNzQ0NjIwLCJiaWQiOiJkaWQ6YmlkOmVmejNvVFFHN0xZZktKRWlDeU1nNThOOVREZjl2cFd5In0.sCm7gaWX_nmIasUyo64tn5FeAqDaxxDn2Kb9Jixk2YI",
"params": {
"spu": "",
"startTime": "",
"endTime": "",
"pageStart": 1,
"pageSize": 10
}
}
(2)返回结果示例:
a. 接口调用成功,则返回JSON数据示例为:
{
"errorCode": 0,
"message": "操作成功",
"data": {
"page": {
"pageSize": 10,
"pageStart": 1,
"pageTotal": 1
},
"orderList": [
{
"orderNo": "4c8572f4b83a74ec7c0f7a0550f6e713",
"buyerBid": "did:bid:efiuyquGWTvREsY9mrVoKVhFe5ZJxZdR",
"serviceNo": "cb5eb6ae5b8c08b75cd1c3a762641868",
"serviceName": "by01-服务",
"serviceRatio": "0.22",
"orderAmount": "12.00",
"arrivalAmount": "9.36",
"orderTime": "1610004089000",
"paymentTime": "1610004109000",
"orderStatus": "1",
"remark": ""
}
]
}
}
b. 接口调用失败,则返回JSON数据示例为:
{
"errorCode": 940000,
"message": "系统内部错误"
}
5.4 同步API类服务商品的授权信息
接口说明:
对于API类服务服务商根据订单号,需要为购买者提供调用API服务的appId、appSecret等相关使用权限的凭证,并将凭证的信息推送给平台,平台会将该信息推给对应购买者。
请求参数:
字段名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
orderNo | String(128) | 是 | 订单号 |
appId | String(128) | 是 | 访问应用服务的appId |
appSecret | String(128) | 是 | appSecret |
返回数据:
字段名 | 类型 | 描述 |
---|---|---|
errorCode | Integer | 错误码 |
message | String | 错误描述 |
示例:
(1)请求示例:
http请求方式:POST
https://{url}/v1/gpds/sync/appInfo
{
"accessToken": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhcGlLZXkiOiJhdkNmcDdscU16SDVtTk5kIiwiaXNzIjoiQklGLUNIQUlOIiwiZXhwIjoxNjExNzQ0NjIwLCJiaWQiOiJkaWQ6YmlkOmVmejNvVFFHN0xZZktKRWlDeU1nNThOOVREZjl2cFd5In0.sCm7gaWX_nmIasUyo64tn5FeAqDaxxDn2Kb9Jixk2YI",
"params": {
"orderNo": "4c8572f4b83a74ec7c0f7a0550f6e713",
"appId": "avCfp7lqMzH5mNNd",
"appSecret": "68bdc38618c6f8832b9ba1beac0ff763d0f32763"
}
}
(2)返回结果示例:
a. 接口调用成功,则返回JSON数据示例为:
{
"errorCode": 0,
"message": "操作成功"
}
b. 接口调用失败,则返回JSON数据示例为:
{
"errorCode": 940000,
"message": "系统内部错误"
}
PS:对后台推送数据时,如果收到平台的应答不是成功,认为推送失败,服务提供商需要通过一定的策略定期重新发起通知,尽可能提高通知的成功率。 (推送频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)
5.5 查询API类服务商品调用余量
接口说明:
需要服务提供商 提供调用余量API给平台查询
请求参数:
字段名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
appId | String(128) | 是 | 访问API类服务的appId |
salt | String(32) | 是 | 随机串32位 |
sign | String(64) | 是 | 对请求数据的签名串,签名规则如下:appId、salt和secretKey拼接起来的字符串进行sha256后得到的字符串。其中secretKey是在星火·链网网平台录入的 |
返回数据:
字段名 | 类型 | 描述 |
---|---|---|
allowance | Long | 余量(次数、时长-单位秒) |
示例:
(1)请求示例:
http请求方式:POST
https://{url}/api/allowance
{
"appId": "avCfp7lqMzH5mNNd",
"salt":"2be9bd7a3434f7038ca27d1918de58bd",
"sign":"73376126e735e645d555ed111a4990c2"
}
(2)返回结果示例:
a. 接口调用成功,则返回JSON数据示例为:
{
"data":{
"allowance":20
},
"errorCode": 0,
"message": "操作成功"
}
b. 接口调用失败,则返回JSON数据示例为:
{
"errorCode": 940000,
"message": "系统内部错误"
}
5.6 用户统一授权认证(暂缓开通)
统一认证OAuth2.0授权登录让统一认证用户使用统一认证身份安全登录第三方应用或网站,在统一认证用户授权登录已接入统一认证OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行统一认证开放平台授权关系接口调用,从而可实现获取统一认证用户基本开放信息和帮助用户实现基础开放功能等
统一认证流程:
第三方发起统一认证授权登录请求,统一认证用户允许授权第三方应用后,统一认证会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
通过code参数加上api_key和api_secret等,通过API换取bidAccessToken;
通过bidAccessToken进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。
5.6.1请求认证
接口说明:
http请求方式:GET
https://{url}/oAuth/code?api_key=${appi_key}&redirect_uri=REDIRECT_URI&scope=web&response_type=code
请求参数:
字段名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
api_key | String | 是 | api_key |
redirect_uri | String | 是 | 重定向地址,需要进行UrlEncode |
response_type | String | 是 | 返回类型 |
scope | String | 是 | 用户授权的作用域 web |
返回数据:
用户登录授权后,将会重定向到redirect_uri的网址上,并且带上code参数
返回示例:
redirect_uri?code=CODE
5.6.2通过code获取bidAccessToken
接口说明:
通过code获取bidAccessToken
http请求方式:POST
https://{url}/oAuth/accessToken
Content-Type:application/x-www-form-urlencoded
请求参数:
字段名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
api_key | String | 是 | api_key |
api_secret | String | 是 | api密钥AppSecret |
code | String | 是 | 5.6.1获取的code |
grant_type | String | 是 | 填authorization_code |
返回数据:
字段名 | 类型 | 描述 |
---|---|---|
bidAccessToken | String | bid令牌 |
refreshBidToken | String | 刷新票据 |
expireIn | String | 过期时间 (单位秒 有效期为 7200 s) |
scope | String | 用户授权的作用域 |
返回示例:
{
"data": {
"bidAccessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6IkZDMjFnN2JzMVI2TjJGWjMiLCJpc3MiOiJidW1vIiwiZXhwIjoxNTYxMDAyODIyfQ.hgVH0T6fLxk973U2fIj_ejDx5aJuzRFlg1VAUA2RgzM",
"expireIn": 7200,
"refreshBidToken":"",
"scope":""
},
"errorCode": 0,
"message": "操作成功"
}
5.6.3 刷新bidAccessToken
接口说明:
由于bidAccessToken拥有较短的有效期,当bidAccessToken超时后,可以使用refreshBidToken进行刷新,当refreshBidToken失效之后,需要用户重新授权。
http请求方式:POST
https://{url}/oAuth/refreshToken
Content-Type:application/x-www-form-urlencoded
请求参数:
字段名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
api_key | String | 是 | api_key |
refreshBidToken | String | 是 | 刷新token票据 |
grant_type | String | 是 | 填authorization_code |
返回数据:
字段名 | 类型 | 描述 |
---|---|---|
bidAccessToken | String | 接口调用令牌 |
refreshBidToken | String | 刷新票据 |
expireIn | String | 过期时间 (单位秒 有效期为 7200 s) |
scope | String | 用户授权的作用域 |
返回示例:
{
"data": {
"bidAccessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHBJZCI6IkZDMjFnN2JzMVI2TjJGWjMiLCJpc3MiOiJidW1vIiwiZXhwIjoxNTYxMDAyODIyfQ.hgVH0T6fLxk973U2fIj_ejDx5aJuzRFlg1VAUA2RgzM",
"expireIn": 7200,
"refreshBidToken":"",
"scope":""
},
"errorCode": 0,
"message": "操作成功"
}
5.6.4 获取用户信息
接口说明:
使用bidAccessToken来获取用户的信息
http请求方式:POST
https://{url}/oAuth/getUserInfo
{
"accessToken":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhcGlLZXkiOiJDcHB0NHRuMFlFZkIyMHJXIiwiaXNzIjoiQklGLUNIQUlOIiwiZXhwIjoxNjE5MzQyNDIyLCJiaWQiOiJkaWQ6YmlkOmVmMjhwTTlNRzNUR1hHeVdBVzRKcFdDRnNKRGQ1TUJuYyJ9.3gcQQBqvqtZH1q-TfUiGne68R1TnBcvLAA6nIJ8qDGU",
"params":{
"bidAccessToken":""
}
}
请求参数:
字段名 | 类型 | 是否必填 | 描述 |
---|---|---|---|
bidAccessToken | String | 是 | bid授权令牌 |
返回数据:
字段名 | 类型 | 描述 |
---|---|---|
userBid | String | 企业bid |
companyName | String | 企业名称 |
返回示例:
{
"data": {
"userBid": "did:bid:efv7DynieC5sF1UoKAthKTfUCkuzaBfR",
"companyName":"信通院"
},
"errorCode": 0,
"message": "操作成功"
}