Cloudflare-WX-API
扫码查看

一个用Cloudflare托管的微信服务号后台

Cloudflare-WX-API

综合介绍

Cloudflare-WX-API 是一个开源项目,它允许个人开发者使用 Cloudflare 的一系列服务来搭建一个功能完整的微信服务号后台。 这个方案的核心优势在于完全不需要依赖传统的服务器,利用 Cloudflare 强大的全球网络和 Serverless 架构,为开发者提供了一个成本极低、易于维护且性能可靠的选择。 项目通过结合 Cloudflare Workers(负责处理逻辑)、Durable Objects(负责持久化存储)和 Cloudflare AI(负责智能聊天),实现了两大核心功能:微信扫码和验证码登录,以及接入大语言模型(LLM)的智能自动回复。对于希望在个人网站或应用中集成微信生态功能,但又不想承担服务器运维复杂性和成本的开发者来说,这个项目提供了一个开箱即用的解决方案。

功能列表

  • 微信第三方登录: 支持个人网站快速集成微信登录功能,用户可以通过关注服务号,然后进行扫码或验证码登录,网站主可以获取用户的唯一身份标识(UID)。
  • 智能聊天机器人: 集成了 Cloudflare AI 功能,可以对服务号接收到的粉丝消息进行智能回复。
  • 超时回复处理: 针对微信服务号后台只有5秒响应时间的限制,项目设计了专门的超时处理机制。如果AI模型生成回复超过5秒,用户可以发送指定命令(如“上一条”)来获取刚刚未能及时发出的AI回复。
  • 无服务器架构: 完全部署在 Cloudflare 平台上,无需购买和配置传统的云服务器,极大地降低了个人开发者的使用和维护成本。
  • 配置简单: 通过 Cloudflare 的 wrangler.toml 配置文件即可完成所有环境变量和密钥的设置。
  • 易于集成: 项目提供了前端使用的 JavaScript 代码片段,开发者可以轻松地将其嵌入到任何个人网站中,以实现登录逻辑。

使用帮助

这个项目的设计目标是让不具备后端服务器运维经验的个人开发者,也能轻松拥有一个属于自己的、由微信认证的服务号后台。以下是详细的部署和使用流程。

一、前期准备

  1. 一个Cloudflare账号: 你需要在 Cloudflare 官网注册一个账号。
  2. 一个微信服务号: 该项目不支持订阅号。你需要有一个认证的微信服务号。登录微信公众平台(mp.weixin.qq.com)获取你的 AppID 和 AppSecret。
  3. 一个域名 (可选): 虽然 Cloudflare Workers 会提供一个免费的 *.workers.dev 子域名,但微信后台只支持使用你自己的域名。你需要注册一个域名,并将其NS(域名服务器)托管到 Cloudflare。
  4. 安装 Node.js 和 Wrangler: Wrangler 是 Cloudflare 官方的命令行工具,用于开发和部署 Workers。
    • 确保你的电脑上已经安装了 Node.js (建议使用最新LTS版本)。
    • 打开终端或命令行工具,运行以下命令来安装 Wrangler:
      npm install -g wrangler
      ```    *   安装后,运行以下命令登录你的 Cloudflare 账号:
      ```bash
      wrangler login
      

二、项目部署流程

  1. 下载项目代码
    • 访问项目GitHub主页 https://github.com/Tinger-X/cloudflare-wx-api
    • 点击 "Code" 按钮,然后选择 "Download ZIP" 将项目文件下载到你的电脑,或者使用 Git 克隆:
      git clone https://github.com/Tinger-X/cloudflare-wx-api.git
      
  2. 修改配置文件
    • 在项目根目录中,找到名为 wrangler-expamle.jsonc 的文件,并将其重命名为 wrangler.toml
    • 使用代码编辑器打开 wrangler.toml 文件,这是部署的核心配置文件。你需要修改以下几个部分:

    a) [vars] 环境变量配置:这是最关键的一步,你需要填入从微信公众平台和你自己设定的信息。

    [vars]
    # 微信公众号开发配置中的Token,可以随机填写,但必须与微信后台一致
    WECHAT_TOKEN = "YourWechatToken"
    # 微信公众号的AppID
    APP_ID = "YourAppId"
    # 微信公众号的AppSecret
    APP_SECRET = "YourAppSecret"
    # AI回复超时后,用户可发送此命令获取上一条消息的回复
    LLMLastMsg = "上一条"
    # Cloudflare AI 使用的模型
    LLM = "@cf/meta/llama-2-7b-chat-int8"
    # Durable Objects 使用的名称,保持默认即可
    USER = "USER"
    

    b) Cloudflare AI 和 Durable Objects 绑定:确保 wrangler.toml 中包含以下绑定配置,这些配置使得 Worker 可以使用 AI 和存储功能。通常无需修改。

    [[durable_objects.bindings]]
    name = "USER"
    class_name = "User"
    [[ai.bindings]]
    name = "AI"
    
  3. 安装依赖并部署
    • 在项目的根目录打开终端或命令行工具。
    • 运行 npm install 来安装项目所需的依赖包。
    • 运行 wrangler deploy 来将项目部署到 Cloudflare。部署成功后,终端会显示你的 Worker 访问地址,例如 https://cloudflare-wx-api.your-username.workers.dev

三、配置微信服务号后台

  1. 登录微信公众平台,在左侧菜单找到 设置与开发 -> 基本配置
  2. 修改服务器配置:
    • 服务器地址(URL): 填写你刚刚部署好的 Worker 地址,并在末尾加上 /serve,例如 https://your-domain.com/serve。如果你绑定了自定义域名,就使用你自己的域名。
    • 令牌(Token): 填写你在 wrangler.toml 中设置的 WECHAT_TOKEN 值。
    • 消息加解密方式: 选择 安全模式
    • 消息加解密密钥(EncodingAESKey): 点击“随机生成”,然后将生成的密钥复制下来,粘贴到 wrangler.toml 文件的 [vars] 部分,新增一个 AES_KEY 字段。
      # wrangler.toml
      [vars]
      WECHAT_TOKEN = "YourWechatToken"
      APP_ID = "YourAppId"
      APP_SECRET = "YourAppSecret"
      AES_KEY = "YourEncodingAESKeyCopiedFromWechat" # 新增此行
      ...
      
  3. 重新部署: 由于你修改了 wrangler.toml 文件,需要回到终端再次运行 wrangler deploy 以使新的密钥生效。
  4. 启用服务器配置: 回到微信公众平台,点击“提交”按钮。如果一切正常,会提示“配置成功”。

四、在你的网站上使用微信登录

项目已经为你准备好了前端集成代码。 你只需要将以下代码嵌入到你的网站页面中即可。

<script>
class WxApiLogin {
static #instance = null;
#wxApiUrl = undefined;
#localKey = "LocalUid";
#onLoginResult = null;
#getLocalUid() {
return localStorage.getItem(this.#localKey);
}
#setLocalUid(uid) {
localStorage.setItem(this.#localKey, uid);
}
constructor(host, key = "LocalUid") {
if (WxApiLogin.#instance !== null) return WxApiLogin.#instance;
// 将这里的 'host' 参数改为你的 Worker 域名
this.#wxApiUrl = `${host}/oauth?target=${window.location.href}`;
this.#localKey = key;
window.addEventListener("message", event => {
try {
const res = JSON.parse(event.data);
if (res.code === 200) this.#setLocalUid(res.data);
this.#onLoginResult && this.#onLoginResult(res);
} catch (e) {
console.log(e);
}
});
}
login(callback) {
const uid = this.#getLocalUid();
if (uid !== null) {
return callback && callback({ code: 200, data: uid });
}
window.open(this.#wxApiUrl);
this.#onLoginResult = callback;
}
logout() {
localStorage.removeItem(this.#localKey);
}
}
// 初始化时,请将 "https://your-domain.com" 替换成你自己的 Worker 地址
const wxApiLogin = new WxApiLogin("https://your-domain.com");
// 在需要登录的地方(例如点击登录按钮时)调用 login 方法
function handleLogin() {
wxApiLogin.login(res => {
if (res.code === 200) {
console.log(`登录成功, 你的用户ID是: ${res.data}`);
// 在这里处理登录成功后的逻辑,比如更新UI
} else {
alert(`登录失败:${res.data}`);
}
});
}
</script>
<button onclick="handleLogin()">微信登录</button>

当用户点击“微信登录”按钮后,会弹出一个新的窗口,显示微信登录二维码。用户扫码关注并确认后,窗口会自动关闭,你的网站会通过回调函数收到包含用户唯一ID的结果。

应用场景

  1. 个人博客或作品集增加登录功能对于希望统计独立访客或提供用户特定功能的个人网站主,可以使用此项目快速集成一个无需注册、体验良好的微信登录系统,同时避免了处理用户密码的麻烦和安全风险。
  2. 小型Web应用的用户认证如果你开发了一个小工具或Web应用,需要区分用户身份(例如保存用户数据或设置),这个项目提供了一个轻量级的用户认证方案。通过获取微信的唯一ID,你可以为每个用户建立独立的数据库记录。
  3. 个人开发者的智能客服助手对于运营微信服务号的个人开发者,可以利用其集成的AI聊天功能,处理常见的用户提问和互动,实现7x24小时的自动化客户服务,提升粉丝的互动体验。
  4. 无服务器应用(Serverless)的快速原型开发该项目是 Serverless 架构的一个极佳实践案例。开发者可以学习和借鉴其模式,用于构建其他需要和微信生态打通的无服务器应用,例如消息推送、内容分发等。

QA

  1. 这个项目是否收费?项目本身是开源免费的。其依赖的 Cloudflare Workers 和 Durable Objects 服务提供了非常慷慨的免费额度(例如 Workers 每天10万次免费请求),对于个人开发者和小流量应用来说,基本可以实现零成本使用。
  2. 订阅号可以用吗?不完全可以。微信的扫码登录、获取用户基本信息等高级接口只对服务号开放。订阅号无法使用此项目的登录功能,但理论上可以改造后仅使用其消息回复功能。
  3. 为什么配置微信后台时提示“Token验证失败”?最常见的原因有两个:一是你在微信后台填写的 Token 和 wrangler.toml 文件中的 WECHAT_TOKEN 不一致;二是你修改了 wrangler.toml 后没有重新运行 wrangler deploy 进行部署,导致服务器上的配置还是旧的。
  4. AI回复感觉很慢或者没有反应怎么办?微信服务器要求后台在5秒内必须响应。大型语言模型(LLM)的推理有时会超过这个时间。该项目作者设计了超时补偿机制,如果AI没能及时回复,你可以向服务号发送 "上一条" (或你在配置中设置的任何命令),系统就会把你刚才提问的、已经生成好的答案发送给你。
微信微博Email复制链接