Skip to content

FoundZiGu/SMSBazaar

Repository files navigation

SMSBazaar

SMSBazaar 是一个用于对比 OPENAI(ChatGPT) 短信接码价格和库存的单页面看板。

项目通过服务端定时拉取多家短信平台 API,把不同平台的国家、价格、库存统一归一化,然后在前端按国家维度展示最低价、总库存、在线平台数和各平台明细。

在线访问:https://sms.fur.li/

功能特性

  • 固定对比 OPENAI(ChatGPT) 服务的接码价格和库存。
  • 已接入 7 家短信平台:Hero SMS、SMSBower、5sim、NexSMS、GrizzlySMS、SMS Verification Number、SMSPool。
  • 国家统一使用 ISO2 做主键,解决各平台国家 ID 不一致的问题。
  • 国家名称显示为中文名,后面带英文名。
  • 价格默认显示人民币,同时显示美元换算价。
  • 支持按国家、平台、状态和价格/库存排序筛选。
  • 支持展开国家查看各平台明细,平台多档价格默认折叠。
  • 支持三种业务模式:先手机号注册 OAuth、后手机号绑定 OAuth、目前推荐国家。
  • 后端默认每 1 分钟自动刷新一次快照。
  • 保留管理员手动刷新接口,公网默认需要管理员密钥。
  • 前端支持跟随系统、亮色、暗色主题。

技术架构

  • 前端:React SPA + Vite。
  • 后端:Express API + 静态文件托管。
  • 存储:SQLite,保存最近快照、刷新状态、汇率缓存和服务配置。
  • 部署:构建后一个 Node.js 进程即可同时提供 API 和前端页面。

环境要求

  • Node.js 20 或更新版本。
  • npm。
  • 至少配置你需要启用的平台 API key。

本地开发

npm install
cp .env.example .env
npm run dev

本地开发时:

  • 前端地址:http://localhost:5173
  • 后端地址:http://localhost:8787
  • Vite 会把 /api 请求代理到后端。

生产构建

npm install
npm run build
npm start

默认生产服务监听 PORT=8787,并托管 dist/client 下的前端构建产物。

环境变量

在服务器上复制 .env.example.env,然后填写真实 API key。

PORT=8787
REFRESH_INTERVAL_MS=60000
REFRESH_COOLDOWN_MS=30000
DATABASE_PATH=./data/app.sqlite
EXCHANGE_RATE_URL=https://api.frankfurter.app/latest?from=USD
RECOMMENDED_COUNTRY_PATHS_FILE=./data/recommended-country-paths.txt
OPENAI_SUPPORTED_COUNTRIES_FILE=./data/openai-supported-api-countries.txt
ADMIN_REFRESH_TOKEN=
EXPOSE_PROVIDER_ERRORS=false

平台 API key:

HERO_SMS_API_KEY=
SMSBOWER_API_KEY=
FIVESIM_API_KEY=
NEXSMS_API_KEY=
GRIZZLYSMS_API_KEY=
SMS_VERIFICATION_API_KEY=
SMSPOOL_API_KEY=

平台服务码也可以通过环境变量覆盖:

HERO_SMS_SERVICE_CODE=dr
SMSBOWER_SERVICE_CODE=dr
FIVESIM_SERVICE_CODE=openai
NEXSMS_SERVICE_CODE=dr
GRIZZLYSMS_SERVICE_CODE=dr
SMS_VERIFICATION_SERVICE_CODE=dr
SMSPOOL_SERVICE_CODE=dr

推荐国家配置

目前推荐国家从 data/recommended-country-paths.txt 读取。

每一行格式:

ISO2 PATH

PATH 含义:

  • 0:推荐走先手机号注册 OAuth。
  • 1:推荐走后手机号绑定 OAuth。

示例:

GB 1
PH 0

前端只显示业务文案,不展示原始 0/1,也不暴露服务器上的配置文件路径。

OpenAI 支持国家

先手机号注册 OAuth 模式会读取 data/openai-supported-api-countries.txt

该文件一行一个 ISO2 国家或地区代码,用于排除 OpenAI 官方不支持的国家和地区。

API

GET /api/meta
GET /api/compare?mode=register|bind|recommended&country=US&provider=smsbower&status=in_stock&sort=price_asc
POST /api/refresh

POST /api/refresh 需要管理员密钥,二选一传入:

x-admin-refresh-token: your-token
Authorization: Bearer your-token

如果 ADMIN_REFRESH_TOKEN 为空,手动刷新接口会返回 503 admin_refresh_not_configured

VPS 部署建议

推荐部署方式:

  • 使用 pm2systemd 守护 Node.js 进程。
  • 使用 Nginx 反向代理到 127.0.0.1:8787
  • 开启 HTTPS。
  • .env 不要提交到仓库。
  • SQLite 数据库建议放在持久化目录,例如 /var/lib/smsbazaar/app.sqlite
  • 公网部署保持 EXPOSE_PROVIDER_ERRORS=false,避免暴露上游平台的详细错误。
  • 设置强随机 ADMIN_REFRESH_TOKEN

PM2 示例:

npm install
npm run build
pm2 start src/server.js --name smsbazaar
pm2 save

Nginx 反向代理示例:

server {
  listen 80;
  server_name example.com;

  location / {
    proxy_pass http://127.0.0.1:8787;
    proxy_http_version 1.1;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
}

开源注意事项

  • .env、SQLite 数据库、构建产物、日志文件和 node_modules 已被 .gitignore 忽略。
  • data/*.txt 是公开配置模板,会进入仓库。
  • 生产依赖可用 npm audit --omit=dev 检查。

友情链接

License

MIT

About

OPENAI(ChatGPT) 短信接码价格和库存对比看板

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors