华为云用户手册

  • 概述 目前 区块链 智能合约编写门槛高,开发人员需要掌握区块链基础知识以及对底层区块链支持的合约语言有所了解,同时编写出高效和安全的智能合同需要拥有丰富的经验;并且在处理业务合约时,操作人员需实时监控链上交易以获取业务流程进展,增加了业务管理流程和编程人员的开发工作量。 本功能旨在提升区块链的易用性,消除开发人员对区块链知识和智能合约编程的依赖,同时创新性地以业务为维度提供流程管理功能,让区块链操作人员更多地关注于业务本身,提供简单便捷、安全可靠的区块链业务开发和流程管理功能。 图1 系统逻辑 若需要使用该功能,请联系技术支持工程师。 父主题: 区块链应用低代码开发功能
  • 实现流程 各个角色可通过企业身份注册(带有service)和注册DID生成完全由自己控制的分布式身份,并将身份文档发布到区块链上完成身份的注册。企业用户的DID身份中可以包含其所能提供的服务信息,以支持多样的应用场景。 主要有三种角色:签发者、持有者和验证者,其中每个角色都可以是设备、应用、个人或者组织。 具备基础的身份标识之后,通过可验证凭证架设起身份与身份之间的认证体系。凭证的模板会由相关主体注册发布到区块链上,并持续维护。持有者便可以向签发者发起认证申请,获得凭证后出示给验证者完成校验。 验证者可以通过接口验证持有者出示的“可验证凭证”,确保其是否有权限和资质开展后续业务。
  • 业务流程管理 常见的区块链业务开发管理需要操作人员监控链上交易数据来掌握该笔业务的流程走向,即使使用区块链浏览器也需操作人员对浏览器中的数据进行筛选过滤,无疑增加了操作人员的工作量以及需要操作人员无一遗漏的筛选出正确交易才能开展下一步业务流程。 BCS 提供以业务为维度的管理流程,操作人员通过界面更加直观地查看该笔业务的当前进展和历史交易数据。并且针对用户管理,提供了以角色和群组的细粒度访问授权(Hyperledger Fabric增强版目前不支持细粒度,功能正在开发中),不同角色或群组的用户授予不同的权限,例如仓库管理员仅可处理货物的发放、货物收件人员仅可确认货物的签收。该功能使用户更多的精力放在处理业务,丰富了区块链上层业务和人员管理,极大地增加了区块链的易用性。 用户权限管理 智能合约的发起者作为该合约的管理员,可通过用户管理页面User Management进行用户权限管理。首先根据实际业务设置角色,例如买家、卖家和仓库管理员等角色。然后设置群组,每个群组可包含多个或单个角色。最后添加用户,管理员为其设置用户名和登录密码,并选择对应的群组。 业务监控 用户可通过用户名和密码登录到业务监控页面,查看当前业务流程和业务历史交易数据,通过图形化呈现业务进展和下一步流程走向。并且通过状态标识,可直观的查看当前业务是否完成。 业务处理 业务处理包括接口调用业务处理、自动业务处理和人工处理三种业务处理方式。接口调用业务处理指用户通过调用合约SDK发起交易进行业务处理;自动业务处理指根据业务逻辑判断,满足一定要求后自动发起交易进行业务处理;人工处理指根据用户角色,不同用户拥有特定的权限执行相应的人工处理业务,以角色为维度进行细粒度访问授权(Hyperledger Fabric增强版目前不支持细粒度,功能正在开发中)。 父主题: 区块链应用低代码开发功能
  • 功能介绍 可信数据交换基于分布式身份实现,参与数据交换的用户需要注册分布式身份,详细方法请参见分布式身份(公测)。 可信数据涉及两个主要数据结构:数据集和数据订单。数据集包括数据描述信息、访问控制信息(属性加密中的策略)等。数据订单包括数据申请、审核信息等。 可信数据交换支持三种模式:申请-授权、主动分享和细粒度访问控制。详细请参见模式介绍。 可信交换中的 数据加密 后支持多种存储服务,用户可以根据业务需要自己选择。调用者负责将密文数据存储到公开可访问的存储设备中。
  • 请求示例 { "orgID" : "4f1439758ebb41f7411b5f684b67713c08b89198", "channelID" : "mychannel", "cryptoMethod" : "SW", "cert" : "-----BEGIN CERTIFICATE-----\n...\n...\n-----END CERTIFICATE-----", "sk" : "------BEGIN PRIVATE KEY-----\n...\n...\n-----END PRIVATE KEY-----", "timestamp" : "2020-10-27T17:28:16+08:00", "did" : "did:example:ebfeb1f712ebc6f1c276e12ec21", "service" : [ { "type" : "VerifiableCredentialService", "serviceEndpoint" : "https://example.com/vc/", "credentialApplySchema" : { "type" : "file", "name" : "Test Enterprise Certification", "description" : "this is test apply info", "attributes" : [ { "name" : "bob", "type" : "string", "description" : "Attribute's description" } ] } } ]}
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 用户证书,每行末尾均需要增加显式换行符\n sk 是 String 用户私钥,每行末尾均需要增加显式换行符\n timestamp 是 String 时间戳 did 是 String 分布式身份标识 service 否 Array of DIDService objects 服务列表 表2 DIDService 参数 是否必选 参数类型 描述 type 是 String 类型 serviceEndpoint 是 String 接入点 credentialApplySchema 否 CredentialApplySchema object 申请凭证所需数据的Schema 表3 CredentialApplySchema 参数 是否必选 参数类型 描述 type 否 String 类型 name 否 String 名称 description 否 String 描述信息 attributes 否 Array of Attribute objects 属性列表 表4 Attribute 参数 是否必选 参数类型 描述 name 否 String 名称 type 否 String 类型 description 否 String 描述信息
  • 响应参数 状态码: 200 表5 响应Body参数 参数 参数类型 描述 context String context id String 分布式身份标识 publicKey Array of DocPublicKey objects 公钥列表 authentication Array of strings did主公钥标识 recovery String 备用公钥标识,可用于修改主密钥 service Array of Service objects 服务列表 proof Proof object 证明结构,可为空 created String 创建时间 updated String 更新时间 status String 状态 表6 DocPublicKey 参数 参数类型 描述 id String 公钥标识 type String 公钥类型 controller String 公钥的控制者标识 publicKeyPem String 公钥证书 表7 Service 参数 参数类型 描述 id String 服务标识 type String 服务类型 serviceEndpoint String 服务介绍网址 credentialApplySchema CredentialApplySchema object 申请凭证所需数据的Schema 表8 CredentialApplySchema 参数 参数类型 描述 type String 类型 name String 名称 description String 描述信息 attributes Array of Attribute objects 属性列表 表9 Attribute 参数 参数类型 描述 name String 名称 type String 类型 description String 描述信息 表10 Proof 参数 参数类型 描述 creator String 创建者身份标识 type String 签名类型 created String 签名创建时间 signatureValue String 签名值 状态码: 500 表11 响应Body参数 参数 参数类型 描述 errorCode String 错误码 最小长度:8 最大长度:36 errorMsg String 错误描述 最小长度:2 最大长度:512
  • 请求示例 { "orgID" : "4f1439758ebb41f7411b5f684b67713c08b89198", "channelID" : "mychannel", "cryptoMethod" : "SW", "cert" : "-----BEGIN CERTIFICATE-----\n...\n...\n-----END CERTIFICATE-----", "sk" : "------BEGIN PRIVATE KEY-----\n...\n...\n-----END PRIVATE KEY-----", "timestamp" : "2020-10-27T17:28:16+08:00", "vcIndex" : 1, "owner" : "did:example:ebfeb1f712ebc6f1c276e12ec21"}
  • 响应示例 状态码: 200 VCVerifyResponeParams Information { "isOwned" : true} 状态码: 400 失败响应 { "errorCode" : "B CS .4002030", "errorMsg" : "Owner(bol) does not have credential ..."} 状态码: 500 失败响应 { "errorCode" : "BCS.5002014", "errorMsg" : "Internal Server Error"}
  • 响应参数 状态码: 200 表2 响应Body参数 参数 参数类型 描述 isOwned Boolean 是否拥有 状态码: 400 表3 响应Body参数 参数 参数类型 描述 errorCode String 错误码 最小长度:8 最大长度:36 errorMsg String 错误描述 最小长度:2 最大长度:512 状态码: 500 表4 响应Body参数 参数 参数类型 描述 errorCode String 错误码 最小长度:8 最大长度:36 errorMsg String 错误描述 最小长度:2 最大长度:512
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 用户证书,每行末尾均需要增加显式换行符\n sk 是 String 用户私钥,每行末尾均需要增加显式换行符\n timestamp 是 String 时间戳 vcIndex 是 String 凭证索引 owner 是 String 凭证所有者身份标识
  • 运行Client程序 Client程序运行时一般要设定其使用的配置文件路径、通道名称、链代码名称、组织ID等。 配置文件路径即用户下载配置文件的存放路径。 通道名称即BCS实例中的通道名称。 链代码名称即BCS实例中安装链代码时设定的名称。 组织ID,以如下示例配置文件内容为例,组织ID为02f23ab00f6e1ffcde8a27bfd3ac2290edc18127 client:organization: 02f23ab00f6e1ffcde8a27bfd3ac2290edc18127
  • 操作步骤 实例订购及文件下载。 订购BCS实例时,安全机制选择使用“ECDSA”同态加密。完成订购后,下载同态加密库ahex.x.x.tar.gz,客户端开发套件国密SDK包sdkx.x.x.tar.gz,peer与orderer用户证书,配置文件等。 安装客户端SDK库。 将下载的国密SDK包sdkx.x.x.tar.gz解压到用户的$GOPATH目录下。 安装同态加密库。 将下载的ahex.x.x.tar.gz解压到用户的$GOPATH目录下。 安装依赖库(仅针对Fabric1.1)。 依赖的库文件位于同态加密库目录下,当同态加密库被解压到用户的$GOPATH目录后,该文件位于$GOPATH/src/ahe/PSW/deps/lib,请将该目录下的所有文件复制至本地的/usr/local/include/openssl/目录下(如果没有该目录,请自行创建该目录),然后设置环境变量: export LD_LIBRARY_PATH=/usr/local/include/openssl:$LD_LIBRARY_PATH //以项目路径为/usr/local/include/openssl为例,若自行创建目录,请以实际创建目录为准 若提示缺少libgmp,则需要用户安装gmp库。安装方法可以参考linux操作系统包管理工具(例如ubuntu系统可以使用apt-get install libgmp10命令来安装,也可在https://gmplib.org/下载源码进行编译安装)。 开发Client程序与链代码。 请参考AHE Lib库接口和Chaincode库接口进行具体的应用和链代码(智能合约)的开发。 例如App客户端和链代码端的逻辑过程参考如下: App客户端的典型逻辑过程是: 注册用户 注册用户时可以调用密钥生成函数为用户生成公私钥。 初始化余额 初始化余额时可以调用初始余额准备函数生成具有隐私保护的初始余额信息。 发起交易 交易时可以调用交易准备函数生成具有隐私保护的交易数据。 链代码端对应的逻辑过程是: 保存用户公钥与地址的映射关系。 验证初始余额的有效性并生成初始交易。 验证交易数据的有效性并生成交易结果。 链码端可以通过调用初始余额校验函数来验证初始余额的有效性。 调用交易校验函数来验证交易数据的有效性。 安装链代码。 通过管理界面,将开发的链代码安装到用户订购的BCS实例中并实例化。 部署应用。 用户根据业务需求开发app应用,app应用可以调用同态加密库来对交易信息进行隐私保护。开发完成后,将app部署在购买的服务器上。app部署完成后,确保环境中具有配置文件、证书文件(peer和orderer的用户证书)、openssl库。
  • 准备工作 开通CloudIDE(或者用户自己准备JDK、maven和eclipse/IntelliJ IDEA)。 CloudIDE是软件开发生产线 CodeArts的云端开发环境服务,向开发者提供按需配置、快速获取的工作空间(包含编辑器和运行环境)。 在CloudIDE上创建一个空的Java工程,如图1所示。 图1 CloudIDE上创建一个空的Java工程 下载Java SDK示例源码,获取方法:登录区块链服务管理控制台,进入“应用案例”,在“Java示例Demo-Java SDK Demo”下方,单击“App_Gateway_Java_Demo”中Java项目源码的“下载”按钮。 购买区块链实例、安装链代码及实例化链代码操作,请参见《快速入门》。
  • 部署应用 下载SDK和证书。 在“实例管理”页面,选择“Hyperledger Fabric增强版”页签,单击对应实例卡片上的“获取客户端配置”。 勾选“SDK文件”,SDK配置参数如下: 参数名称 说明 链代码名称 chaincodedemo 证书存放路径 /home/user/gatewayjavademo/config 通道名称 channel 组织&Peer节点 选择通道中所有节点组织 勾选“共识节点证书”。 勾选“Peer节点证书”,指定节点组织选择organization,勾选“管理员证书”。 单击“下载”,下载SDK配置文件、demo-orderer组织的管理员证书和organization组织的管理员证书。 复制并解压。 先下载工程源代码gatewayjavademo.zip文件并解压。 获取方法:登录区块链服务管理控制台,进入“应用案例”,在“Java示例Demo-Java SDK Demo”下方,单击“App_Gateway_Java_Demo”中Java项目源码的“下载”按钮。 将1步骤中的zip文件解压,把configs文件夹中的orderer文件夹、peer文件夹、sdk-config.json、sdk-config.yaml文件全部复制到gatewayjavademo目录下的config目录下。然后再将gatewayjavademo目录压缩成gatewayjavademo.zip包。 部署应用。 将新压缩的gatewayjavademo工程源代码gatewayjavademo.zip文件上传到CloudIDE开发环境中。 CloudIDE编译工程如下所示: 打开工程后等待一会,会自动下载工程依赖的包,然后按下图操作执行Run,就会得到预期结果。 gatewayjavademo工程中config目录下demo-channel-sdk-config.yaml文件,必须与gatewayjavademo/src/main/java/handler/Main.java和MainForMultiTask文件中helper.setConfigCtx("config/demo-channel-sdk-config.yaml")代码路径相同,保证可以正常运行Main.java。 客户端app交易的时候,如果指定了未实例化的组织和peer,那么首次交易会超时失败,请您重新运行即可正常交易。 每次成功执行Main.java,将会执行basicTransactionSample、commitListenerSample、contractListenerSample、blockListenerSample四个方法,向区块链存入多对键值对;可以通过区块链浏览器可以查看交易记录。
  • 交易 Usage: appdemo transaction [flags]Flags: -b, --AddrB string B' addr -t, --Tx string Transaction Num -C, --channel string channel id (default "mychannel") -c, --config string configuration file path (default "./config_test.yaml") -I, --idcc string idendity chaincode name (default "IDChaincode") -o, --orgid string organization id (default "org1") -p, --protectpwd string protect pwd -T, --txcc string transaction chaincode name (default "TxChaincode") -u, --userid string user id ./appdemo transaction -u A -p test -b a0760184f7ed24e0d86f5b2df40a973a9e1b5da9a1ae886532ac9cd634b59d59 -t 10//说明:其中-b后的字符串为B的账户地址(B注册成功时回显的地址)。
  • 资源下载 表1 库列表 配套社区Hyperledger Fabric版本 库版本 下载链接 Fabric 1.1.0、Fabric 1.4.0、Fabric 2.2 1.8.5 同态加密库 1.9.2 同态加密库 1.11.5 同态加密库 同态加密链代码下载 IDChaincode.go Chaincode库接口文件下载 api_ahe_cc.tar.gz 须知: 需要选择与本地编译环境相一致版本的包。例如本地使用的go编译器为1.8.5,则下载1.8.5版本的库。 使用同态加密库需要提前安装好国密SDK。 api_ahe_cc.tar.gz包仅用于本地编译。
  • 注意事项 在下载的sdk.yaml文件中查询orderer和peer的域名信息,将EIP+orderer域名和EIP+peer域名补充进“/etc/hosts”文件中。使用Fabric1.1版本时,peer域名中的EIP需要配置为公网IP,使用Fabric1.4版本时,peer域名中的EIP需要配置为私网IP,否则网络不通将会导致交易验证失败。 在“/etc/hosts”文件中增加orderer节点和peer节点的域名映射时,操作方法如下: X.X.X.X orderer-e5ad7831affbe8e6e2e7984b098f92406930a688-0.orderer-e5ad7831affbe8e6e2e7984b098f92406930a688.default.svc.cluster.localX.X.X.X peer-d524b0817aaed85490368776cb88042a149a56b5-0.peer-d524b0817aaed85490368776cb88042a149a56b5.default.svc.cluster.localX.X.X.X peer-d524b0817aaed85490368776cb88042a149a56b5-1.peer-d524b0817aaed85490368776cb88042a149a56b5.default.svc.cluster.local X.X.X.X为示例EIP,请替换为实际EIP。
  • 注册 Usage: appdemo register [flags]Flags: -C, --channel string channel id (default "mychannel") -c, --config string configuration file path (default "./config_test.yaml") -I, --idcc string idendity chaincode name (default "IDChaincode") -i, --initbalance string init initbalance -o, --orgid string organization id (default "org1") -p, --protectpwd string protect pwd -T, --txcc string transaction chaincode name (default "TxChaincode") -u, --userid string user id ./appdemo register -u A -p test -i 100 部分参数不配置时使用的为默认值,见Flags中的描述。如果用户配置的与默认值不同,需要在参数中显示指定。 为用户生成一对同态公私钥 这里假设有个用户表示userid,用于区分用户,新用户注册的时候为这个用户生成一对公私钥,这里demo为每个用户将密钥对写到了本地的${userid}.data文件。 privKeyStr, pubKeyStr, err := pswapi_sdk.GenerateKey(propwd)check(err)fmt.Println("key is nil")userdata.PubKey = pubKeyStruserdata.PriKey = privKeyStr
  • 查询 Usage: appdemo querybalance [flags]Flags: -C, --channel string channel id (default "mychannel") -c, --config string configuration file path (default "./config_test.yaml") -I, --idcc string idendity chaincode name (default "IDChaincode") -o, --orgid string organization id (default "org1") -p, --protectpwd string protect pwd -T, --txcc string transaction chaincode name (default "TxChaincode") -u, --userid string user id./appdemo querybalance -p test -u A 查询代码: 调用sdk提供的InitBalance接口初始化余额。 调用fabirc sdk发送交易。 get balance setup.ChainCodeID = txchaincode transRec := sdk_client.TransRecord{} fmt.Println("query balance") resps, err := sdk_client.Query(setup, "QueryBalance", [][]byte{[]byte(addrA)}) if err != nil { fmt.Println("Fail to query balance :", err.Error()) return err } err = json.Unmarshal(resps[0].ProposalResponse.GetResponse().Payload, &transRec) if err != nil { fmt.Println("unmarshal query result error: ", err.Error()) return err } decrypt balance curbalance, err := pswapi_sdk.Decrypt(transRec.Balance, userdata.PriKey, propwd) if err != nil { fmt.Println("sdk Decrypt error: ", err.Error()) return err } fmt.Println("current balance:" + curbalance.String())
  • 附录 fabric-sdk-client/go依赖的第三方包列表: 序号 包名 1 github.com/Knetic/govaluate 2 github.com/VividCortex/gohistogram 3 github.com/cloudflare/cfssl 4 github.com/go-kit/kit 5 github.com/golang/mock 6 github.com/golang/protobuf 7 github.com/hashicorp/hcl 8 github.com/hyperledger/fabric-config 9 github.com/hyperledger/fabric-lib-go 10 github.com/hyperledger/fabric-protos-go 11 github.com/magiconair/properties 12 github.com/miekg/pkcs11 13 github.com/mitchellh/mapstructure 14 github.com/pelletier/go-toml 15 github.com/pkg/errors 16 github.com/prometheus/client_golang 17 github.com/spf13/afero 18 github.com/spf13/cast 19 github.com/spf13/jwalterweatherman 20 github.com/spf13/pflag 21 github.com/spf13/viper 22 github.com/stretchr/testify 23 github.com/tjfoc/gmsm 24 google.golang.org/grpc 25 gopkg.in/yaml.v2 父主题: 国密加密
  • ValidateTxInfo 接口原型 ValidateTxInfo(txInfo, cipherBalanceA, cipherBalanceB string) (newCipherBalanceA,newCipherBalanceB,newCipherTxA,newCipherTxB string,err error) 功能描述 校验PrepareTxInfo生成的Txinfo中交易证明的有效性。 输入说明 参数名 类型 描述 是否必须 txinfo string 交易证明数据 说明: 交易信息数据包含有交易密文数据和交易证明数据,该信息来源于sdk.PrepareTxInfo返回的txinfo信息。 是 cipherBalanceA string A当前的交易余额(密文) 是 cipherBalanceB string B当前的交易余额(密文) 是 输出说明 参数名 类型 描述 newCipherBalanceA string 交易后待更新的A的余额 newCipherBalanceB string 交易后待更新的B的余额 newCipherTxA string 交易金额(A的同态加密公钥加密) newCipherTxB string 交易金额(B的同态加密公钥加密) err error 错误 注意事项 这里A是转账方,B是收款方。
  • ValidateInitBalance 接口原型 func ValidateInitBalance(BalanceInfo, PubKey string) (InitBalance string, err error) 功能描述 校验sdk.InitBalance生成的balanceinfo中余额证明的有效性。 输入说明 参数名 类型 描述 是否必须 BalanceInfo string 初始余额数据 是 Pubkey string 余额加密的公钥信息 是 输出说明 参数名 类型 描述 是否必须 InitBalance string 初始余额密文 是 err error 错误信息 是 处理说明 验证余额有效后,返回余额的密文。 注意事项 这里用户余额真实性由用户的app逻辑保证,Chaincode端无法验证该用户的真实金额,只能验证该金额是大于0的范围。
  • PrepareTxInfo 接口原型 func PrepareTxInfo(cipherBalanceA string, transNumStr string, pubKeyA, pubKeyB string, privKeyA string,pwd string) (string, error) 功能描述 交易准备。 输入说明 参数名 类型 描述 是否必须 cipherBalanceA string A的当前余额(密文),取链上当前A的余额 是 transNumStr string 转账金额(明文) 是 pubKeyA string A的公钥串 是 pubKeyB string B的公钥串 是 PrivKeyA string A的私钥串 是 pwd string 用于加密保护的字符串 否 输出说明 参数名 类型 描述 Txinfo string 交易准备数据 err error 返回错误 注意事项 无。
  • InitBalance 接口原型 func InitBalance(balanceStr string, pubKey string) (string, error) 功能描述 初始化余额。 输入说明 参数名 类型 描述 是否必须 pubKey string 公钥串 是 balanceStr string 初始余额,只支持大于等于0的正整数,如果数字有小数,需要扩大倍数传入 是 输出说明 参数名 类型 描述 balanceInfo string 交易金额信息 err error 返回错误 注意事项 无。
  • Encypt 接口原型 func Encypt (secretNumStr string, pubKeyStr string) (ciphertext string, err error) 功能描述 同态加密。 输入说明 参数名 类型 描述 是否必须 secretNumStr string 需要加密的数值,只支持大于等于0的正整数,如果数字有小数,需要扩大倍数传入。 是 pubKeyStr String 同态加密的公钥 是 输出说明 参数名 类型 描述 ciphertext string 加密后的数据 err error 返回错误 注意事项 无。
  • Decrypt 接口原型 func Decrypt(ciphertext string, privKeyStr string, pwd string) (plainText *big.Int, err error) 功能描述 同态解密。 输入说明 参数名 类型 描述 是否必须 ciphertext string 需要解密的密文 是 privKeyStr string 同态加密的私钥串(被pwd加密保护 是 pwd string 用于保护私钥的字符串 否 输出说明 参数名 类型 描述 plainText *big.int 解密后的数据 err error 返回错误 注意事项 无。
  • Add 接口原型 func Add(cipher1, cipher2 string) (cipher string, err error) 功能描述 同态加法。 输入说明 参数名 类型 描述 是否必须 cipher1 string 被加密的密文1 是 cipher2 string 被加密的密文2 是 输出说明 参数名 类型 描述 cipher string 相加后的数据 err error 返回错误 注意事项 无。
  • 请求示例 { "orgID" : "4f1439758ebb41f7411b5f684b67713c08b89198", "channelID" : "mychannel", "cryptoMethod" : "SW", "cert" : "-----BEGIN CERTIFICATE-----\n...\n...\n-----END CERTIFICATE-----", "sk" : "------BEGIN PRIVATE KEY-----\n...\n...\n-----END PRIVATE KEY-----", "timestamp" : "2020-10-27T17:28:16+08:00", "orderIndex" : 1, "vcIndex" : 0}
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 orgID 是 String 组织id channelID 是 String 通道id cryptoMethod 是 String 加密方法,目前固定为SW cert 是 String 用户证书,每行末尾均需要增加显式换行符\n sk 是 String 用户私钥,每行末尾均需要增加显式换行符\n timestamp 是 String 时间戳 orderIndex 是 String 订单索引 vcIndex 是 String 凭证索引
共100000条