← 返回首页
强力推荐

授权及商城系统

这是站长根据自身需求开发的简易的商城系统,集成支付宝扫码支付、授权密钥生成/验证/设备绑定等完整功能。同时作为小型的在线商店,适用于各类数字商品的授权销售。

¥199.0 / 365天
  • 支付宝支付
  • 自动签发授权密钥
  • 自动推送下载链接

📖 详情说明

RONGYAN.CC 授权与商城系统 — 开发笔记

项目概述

RONGYAN.CC 授权与商城系统,集成支付宝扫码支付、授权密钥生成/验证/设备绑定、SMTP 邮件发送、下载令牌等完整功能。同时作为小型的在线商店运营,适用于各类数字商品的授权销售。


技术栈

层级 技术
后端语言 PHP 8.2
数据库 MySQL 8.0.45
Web 服务器 Nginx 1.31
支付 支付宝 alipay.trade.precreate(扫码支付)
邮件 SMTP SSL/TLS(自实现,无第三方库)
前端 原生 HTML/CSS/JS,无框架
管理后台 SPA 单页应用

核心索引

  • download_tokens.token — 唯一索引
  • download_tokens.order_id — 索引

模块详解

1. 支付宝支付

流程: 用户扫码 → 前端轮询 status.php → 异步 notify.php 创建订单 + 发邮件

  • pay.php:调用 alipay.trade.precreate 获取二维码,检测 UA 判断移动端展示深链,60 秒轮询倒计时
  • notify.php:验证 RSA2 签名(UTF-8/GBK 双兼容),幂等性检查,事务创建订单+授权+下载令牌,发送双邮件(客户+管理员)
  • status.php:查询 payment_records 返回 {paid: true/false}
  • return.php:同步跳转页,显示授权密钥或购买凭证

2. 授权验证

  • verify.php:双模式(license_key 优先,order_no 兼容旧版),首次激活设备绑定,IP 限流(10 次/小时)
  • validate.php:离线签名验证,校验 HMAC-SHA256 签名,检查过期

3. 下载系统

  • 购买时自动生成 32 位随机 hex 令牌,7 天有效,最多下载 5 次
  • 本地文件通过 PHP readfile() 代理下载(不暴露真实路径)
  • 远程 URL 回退到 302 跳转
  • 管理员可在后台重置令牌 + 发送新链接邮件

4. 邮件系统

  • 纯 Socket 实现 SMTP,支持 SSL (465) 和 TLS (587)
  • LOGIN 认证,Base64 编码
  • Multipart/alternative MIME(纯文本+HTML)
  • 模板:授权密钥邮件 / 购买凭证邮件 / 下载链接邮件 / 过期提醒邮件

5. 定时任务

0 2 * * * php /path/to/cron/expire-licenses.php

执行三项操作:

  • 过期 order(status → expired)
  • 禁用 license(is_valid → 0)
  • 发送 7 日内到期提醒

关键设计决策

决策 说明
is_licensed 字段 控制授权类/非授权类商品的邮件模板差异
下载令牌 单独表存储,7 天/5 次限制,本地文件 PHP 代理
APP_URL 所有 URL 统一从 .env 读取,换域名只需改配置
notify_url 作为请求参数发送,无需支付宝平台配置
签名算法 HMAC-SHA256 + SIGN_SECRET
设备绑定 首次激活时绑定设备 ID,后续重复验证
RSA2 验签 notify.php 中先尝试 UTF-8,失败回退 GBK 转码

部署说明

  1. 导入完整 SQL 建表
  2. 配置 .env 中的数据库连接、APP_URL、SIGN_SECRET
  3. Nginx 配置:try_files $uri $uri/ /api.php(使 / 指向 index.php
  4. 设置 crontab 定时执行 cron/expire-licenses.php

开发历史

  • 初始搭建:PHP 后端 + MySQL + 管理后台 SPA
  • 集成支付宝支付(QR code 模式)
  • 增加授权验证系统(verify.php + validate.php)
  • 增加下载令牌系统
  • 增加 is_licensed 商品类型区分
  • 清理调试日志,改用 error_log 轻量审计
  • 购买页从 /buy/ 迁移到 /
  • 订单、授权、支付记录增加删除功能

后续功能设想

  • 后期考虑增加微信接入或者其它的支付方式。