欢迎使用 SEMIPAY,个人收款解决方案,只需在 Vercel 上简单配置即可轻松部署私有的支付系统。
它可以创建半自动个人收款系统,免去域名备案,资质审批,交易费用等种种问题。适合每分钟收款小于5笔的系统。
你也可以用著名的wechaty
https://wechaty.js.org/来监听微信付款消息,实现全自动收款。一个考虑周全的自动收款系统相当复杂,而且有被微信封锁的风险,我就不细说了。
- ⚡ 通过 Vercel 一键免费部署,添加所需配置即可立即拥有自己的微信收款系统
- 💬 支持tg机器人通知
- 🎨 操作简单,在vercel edge config 更新配置即可立即生效
- 🌈 安全开源,无需担心资金问题
获取测试结账链接:https://payment-mauve.vercel.app
-
拷贝
examle.edge.conf.json
配置模板,初始化你的vercel edge config -
准备多张不同备注信息,固定金额的微信收款二维码,上传到网络(比如github, 比如对象存储服务器)
-
拿到可以直接访问的URL后填入qrcode字段
-
购买国内可用的域名(hostname),你也可以直接用vercel送的域名
-
设置好tg机器人链接,密钥 和 支付站点的hostname
-
设置好
webhook
的地址,用于确认订单后的回调,请求样本如下所示:
curl -X POST <webhook>&token=<token> \n
-H "Content-Type: application/json" \n
-d '{"price":<price>,"user":"<user>","extra":"<extra>","uid":"<uid>","remark":"<remark>","timestamp":<timestamp>}'
# 比如
curl -X POST -H "Content-Type: application/json" -d '{"price": 10, "user": "john@example.com", "extra": "Extra information", "uid": "1234", "remark": "Payment for product X", "timestamp": 1622213957}' https://your-webhook-url.com?token=your-token
-
请务必保证webhook可用,否则订单不会被确认
-
token生成:
// info 即需要签名的payload
const secret = process.env.SECRET;
// 按字母顺序排序
const text = Object.keys(info).sort().map(k=> info[k]).join(',');
// 使用sha256加密信息
const token = createHmac('sha256', secret).update(text).digest('base64');
总之,代码都在这了,不用我多加解释。
以下 JSON 模板可供参考,用来设置 Vercel edge-config:
https://vercel.com/dashboard/stores/edge-config
{
"qrcode": [
{
"url": "https://..co/storage/v1/object/public/static/five1.jpg",
"remark": "five1",
"price": 5
},
{
"url": "https://..co/storage/v1/object/public/static/five2.jpg",
"remark": "five2",
"price": 5
},
{
"url": "https://..co/storage/v1/object/public/static/five3.jpg",
"remark": "five3",
"price": 5
}
],
"webhook": "https://ok/api/wepaynotify?",
"telegram": "https://api.telegram.org/botxxxx:xxxx/sendMessage?chat_id=xxx&",
"hostname": "https://pay",
"secret": "123"
}
// 从你的业务服务器向支付服务器获取付款链接
const hostname = 'https://your.pay.domain';
// 准备信息
const info = {
price: 5, // 价格,需要和你上面的qrcode数组price对应
user: 'donate@user.com',
extra: 'donate', // 额外信息,一般放商品id之类
timestamp: Date.now() // 随便,简单防攻击而已
};
// 进行签名
// 获取密钥
const secret = process.env.SECRET;
// 按字母顺序排序
const text = Object.keys(info).sort().map(k=> info[k]).join(',');
// 使用sha256加密信息
const token = createHmac('sha256', secret).update(text).digest('base64');
// 去支付服务器换付款链接
const checkout = await fetch(`${hostname}/api/checkout`, {
method: 'post',
body: JSON.stringify({...info, token})
}).then(res=>{
if(res.status !== 200) throw new Error(res.status);
return res;
}).then(res=>res.json());
// 付款链接
console.log(checkout);
// 用户点开checkout页面后,如果配置了tg机器人,则会收到消息
/**
A checkout was placed
-user: demo@user.com
-price: 5
-remark: five1
-extra: manual-5
-uid: a3f65157-b9f5-49ad-95bf-7967200a3b38
click here to confirm the payment
*
* /
// 点击后即可确认订单,并调用webhook的地址发送确认消息
通过一键式部署在 Vercel 上部署自己的支付网站:
这是一个使用create-next-app
快速启动的Next.js项目。
首先,请运行开发服务器:
npm run dev
# 或者
yarn dev
# 或者
pnpm dev
使用您的浏览器打开 http://localhost:3000 来查看结果。
部署Next.js应用程序的最简单方法是使用Next.js部署文档中介绍的Vercel平台,Vercel是Next.js的创造者。
更多细节请查阅我们的Next.js部署文档。