小程序里裸写 API Key 的三种翻车现场,和一条干净的路
先说结论
独立开发者做微信小程序接大模型,最常见也最危险的做法,是把 API Key 直接打包进小程序前端代码,直连模型厂商的接口。这条路看起来最短,实际上是把钥匙贴在门上。本文先复盘三个典型翻车现场,再给出正确路径:小程序 → 你自己的服务端(或代理层)→ ThisToken.AI 网关,配一段可以直接跑通的代码。
三种失败做法
翻车一:Key 写在小程序 JS 里
小程序的包文件人人可解包。Key 一旦泄露,别人拿你的额度跑自己的业务,账单是你的。更糟的是,很多开发者直到月底账单异常才反应过来,而此时泄露的 Key 早已在各个脚本群里流转了。
翻车二:Key 放在云函数里,但没有任何调用控制
比翻车一好一点,但云函数如果对调用方不做鉴权、不限频,等于开了一个“免费 AI 接口”给全世界。爬虫和恶意用户最擅长发现这种裸奔的端点。
翻车三:绕过网关,直接对接某个模型厂商
把厂商的 SDK 耦合进小程序逻辑,半年后模型升级换代、接口变更,你要把所有调用点重写一遍。而且只用一家厂商,某个区域服务抖动时没有任何退路。
这三个坑的共同解法是:Key 只存在服务端,小程序只和你控制的代理层通信,代理层再通过统一网关调用模型。ThisToken.AI 就是这样一个 AI 网关——OpenAI 兼容的接口风格,一套 base_url 背后聚合多家模型,换模型只改一个参数。
正确路径:三步跑通
第一步:注册并获取 API Key
打开 ThisToken.AI 官网注册账号(文末有入口),进入控制台创建 API Key。这个 Key 只能放在服务端,不要出现在任何小程序前端代码、Git 仓库或聊天记录里。费用方面,以官网价格页为准,本文不引用具体数字。
第二步:写服务端代理
下面这段 Python(适用于你自己的服务器或云函数)演示了标准接法,小程序请求它,它再请求网关:
from flask import Flask, request, jsonify
from openai import OpenAI
app = Flask(__name__)
# Key 只在服务端环境变量中,绝不打包进小程序
client = OpenAI(
api_key=os.environ["THISTOKEN_API_KEY"],
base_url="https://api.thistoken.ai/v1"
)
# 简易调用方鉴权:小程序登录后下发的临时 token
VALID_TOKENS = {"sample-miniapp-token"}
@app.route("/api/chat", methods=["POST"])
def chat():
token = request.headers.get("Authorization", "").replace("Bearer ", "")
if token not in VALID_TOKENS:
return jsonify({"error": "unauthorized"}), 401
data = request.json
try:
resp = client.chat.completions.create(
model="gpt-4o-mini", # 换模型只改这一行
messages=[{"role": "user", "content": data["message"]}],
max_tokens=500,
)
return jsonify({"reply": resp.choices[0].message.content})
except Exception as e:
return jsonify({"error": str(e)}), 500
if os.environ.get("LOCAL_TEST"):
# 本地先跑通第一段代码
r = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "你好,介绍一下你自己"}],
)
print(r.choices[0].message.content)先在本地设置环境变量 THISTOKEN_API_KEY 和 LOCAL_TEST=1 跑一次,看到模型回复,说明网关链路已经通了。注意代码里的 base_url="https://api.thistoken.ai/v1"——这正是通过网关统一调用的关键,后续换模型、换厂商,客户端代码几乎不动。
第三步:小程序端只调你的代理
小程序里用 wx.request 请求你自己的 /api/chat,携带用户登录后获取的 token。小程序包里没有任何 Key,没有厂商 SDK,解包者也拿不到任何有价值的东西。
建议补上的两道保险
- 限频与熔断:在代理层按用户做每分钟调用上限,异常流量直接拒绝,避免代理层本身变成新的裸奔端点。
- 日志与用量追踪:记录每次调用的模型、token 消耗和调用方,出了问题能定位到人,而不是面对一团迷雾。
写在最后
独立开发者的时间应该花在产品上,而不是反复处理 Key 泄露、接口迁移这类本可避免的事故。把 Key 锁在服务端、把模型调用收敛到一个网关,是花半小时换长期安心的事。
现在就去注册一个账号、创建 Key,把上面的代码跑起来:https://api.thistoken.ai/register——第一段代码通了,后面的一切都顺了。
---
不想折腾多家供应商的接入差异?在 https://api.thistoken.ai/register 注册,用一个 base_url 调用所有模型。