讯飞星火API websocket接口鉴权

登录讯飞开放平台,获取app id、api secret、api key

运行下面的python代码,替换你的api参数,将得到的websocket链接填入

APPID = '你的app id'
APISecret = '你的api secret'
APIKey = '你的api key'

from datetime import datetime
from time import mktime
from wsgiref.handlers import format_date_time

cur_time = datetime.now()
date = format_date_time(mktime(cur_time.timetuple()))

tmp = "host: " + "spark-api.xf-yun.com" + "\n"
tmp += "date: " + date + "\n"
tmp += "GET " + "/v3.1/chat" + " HTTP/1.1"

import hmac
import hashlib

tmp_sha = hmac.new(APISecret.encode('utf-8'), tmp.encode('utf-8'),digestmod=hashlib.sha256).digest()

import base64
signature = base64.b64encode(tmp_sha).decode(encoding='utf-8')

authorization_origin = f'api_key="{APIKey}", algorithm="hmac-sha256", headers="host date request-line", signature="{signature}"'

authorization = base64.b64encode(authorization_origin.encode('utf-8')).decode(encoding='utf-8')

from urllib.parse import urlencode

v = {
		"authorization": authorization, # 上方鉴权生成的authorization
        "date": date,  # 步骤1生成的date
    	"host": "spark-api.xf-yun.com" # 请求的主机名,根据具体接口替换
}
url = "wss://spark-api.xf-yun.com/v3.1/chat?" + urlencode(v)

print(url)

讯飞web API官方使用指南
讯飞接口鉴权验证指南

<think>好的,我现在需要帮助用户在Unity中配置讯飞WebSocketURL。首先,我应该回忆一下讯飞星火大模型的API流程。根据用户提供的引用内容,涉及到生成签名的URL,这可能包括时间戳、API密钥和加密参数。 用户提到引用[2]中介绍了接口WebSocket握手以及报文发送的流程。所以,首先需要明确的步骤。通常,URL需要包含host、date、authorization等参数。其中,authorization是通过加密算法生成的签名。 接下来,我需要考虑如何在Unity中生成这个URL。可能需要使用HMAC-SHA256算法对部分信息进行加密,然后将加密后的结果进行Base64编码。同时,还要处理时间戳,确保日期格式正确。 然后,用户需要一个具体的示例。我应该分步骤说明,比如构造请求参数、生成签名、拼接URL。这里需要注意各个参数的顺序和格式,例如host可能是“spark-api.xf-yun.com”,date需要是UTC时间,格式为RFC1123。 另外,用户可能对如何在Unity中处理HMAC加密不太清楚,所以需要给出C#的实现方法,比如使用System.Security.Cryptography命名空间下的类。同时,要提醒用户替换实际的API密钥和密钥信息,并注意安全存储这些敏感数据。 最后,需要检查代码示例的正确性,确保每一步都清晰,比如生成签名的字符串,正确拼接各部分参数,以及最终的URL结构。可能还需要提到WebSocket连接的建立,如使用Thread或异步方法发送请求,并处理响应。 总结一下,我需要分步骤解释URL的生成方法,提供代码示例,并指出需要注意的事项,比如时间戳的有效期、密钥的安全处理,以及可能的错误排查点,比如参数顺序是否正确,加密是否正确等。</think>在Unity中实现讯飞WebSocketURL配置需通过**参数加密+签名生成**完成,具体步骤如下: --- ### 一、URL生成原理 讯飞WebSocket要求URL包含`host`、`date`、`authorization`三个核心参数[^2],其中: - `host`:接口域名,如`spark-api.xf-yun.com` - `date`:当前UTC时间(格式:RFC1123) - `authorization`:基于APIKey和APISecret生成的加密签名 --- ### 二、Unity实现步骤(C#代码示例) #### 1. 构造请求参数 ```csharp string host = "spark-api.xf-yun.com"; string apiKey = "your_api_key"; string apiSecret = "your_api_secret"; DateTime date = DateTime.UtcNow; string dateStr = date.ToString("r"); // RFC1123格式 ``` #### 2. 生成签名 ```csharp using System.Security.Cryptography; using System.Text; string signatureOrigin = $"host: {host}\ndate: {dateStr}\nGET /v1.1/chat HTTP/1.1"; byte[] signatureBytes = HMACSHA256.HashData( Encoding.UTF8.GetBytes(apiSecret), Encoding.UTF8.GetBytes(signatureOrigin) ); string signature = Convert.ToBase64String(signatureBytes); ``` #### 3. 拼接URL ```csharp string authorization = $"api_key=\"{apiKey}\", algorithm=\"hmac-sha256\", headers=\"host date request-line\", signature=\"{signature}\""; string authUrl = $"wss://{host}/v1.1/chat?authorization={Uri.EscapeDataString(authorization)}&date={Uri.EscapeDataString(dateStr)}&host={host}"; ``` --- ### 三、完整配置示例 ```csharp // 配置类 public class XFWebSocketConfig { public static string GetAuthUrl() { string host = "spark-api.xf-yun.com"; string apiKey = "your_api_key_here"; string apiSecret = "your_api_secret_here"; // 生成RFC1123格式时间戳 string dateStr = DateTime.UtcNow.ToString("r"); // 生成签名 var signatureStr = $"host: {host}\ndate: {dateStr}\nGET /v1.1/chat HTTP/1.1"; var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(apiSecret)); var signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(signatureStr))); // 构造参数 var authorization = $"api_key=\"{apiKey}\", algorithm=\"hmac-sha256\", headers=\"host date request-line\", signature=\"{signature}\""; return $"wss://{host}/v1.1/chat?authorization={Uri.EscapeDataString(authorization)}&date={Uri.EscapeDataString(dateStr)}&host={host}"; } } ``` --- ### 四、关键注意事项 1. **时间戳有效期**:URL有效期5分钟,超时需重新生成 2. **密钥安全**:APIKey/Secret应加密存储,**不可明文暴露**在客户端代码 3. **协议版本**:讯费v1.1与v2.0接口路径不同,需根据文档调整`/v1.1/chat`路径 4. **编码规范**:必须使用`Uri.EscapeDataString`进行URL编码 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值