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可以进行统一认证开放平台授权关系接口调用,从而可实现获取统一认证用户基本开放信息和帮助用户实现基础开放功能等

统一认证流程:

  1. 第三方发起统一认证授权登录请求,统一认证用户允许授权第三方应用后,统一认证会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;

  2. 通过code参数加上api_key和api_secret等,通过API换取bidAccessToken;

  3. 通过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": "操作成功"
}