Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

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=671 SMSPOOL_NATIVE_SERVICE_NAME=OpenAI / ChatGPT SMSPOOL_REFRESH_INTERVAL_MS=180000 SMSPOOL_STOCK_MODE=country SMSPOOL_STOCK_BATCH_SIZE=20 SMSPOOL_INCLUDE_POOL_NAMES=false

SMSPool 使用官方原生 API:/request/pricing 获取价格档位,/sms/stock 获取库存。SMSPOOL_SERVICE_CODE=671 对应 OpenAI / ChatGPT;如果你的环境里仍保留旧的 dr,程序会通过 SMSPOOL_NATIVE_SERVICE_NAME 自动解析原生服务 ID。

SMSPOOL_STOCK_MODE=country 表示每个国家查一次总库存,更适合 1 分钟定时刷新;如果改成 pool,会按价格池查询更细的档位库存,但请求量更高,可能触发 SMSPool 限流。

SMSPOOL_REFRESH_INTERVAL_MS=180000 表示 SMSPool 单独每 3 分钟刷新一次,其它平台仍按全局 REFRESH_INTERVAL_MS=60000 刷新。这样可以保留页面 1 分钟更新,同时避开 SMSPool 的 120 秒限流窗口。

SMSPOOL_STOCK_BATCH_SIZE=20 表示每次 SMSPool 真实刷新只查询 20 个国家的库存,其他国家沿用上一次成功库存;价格仍然全量刷新。这可以避免一次性查询 155 个国家库存导致 429

推荐国家配置

目前推荐国家从 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) 短信接码价格和库存对比看板

语言 Languages

JavaScript89.9%
CSS9.8%
HTML0.2%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
7
Total Commits
峰值: 7次/周
Less
More

核心贡献者 Contributors