云商店
云商店
- 云商店介绍
-
接入指南
-
商品接入相关接口
- SaaS类商品接入指南 V2.0(新商品上架)
- SaaS类商品接入指南 V1.0(已下线)
- 联营License类授权码商品接入指南(2.0版本)
- 联营License类商品接入指南(已下线)
- 自动部署接入指南
- 联营License客户端软件对接指南
- 商品交易相关接口
-
商品接入相关接口
- 用户指南
-
商家指南
- 为什么要加入云商店
- 商家入驻
- 商品发布
- 商品交易
- 商家结算
- 店铺运营
- 政策与权益
- 中资出海
-
商家常见问题
- 商家入驻相关问题
- 联营计划相关问题
-
商品发布相关问题
- 如何在云商店发布商品
- 如何发布多SKU定价规格
- 商品发布申请提交后,审核需要多久
- 如何判断发布的商品对应云商店上的哪种商品接入类型
- 云商店商品上架的使用有效期
- 新商品发布时,“商品说明”中能否插入图片
- 为什么在商品发布页面没有发布联营商品按钮
- 如何创建SaaS按需规格和按需套餐包
- 如何补充商品交付模板
- 商品名称发布说明
- 商品logo、商品主图与视频、商品简介、商品说明发布说明
- 联营商品服务支持条款发布说明
- 通用商品服务协议发布说明
- 服务与支持、使用指南发布说明
- 软件著作权证书发布说明
- 通用商品规格发布说明
- 联营商品规格对照报价单填写说明
- 联营服务流发布说明
- 生产接口地址、安全漏洞扫描、关联应用发布说明
- 如何发布SaaS类商品试用规格
- 云商店镜像资产无法选择到已创建私人镜像的原因
- 商品管理相关问题
- 服务监管相关问题
- 结算相关问题
- 协议与规范
- 客户服务商指南
- 平台规范与通知
- 文档下载
- 通用参考
链接复制成功!
Agents后端应用接口规则和计费说明
Agents后端应用接口的基本要求
协议类型:http、https
接口类型:get、post
响应类型:同步、流式
返回类型:json、stream
鉴权方式:AK/SK认证(推荐)、自主认证
返回必须要携带tokens使用量usage对象,放在一级结构
响应示例:
{ "data": "南京,全名南京市,是江苏省的省会,位于中国南部的长江中游,是长江三大口的一个,也是中国古代文化的发祥地。", //可替换成自己的任意对象结构 "usage": { //usage的对象结构必须一样 "completion_tokens": 217, //大模型输出的token数量 "prompt_tokens": 31, //用户输入的tokens数量 "total_tokens": 248 //总tokens数量 } }
在实际使用中,如选择是按token数的计费因子,依赖请求响应的tokens使用量usage对象来计算本次调用的计费。
接口调用过程介绍
参数说明:
Agents网关会增加三个请求头信息返回给后端接口,可按需接收和使用:
X-Request-Id:uuid(接口请求唯一编号)
X-Customer-Id:domain id(购买客户华为云账号ID)
X-Customer-Name:domain_name(购买客户华为云账号名称)
AK/SK认证方式(推荐)
验签方法:
- 从jwtToken中使用base64解码解析出AK
- 根据AK查询本地储存的SK
- 根据SK使用jwt工具类验签
引入依赖:
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.2.1</version>
</dependency>
示例代码:
public class JWTtokenUtil { //生成token public static String createJwt() { Map<String, Object> signHeaders = new HashMap<>(); signHeaders.put("alg", "HS256"); // 设置签名算法为HS256 signHeaders.put("sign_type", "SIGN"); // 设置签名类型为SIGN Map<String, Object> payload = new HashMap<>(); payload.put("api_key", "d44cd9aa-e48e-be17-27f4-5ef3474797a1"); // 设置API密钥 long timestamp = System.currentTimeMillis(); // 获取当前时间戳 payload.put("timestamp", timestamp); // 将时间戳添加到payload中 // 失效时间5分钟 payload.put("exp", timestamp + 300000); // 设置令牌的过期时间,这里设置为当前时间戳加上300000毫秒(即5分钟 String sk ="f980be69-88e6-4f02-9d09-e47326488df2"; // 秘钥 // 创建JWT,包含header和payload,并使用秘钥进行签名 String jwtToken = JWT.create().withHeader(signHeaders).withPayload(payload).sign(Algorithm.HMAC256(sk)); System.out.println(jwtToken); // 打印生成的JWT return jwtToken; // 返回生成的JWT } //验证Token的有效性 public static boolean checkToken(String token) { //解析出ak String payloadBase64=token.split("\\.")[1]; // 使用"."分割token,获取第二部分 byte[] decodedBytes = DatatypeConverter.parseBase64Binary(payloadBase64); // 将获取到的部分进行Base64解码 String payloadJson = new String(decodedBytes); // 将解码后的字节数组转换为字符串 JSONObject json_test=JSONObject.fromObject(payloadJson); // 将字符串转换为JSON对象 String ak=json_test.get("api_key").toString(); // 从JSON对象中获取"api_key"对应的值 System.out.println(ak); // 打印ak //根据ak查询sk,按照自己的数据规则查询 String sk ="f980be69-88e6-4f02-9d09-e47326488df2"; // 这里直接赋值为一个固定的字符串,实际应用中应根据ak查询获取 //验证Token(验证失败,会引发异常) boolean result=false; // 初始化验证结果为false try { JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(sk)).build(); // 创建JWTVerifier对象,使用HMAC256算法和sk进行构建 DecodedJWT verify = jwtVerifier.verify(token); // 使用JWTVerifier对象验证token result=true; // 验证成功,将结果设为true } catch (Exception e) { System.out.println("捕获到异常:" + e.getMessage());// 验证失败,抛出异常 } return result; // 返回验证结果 } public static void main(String[] args) { String jwtToken = createJwt(); System.out.println(checkToken(jwtToken)); } }
自主认证推荐方式
如果选择自主认证方式,则不需要填写AK/SK,建议将自己的认证密钥配置到请求头的常量参数中(网关会加密保存),网关将不再进行加签行为直接转发。
自主认证方式因为没有加签行为,可能会有一定的安全风险,安全认证方式agents应用接口提供方自主负责。
父主题: 发布Agents网关类商品