乐趣区

关于区块链开发:中移链DDCSDK技术对接全流程三

id:BSN_2021 公众号:BSN 研习社 作者:中移信息

2021 年 10 月,BSN 提出搭建 BSN-DDC 根底网络,区块链团队自主研发中移链(CMBaaS)DDC 并与 BSN 发展单干,面向存在 DDC 业务需要的各行业客户提供接入服务,使其可便捷治理 DDC 操作,从而灵便降级产品模式,助力客户业务翻新。

本文档是对于中移链 DDC-SDK 技术在对接全流程中,如何调用 BSN-DDC 门户 OpenAPI 接口的生成公私钥对、创立链账户、接入官网 DDC 合约、分配资源、业务费充值以及对应查问的操作指南,实用于 BSN 凋谢联盟链 – 中移链 DDC-SDK 开发者,帮忙读者理解如何以平台方的角色集成中移链 DDC-SDK。

一、BSN-DDC 门户 OpenAPI 简介

BSN-DDC 门户 OpenAPI 是用于与中移链交互的 API 服务,次要性能可参考《BSN-DDC 门户 OpenAPI 接口文档》。在中移链 RPC API 手册的根底上,为中移链零碎合约提供可拜访的服务入口,不便平台方通过 OpenAPI 实现对系统合约的近程调用。

BSN-DDC 门户 OpenAPI 次要蕴含四个局部:凋谢联盟链框架、项目管理、DDC 链账户治理、官网 DDC 查问。以下是各个局部的性能介绍:

凋谢联盟链框架:负责凋谢联盟链框架的列表查问和反对的链账户类型查问,例如中移链的 opbChainId 为 9,反对的链账户类型为上传公钥。

项目管理:负责我的项目的创立、列表查问和状态更新,平台方应用我的项目 ID 和我的项目 key 接入 OPB 网关,并发动合约交易,默认不开启我的项目 key。

DDC 链账户治理:提供残缺的 DDC 链账户治理流程,次要包含:生成链账户公私钥对、创立链账户、接入官网 DDC 合约、分配资源和业务费充值等。

官网 DDC 查问:提供官网 DDC 的发行明细和交易列表查问,同时反对官网 DDC 的生成、受权、转移、销毁等残缺流转记录的查问。

二、名词解释

凋谢联盟链:用于部署和运行各类区块链利用的一站式区块链服务运行环境。凋谢联盟链的利用共享记账节点资源和区块链数据账本;链外业务零碎能够通过节点网关简略、疾速接入区块链网络进行交易解决。

BSN DID:平台方的链上身份凭证标识,关联平台方的业务开明凭证、链账户以及其下终端用户的链账户,是平台方发展 DDC 利用和治理业务的根底标识。平台方须要妥善保留和备份好 BSN DID 的管制私钥。

DID-SDK:蕴含注册 DID、更新密钥、验证 DID 三个办法,平台方只需注册一次 DID 即可,所以需妥善保留和备份好 BSN DID 的管制私钥,如私钥失落或透露,通过更新密钥办法从新生成 BSN DID 的管制私钥。

门户 OpenAPI:BSN 联盟面向平台方凋谢的一套官网 DDC 治理服务接口。平台方依照官网门户 OpenAPI 开发材料进行接口对接,将官网 DDC 的治理侧性能和查问类性能集成到本人的业务门户内。

官网 DDC 合约:所有 DDC 凋谢联盟链上,部署完全一致的 BSN 官网 DDC 合约,能够生成和治理 BSN 官网 DDC(反对 ERC-721 和 ERC-1155)。也容许平台方部署本人的 DDC 合约,该类 DDC 由相干平台方自行负责。

BSN 官网 DDC:通过 BSN 官网 DDC 合约生成的官网 DDC。BSN 联盟为每条凋谢联盟链都推出一套性能统一,但实现过程不尽相同的官网 DDC 合约,同一条链上的每个官网 DDC 都由这个官网 DDC 合约生成,且都由 BSN 联盟进行背书。

apitoken:平台方调用门户 OpenAPI 的每个接口,都需在申请头填写 apitoken,服务侧会对 apitoken 的值进行有效性验证,同时依据此值将申请报文关联到对应的平台方,所以平台方需妥善治理本人的 apitoken。

三、开发前筹备

(一)注册 DDC 门户账号

1、登录 DDC 官网门户网站,点击去注册,网站地址:https://ddc.bsnbase.com/

2、注册时需提供企业名称、法人姓名、企业营业执照、邮箱及手机号等信息

3、DDC 网络经营人员在 3 个工作日内对注册信息进行审核,审核后果将以邮件形式进行告诉

(二)申请业务开明、线下签订合同

1、注册胜利后,平台方人员登录官网门户,在“业务开明”页面填写备案网站和申请阐明后提交业务开明申请

2、DDC 网络经营人员在 3 个工作日内分割平台方沟通业务开明相干事宜

3、平台方的业务开明申请经 BSN 联盟审核通过后,DDC 网络经营人员分割平台方签订线下协定

留神: 所填写的网站备案信息必须与所提交的注册企业名称统一。此处所说的备案网站不肯定是 DDC 业务的平台,任何注册企业名下的备案网站均可。

(三)注册 DID 并下载业务凭证

1、在线下签约实现后,平台方人员依据 DID SDK 生成 DID 标识 (did) 和 DID 签名值(didSign)

1)测试用例

@Test
public void generateDidtest() {DidClient didClient = this.getDidClient();
    DidDataWrapper didDataWrapper = didClient.createDid();
    System.out.println(JSONObject.toJSONString(didDataWrapper));
    assertNotNull(didDataWrapper);
    assertNotNull(didDataWrapper.getDid());
    assertNotNull(didDataWrapper.getDocument());
    assertNotNull(didDataWrapper.getAuthKeyInfo());
    assertNotNull(didDataWrapper.getRecyKeyInfo());
}

2)输入后果

{
    "address":"0x6b48f123fe493a144df5cfc24e74d8639622d452",
    "authKeyInfo":{
        "privateKey":"73352081742544535007412511358750380682016965583404841637572340950252082648181",
        "publicKey":"9784207274559734436040166487546186979629799048299924533536969953181115829508641603663755398772837199880448005621139241901177149041470382540707320562016661",
        "type":"Secp256k1"
    },
    "did":"did:bsn:4Qc1ZMwJ2kCDEiZaoW86gbCDopY8",
    "didSign":"P6yJGMe9O3HQZ/yXlUdsp/fAZAtqUwI1JbjJG9Xik5MVdWseWay6IaRYj2A27+wGuOeLYBbUO5aNfS+9zI1nTgA=",
    "document":{
        "authentication":{
            "publicKey":"9784207274559734436040166487546186979629799048299924533536969953181115829508641603663755398772837199880448005621139241901177149041470382540707320562016661",
            "type":"Secp256k1"
        },
        "created":"2022-09-08 10:39:52",
        "did":"did:bsn:4Qc1ZMwJ2kCDEiZaoW86gbCDopY8",
        "proof":{
            "creator":"did:bsn:4Qc1ZMwJ2kCDEiZaoW86gbCDopY8",
            "signatureValue":"qGSQGQ3LsZWzwKPjXSFpc6QNEyX3hLk4jruhKNMRB1pCh7AujHS0R8TN2HYzdan7HigqMD2RBQW8I0g50xQDZgA=",
            "type":"Secp256k1"
        },
        "recovery":{
            "publicKey":"11269225430181361242836691470083240698588912504999066036334383939658125900799001159485142543525883167181641171521691885487531759310220878775219494602416230",
            "type":"Secp256k1"
        },
        "updated":"2022-09-08 10:39:52",
        "version":"1"
    },
    "recyKeyInfo":{
        "privateKey":"108084336084494583976203572769842945795131580451324537320160683149905374350774",
        "publicKey":"11269225430181361242836691470083240698588912504999066036334383939658125900799001159485142543525883167181641171521691885487531759310220878775219494602416230",
        "type":"Secp256k1"
    }
}

留神: 平台方仅需注册一次 DID,所以倡议平台方独自应用 DID SDK,无需将其集成到业务零碎内。

2、平台方人员需在官网门户提交平台方的 BSN DID 和 DID 私钥对 DID 的签名值,并下载 DDC 业务凭证

(四)资金账户充值、创立我的项目

1、平台方能够在官网门户内通过微信领取、企业网银或者线下汇款的形式为本人的资金账户充值

留神: 门户资金账户充值后,平台方可通过官网门户或门户 OpenAPI,将资金账户余额充值到本人的任何 DDC 凋谢联盟链上的任何链账户内,以保障这些链账户在相应的链上发动的区块链交易能失常执行。

2、在创立我的项目页面中输出【项目名称】,【凋谢链框架】下拉中抉择【中移链】即可实现创立

留神: 我的项目创立实现后不容许批改凋谢链框架,参考链接:https://bsnbase.com/static/tm…

四、门户 OpenAPI 的接口调用

(一)在线生成链账户公私钥对

1、接口地址: /ddcoai/sys/v1/opb/account/create/publicprivatekey

2、申请形式: POST

3、接口形容

    平台方可通过 OpenAPI 对所属 DDC 链账户进行在线生成公私钥对,哪些框架反对可通过 '凋谢联盟链框架 - 列表查问' 接口返回值中 opcOnlineCreate 为 0 示意。

4、申请头

    apitoken:eyJ0eXAiOi**********************************************UG9VHWZFBg

5、申请参数

参数名称 参数阐明 是否必须 数据类型
opbChainId 凋谢联盟链框架 integer

6、响应参数

参数名称 参数阐明 类型
code 胜利:0,失败:-1 integer
errorLogCode 谬误日志编码 string
errorLogMessage 谬误日志阐明 string
message 音讯编码 string
data 后果对象 object
portalToken 凭此 token 能够访问共享接口,返回空则示意无奈应用 string

7、Java 申请示例

1)测试用例

private String baseUrl = "https://openapi-ddc.bsnbase.com";
private String apiToken = "eyJ0eXAiOi**********************************************UG9VHWZFBg";

@Test
public void testCreateKeyPair() {
    String url = baseUrl + "/ddcoai/sys/v1/opb/account/create/publicprivatekey";
    CreateKeyPair request = CreateKeyPair.builder()
            .opbChainId(9)
            .build();
    String result = HttpRequest.post(url)
            .header("apitoken", apiToken)
            .body(JSONUtil.toJsonStr(request))
            .execute().body();
    System.out.println(result);
}

2)响应后果

{
    "code":0,
    "errorLogCode":null,
    "errorLogMessage":"","message":"MSG_00000","data":"Public key:\nEOS83Vsg9nooWLoEJNvAtAmr8en5UQMdoU7ztdrjxiL4UGytFUQnB\n\nPrivate key:\n5KbkeSYfXgBWYQsv1NoQsp1nRcYBpGe5BnvucmJcUAR1E4ALYV6\n\nChain account address:\n\n\nMnemonic:\n[calm, cram, relief, inside, pistol, blood, merit, monitor, parade, aspect, network, buffalo]\n\nAlgorithm:\nsecp256k1","portalToken":null
}

(二)创立链账户

1、接口地址: /ddcoai/sys/v1/opb/account/create/save

2、申请形式: POST

3、接口形容

    生成链账户后,平台方通过官网门户 OpenAPI 登记注册链账户。只有接入官网 DDC 合约的链账户能力启用 BSN-DDC 业务性能。新建时能够不接入官网 DDC 合约,可调“接入官网 DDC 合约”接口接入。

4、申请头

    apitoken:eyJ0eXAiOi**********************************************UG9VHWZFBg

5、申请参数

参数名称 参数阐明 是否必须 数据类型
opbChainClientName 链账户名称 string
opbChainClientType 用户类型(1= 平台方 2= 平台方的用户) integer
opbChainId 凋谢联盟链框架 ID(调用接口:凋谢联盟链 - 框架列表查问) integer
opbKeyType 链账户类型(调用接口:凋谢联盟链 - 框架反对的链账户类型) integer
opbPublicKey 上传公钥(依据链账户类型为 2,值必填) string
openDdc 是否接入官网 DDC 合约 1= 不接入 5= 接入 integer
proof DDC 业务开明凭证 内容须要通过 json 本义 string

6、响应参数

参数名称 参数阐明 类型
code 胜利:0,失败:-1 integer
errorLogCode 谬误日志编码 string
errorLogMessage 谬误日志阐明 string
message 音讯编码 string
data 后果对象 object
 opbChainClientAddress 链账户地址 string
portalToken 凭此 token 能够访问共享接口,返回空则示意无奈应用 string

7、Java 申请示例

1)测试用例

private String baseUrl = "https://openapi-ddc.bsnbase.com";
private String apiToken = "eyJ0eXAiOi**********************************************UG9VHWZFBg";
private String proof = "{\"claim\":{\"entName\":\"******\",\"domain\":\"http://www.chinamobilesz.com/\",\"loginName\":\"******\",\"did\":\"******\"},\"context\":\"https://www.w3.org/2018/credentials/v1\",\"cptId\":\"882201251518080013\",\"created\":\"2022-08-19 03:14:15\",\"expirationDate\":\"2042-08-19\",\"id\":\"1560465138044243968\",\"issuerDid\":\"******\",\"proof\":{\"creator\":\"******\",\"type\":\"Secp256k1\",\"signatureValue\":\"******\"},\"shortDesc\":\"DDC 业务凭证模板 \",\"type\":\"Proof\",\"userDid\":\"******\"}";

@Test
public void testSaveAccount() {
    String url = baseUrl + "/ddcoai/sys/v1/opb/account/create/save";
    SaveAccount request = SaveAccount.builder()
            .opbChainClientName("ddctest11112")
            .opbChainClientType(1)
            .opbChainId(9)
            .opbKeyType(2)
            .opbPublicKey("EOS6R3jYqb3uZsVgzJz4HVLcYV94CLkr3u9unEzm5rpuAqUos7fqK")
            .openDdc("1")
            .proof(proof)
            .build();
    String result = HttpRequest.post(url)
            .header("apitoken", apiToken)
            .body(JSONUtil.toJsonStr(request))
            .execute().body();
    System.out.println(result);
}

2)响应后果

{
    "code":0,
    "errorLogCode":null,
    "errorLogMessage":"","message":"MSG_00000","data":{"opbChainClientAddress":"ddctest11112"},"portalToken":null
}

(三)接入官网 DDC 合约

1、接口地址: /ddcoai/sys/v1/opb/account/access/official/save

2、申请形式: POST

3、接口形容

基于已有的链账户地址接入官网 DDC 合约。

4、申请头

    apitoken:eyJ0eXAiOi**********************************************UG9VHWZFBg

5、申请参数

参数名称 参数阐明 是否必须 数据类型
opbChainClientAddress 链账户地址 string
opbChainClientType 用户类型(1= 平台方 2= 平台方的用户) integer
opbChainId 凋谢联盟链框架 ID(调用接口:凋谢联盟链 - 框架列表查问) integer
proof DDC 业务开明凭证 内容须要通过 json 本义 string

6、响应参数

参数名称 参数阐明 类型
code 胜利:0,失败:-1 integer
errorLogCode 谬误日志编码 string
errorLogMessage 谬误日志阐明 string
message 音讯编码 string
data 后果对象 object
 opbChainClientAddress 链账户地址 string
portalToken 凭此 token 能够访问共享接口,返回空则示意无奈应用 string

7、Java 申请示例

1)测试用例

private String baseUrl = "https://openapi-ddc.bsnbase.com";
private String apiToken = "eyJ0eXAiOi**********************************************UG9VHWZFBg";
private String proof = "{\"claim\":{\"entName\":\"******\",\"domain\":\"http://www.chinamobilesz.com/\",\"loginName\":\"******\",\"did\":\"******\"},\"context\":\"https://www.w3.org/2018/credentials/v1\",\"cptId\":\"882201251518080013\",\"created\":\"2022-08-19 03:14:15\",\"expirationDate\":\"2042-08-19\",\"id\":\"1560465138044243968\",\"issuerDid\":\"******\",\"proof\":{\"creator\":\"******\",\"type\":\"Secp256k1\",\"signatureValue\":\"******\"},\"shortDesc\":\"DDC 业务凭证模板 \",\"type\":\"Proof\",\"userDid\":\"******\"}";

@Test
public void testSaveOfficial() {
    String url = baseUrl + "/ddcoai/sys/v1/opb/account/access/official/save";
    SaveOfficial request = SaveOfficial.builder()
            .opbChainClientAddress("ddctest11112")
            .opbChainClientType(1)
            .opbChainId(9)
            .proof(proof)
            .build();
    String result = HttpRequest.post(url)
            .header("apitoken", apiToken)
            .body(JSONUtil.toJsonStr(request))
            .execute().body();
    System.out.println(result);
}

2)响应后果

{
    "code":0,
    "errorLogCode":null,
    "errorLogMessage":"","message":"MSG_00000","data":{"opbChainClientAddress":"ddctest11112"},"portalToken":null
}

(四)查看链账户详情

1、接口地址: /ddcoai/sys/v1/opb/account/check/details/search

2、申请形式: POST

3、接口形容

查看 DDC 链账户的根本信息。

4、申请头

    apitoken:eyJ0eXAiOi**********************************************UG9VHWZFBg

5、申请参数

参数名称 参数阐明 是否必须 数据类型
opbChainClientAddress DDC 链账户地址 string
opbChainId 凋谢联盟链框架 ID integer

6、响应参数

参数名称 参数阐明 类型
code 胜利:0,失败:-1 integer
errorLogCode 谬误日志编码 string
errorLogMessage 谬误日志阐明 string
message 音讯编码 string
data 后果对象 object
 business 官网 DDC 业务费余额(分) integer
 createDate 创立工夫 string
 did DID string
 gasNum 能量值余额(最大 50 长度 8 个小数点) string
 opbChainClientAddress 链账户地址 string
 opbChainClientName 链账户名称 string
 opbChainClientType 用户类型(1= 平台方,2= 平台方的用户) integer
 opbChainName 凋谢联盟链框架 string
 opbChainType 链账户类型 string
 openDdcYn 是否已接入官网 DDC 合约:1= 未接入(只开明 OPB 没有上 DDC 合约)5= 已接入 integer
 opsPlatformState 经营方设置状态(0= 未接入官网 DDC 合约 1= 解冻 2= 已启用(未解冻) 3= 解冻中 4= 冻结中) integer
 platformSetState 平台方设置状态(0= 未接入官网 DDC 合约 1= 解冻 2= 已启用(未解冻) 3= 解冻中 4= 冻结中) integer
portalToken 凭此 token 能够访问共享接口,返回空则示意无奈应用 string

7、Java 申请示例

1)测试用例

private String baseUrl = "https://openapi-ddc.bsnbase.com";
private String apiToken = "eyJ0eXAiOi**********************************************UG9VHWZFBg";

@Test
public void testQueryAccount() {
    String url = baseUrl + "/ddcoai/sys/v1/opb/account/check/details/search";
    SearchAccount request = SearchAccount.builder()
            .opbChainClientAddress("ddctest11112")
            .opbChainId(9)
            .build();
    String result = HttpRequest.post(url)
            .header("apitoken", apiToken)
            .body(JSONUtil.toJsonStr(request))
            .execute().body();
    System.out.println(result);
}

2)响应后果

{
    "code":0,
    "errorLogCode":null,
    "errorLogMessage":"","message":"MSG_00000","data":{"did":"did:bsn:49oahBPHZ41zqCbzUPkqRMdqBGvb","opbChainClientName":"ddctest11112","opbChainClientType":1,"business":100,"createDate":"2022-09-05 17:11:22","opbChainName":" 中移链(基于 EOS v2.1)","opbChainClientAddress":"ddctest11112","opbChainType":"2","openDdcYn":5,"gasNum":"NET:1808172 bytes,CPU:688319 us,RAM:10247 bytes","platformSetState":2,"opsPlatformState":2},
    "portalToken":null
}

(五)EOS 分配资源

1、接口地址: /ddcoai/sys/v1/opb/eos/resource/save

2、申请形式: POST

3、接口形容

    平台方可通过 OpenAPI 对所属 DDC 链账户进行分配资源。链账户分配资源所需总金额可通过 EOS 分配资源价格计算接口进行预览。

4、申请头

    apitoken:eyJ0eXAiOi**********************************************UG9VHWZFBg

5、申请参数

参数名称 参数阐明 是否必须 数据类型
cpuValue 充值 cpu 数量(SYS) integer
netValue 充值 net 数量(SYS) integer
opbChainClientAddress 链账户地址 string
opbChainId 凋谢联盟链框架 integer
proof DDC 业务开明凭证 内容须要通过 json 本义 string
ramValue 充值 ram 数量(KB) integer
reqTransactionSn 第三方流水号 string
validDate 资源有效期(30 天起售)(格局:yyyy-MM-dd) string(date-time)

6、响应参数

参数名称 参数阐明 类型
code 胜利:0,失败:-1 integer
errorLogCode 谬误日志编码 string
errorLogMessage 谬误日志阐明 string
message 音讯编码 string
data 后果对象 object
portalToken 凭此 token 能够访问共享接口,返回空则示意无奈应用 string

7、Java 申请示例

1)测试用例

private String baseUrl = "https://openapi-ddc.bsnbase.com";
private String apiToken = "eyJ0eXAiOi**********************************************UG9VHWZFBg";
private String proof = "{\"claim\":{\"entName\":\"******\",\"domain\":\"http://www.chinamobilesz.com/\",\"loginName\":\"******\",\"did\":\"******\"},\"context\":\"https://www.w3.org/2018/credentials/v1\",\"cptId\":\"882201251518080013\",\"created\":\"2022-08-19 03:14:15\",\"expirationDate\":\"2042-08-19\",\"id\":\"1560465138044243968\",\"issuerDid\":\"******\",\"proof\":{\"creator\":\"******\",\"type\":\"Secp256k1\",\"signatureValue\":\"******\"},\"shortDesc\":\"DDC 业务凭证模板 \",\"type\":\"Proof\",\"userDid\":\"******\"}";

@Test
public void testSaveResource() {
    String url = baseUrl + "/ddcoai/sys/v1/opb/eos/resource/save";
    SaveResource request = SaveResource.builder()
            .cpuValue(1)
            .netValue(1)
            .opbChainClientAddress("ddctest11112")
            .opbChainId(9)
            .proof(proof)
            .ramValue(10)
            .reqTransactionSn("8950jg89j0fi94i")
            .validDate("2022-10-06")
            .build();
    String result = HttpRequest.post(url)
            .header("apitoken", apiToken)
            .body(JSONUtil.toJsonStr(request))
            .execute().body();
    System.out.println(result);
}

2)响应后果

{
    "code": 0,
    "errorLogCode": null,
    "errorLogMessage": "","message":"MSG_00000","data": null,"portalToken": null
}

(六)EOS 分配资源后果查问

1、接口地址: /ddcoai/sys/v1/opb/eos/resource/search

2、申请形式: POST

3、接口形容

    平台方可通过 OpenAPI 对所属 DDC 链账户的 EOS 分配资源后果进行查问。

4、申请头

    apitoken:eyJ0eXAiOi**********************************************UG9VHWZFBg

5、申请参数

参数名称 参数阐明 是否必须 数据类型
opbChainClientAddress 链账户地址 string
reqTransactionSn 第三方流水号 string

6、响应参数

参数名称 参数阐明 类型
code 胜利:0,失败:-1 integer
errorLogCode 谬误日志编码 string
errorLogMessage 谬误日志阐明 string
message 音讯编码 string
data 后果对象 object
 opbChainClientAddress 链账户地址 string
 rechargeState GAS 充值状态 1- 充值中 5- 充值失败 10= 充值胜利 integer
 reqTransactionSn 第三方流水号 string
portalToken 凭此 token 能够访问共享接口,返回空则示意无奈应用 string

7、Java 申请示例

1)测试用例

private String baseUrl = "https://openapi-ddc.bsnbase.com";
private String apiToken = "eyJ0eXAiOi**********************************************UG9VHWZFBg";

@Test
public void testQueryResource() {
    String url = baseUrl + "/ddcoai/sys/v1/opb/eos/resource/search";
    SearchResource request = SearchResource.builder()
            .opbChainClientAddress("ddctest11111")
            .reqTransactionSn("8950jg89j0fi94i")
            .build();
    String result = HttpRequest.post(url)
            .header("apitoken", apiToken)
            .body(JSONUtil.toJsonStr(request))
            .execute().body();
    System.out.println(result);
}

2)响应后果

{
    "code":0,
    "errorLogCode":null,
    "errorLogMessage":"","message":"MSG_00000","data":{"opbChainClientAddress":"ddctest11111","reqTransactionSn":"8950jg89j0fi94i","rechargeState":10},
    "portalToken":null
}

(七)官网 DDC 业务费充值

1、接口地址: /ddcoai/sys/v1/opb/account/business/save

2、申请形式: POST

3、接口形容

    如果应用官网合约发动 DDC 交易则须要官网 DDC 业务费,因而可通过 OpenAPI 给平台方所属 DDC 链账户进行充值。

4、申请头

    apitoken:eyJ0eXAiOi**********************************************UG9VHWZFBg

5、申请参数

参数名称 参数阐明 是否必须 数据类型
businessMoney 充值官网 DDC 业务费金额(单位:分) integer
opbChainClientAddress 链账户地址 string
opbChainId 凋谢联盟链框架 integer
proof DDC 业务开明凭证 内容须要通过 json 本义 string
reqTransactionSn 第三方流水号(数字字母下划线组成) string

6、响应参数

参数名称 参数阐明 类型
code 胜利:0,失败:-1 integer
errorLogCode 谬误日志编码 string
errorLogMessage 谬误日志阐明 string
message 音讯编码 string
data 后果对象 object
portalToken 凭此 token 能够访问共享接口,返回空则示意无奈应用 string

7、Java 申请示例

1)测试用例

private String baseUrl = "https://openapi-ddc.bsnbase.com";
private String apiToken = "eyJ0eXAiOi**********************************************UG9VHWZFBg";
private String proof = "{\"claim\":{\"entName\":\"******\",\"domain\":\"http://www.chinamobilesz.com/\",\"loginName\":\"******\",\"did\":\"******\"},\"context\":\"https://www.w3.org/2018/credentials/v1\",\"cptId\":\"882201251518080013\",\"created\":\"2022-08-19 03:14:15\",\"expirationDate\":\"2042-08-19\",\"id\":\"1560465138044243968\",\"issuerDid\":\"******\",\"proof\":{\"creator\":\"******\",\"type\":\"Secp256k1\",\"signatureValue\":\"******\"},\"shortDesc\":\"DDC 业务凭证模板 \",\"type\":\"Proof\",\"userDid\":\"******\"}";

@Test
public void testSaveBusiness() {
    String url = baseUrl + "/ddcoai/sys/v1/opb/account/business/save";
    SaveBusiness request = SaveBusiness.builder()
            .businessMoney(100)
            .opbChainClientAddress("ddctest11112")
            .opbChainId(9)
            .proof(proof)
            .reqTransactionSn("8950jg89j0fi901")
            .build();
    String result = HttpRequest.post(url)
            .header("apitoken", apiToken)
            .body(JSONUtil.toJsonStr(request))
            .execute().body();
    System.out.println(result);
}

2)响应后果

{
    "code": 0,
    "errorLogCode": null,
    "errorLogMessage": "","message":"MSG_00000","data": null,"portalToken": null
}

(八)官网 DDC 业务费充值后果查问

1、接口地址: /ddcoai/sys/v1/opb/account/business/result/search

2、申请形式: POST

3、接口形容

    平台方可通过 OpenAPI 对所属 DDC 链账户的官网 DDC 业务费充值后果进行查问。

4、申请头

    apitoken:eyJ0eXAiOi**********************************************UG9VHWZFBg

5、申请参数

参数名称 参数阐明 是否必须 数据类型
opbChainClientAddress 链账户地址 string
reqTransactionSn 第三方流水号(数字字母下划线组成) string

6、响应参数

参数名称 参数阐明 类型
code 胜利:0,失败:-1 integer
errorLogCode 谬误日志编码 string
errorLogMessage 谬误日志阐明 string
message 音讯编码 string
data 后果对象 object
 opbChainClientAddress 链账户地址 string
 rechargeState 官网 DDC 业务费充值状态 1- 充值中 5- 充 值失败 10= 充值胜利 integer
 reqTransactionSn 第三方流水号 string
portalToken 凭此 token 能够访问共享接口,返回空则示意无奈应用 string

7、Java 申请示例

1)测试用例

private String baseUrl = "https://openapi-ddc.bsnbase.com";
private String apiToken = "eyJ0eXAiOi**********************************************UG9VHWZFBg";

@Test
public void testQueryBusiness() {
    String url = baseUrl + "/ddcoai/sys/v1/opb/account/business/result/search";
    SearchBusiness request = SearchBusiness.builder()
            .opbChainClientAddress("ddctest11112")
            .reqTransactionSn("8950jg89j0fi901")
            .build();
    String result = HttpRequest.post(url)
            .header("apitoken", apiToken)
            .body(JSONUtil.toJsonStr(request))
            .execute().body();
    System.out.println(result);
}

2)响应后果

{
    "code":0,
    "errorLogCode":null,
    "errorLogMessage":"","message":"MSG_00000","data":{"opbChainClientAddress":"ddctest11112","reqTransactionSn":"8950jg89j0fi901","rechargeState":10},
    "portalToken":null
}

五、常见问题

(一)申请 OpenAPI 接口时,返回谬误编码:MSG_20010005、MSG_10021005、MSG_10021029、MSG_10022013、MSG_10027007、MSG_10021059 等,如何解决?

MSG_20010005:apitoken 受权认证失败,起因是申请头中的 apitoken 传参谬误,能够从业务开明信息页面的门户 OpenAPI Token 获取;
MSG_10021005:链账户不存在,起因是该链账户没有创立,或者该链账户没有接入官网 DDC 合约;
MSG_10021029:充值流水号反复,起因是第三方流水号反复了,须要放弃第三方流水号全局惟一,同时须要留存以供查问应用;
MSG_10022013:找不到平台方 DID,起因是暂未注册 DID 标识,或者 DID 标识还在注册中,须要注册胜利后申请;
MSG_10027007:购买的资源有效期必须大于 30 天,起因是资源有效期设置必须大于 30 天,暂不反对小于 30 天的资源有效期;
MSG_10021059:链账户名称格局谬误,起因是中移链的链账户格局要求:12 个字符,只能包含【12345 和 26 个小写字母】。

(二)对于链账户创立,链账户的名称是否可反复、可批改,以及平台方账户和终端用户账户有什么区别?

目前是同一个账户下链账户名称不能够反复,不能够批改;平台方账户能够治理终端账户的状态,能够在 DDC-SDK 里对终端用户进行充值。

(三)对于 DDC 业务费充值,为什么用 OpenAPI 进行 DDC 业务费充值后,BSN-DDC 门户网站仍显示为 0?

门户的业务费、能量值、DDC 的显示都不是实时的,是链上同步至链下,链下定时排队去更新的,倡议用户应用 OpenAPI 操作创立链账户,接入官网 DDC,业务费充值,账户状态变更后都间接调用 DDC-SDK 中的办法去链上确认后果。

(四)对于 DDC 生成,应用官网 DDC 合约生成 DDC 都须要领取哪些费用?

应用官网 DDC 合约生成 DDC 时,sender 账户要领取本次交易所须要耗费的能量值(5 分钱左右)和 DDC 业务费(生成 1 元,转移、销毁 3 毛)。

(五)对于 DDC 生成,应用官网 DDC-SDK 进行 mint 操作时 ddcURI 字段该如何传参?

ddcURI 字段为 DDC 标识符,该字段为 String 类型,长度限度是 1000,内容 BSN 不做限度,用户可依据本人的业务场景自行传值,例如:{“amount”:5000,”id”:”001″,”name”:”name”,”company”:” 公司 ”,”seq”:1710,”url”:”https://xxxx/upload/file/xx.jpg”}。

(六)对于 DDC 受权和账户受权,两者的区别是什么?

DDC 受权是用户将名下的某个 DDC 受权给第三方,账户受权是用户将名下的所有 DDC 受权给第三方,DDC 受权在 DDC 被转移后受权生效,账户受权勾销受权后才会生效。

退出移动版