Repository: coderwhocode/wechaty-pay
Branch: master
Commit: 9365d1402400
Files: 3
Total size: 5.1 KB
Directory structure:
gitextract_bcpk42yh/
├── README.md
├── package.json
└── pay.js
================================================
FILE CONTENTS
================================================
================================================
FILE: README.md
================================================
# Wechaty Pay - 让线上没有难做的生意
## TLDR
本文主要面对没有营业执照,想使用微信或支付宝在线收款的中小企业或者个人开发者,日收入在5K以下(菠菜类或者想偷税者请绕道)。
自从使用了Wechaty,资金及时到账,收款后立即通知。即开即用,高并发,超稳定不掉单。
<img src="https://cdn.mugglepay.com/docs/pics/paypic.png" alt="让线上没有难做的生意" width="250x"/>
<!--more-->
## 背景
随处可见微信和支付宝的支付二维码,已经让超市水果店和煎饼果子摊贩没有难做的生意。然而在线支付可就没那么容易了。接口大部分需要企业资质认证,或者需要备案域名以及开通权限,对于中小型商户门槛非常高。大部分人会在收到款后,手动确认订单,经常出现订单延误或者遗漏。然而市面上的解决方案都差强人意。那么这个线上支付的流程如何利用Wechaty优化一下呢?

## 技术实现
整个收款过程分为3步:
1. 用户选择支付金额后,付款页面打开对应的付款码(支付宝可自定义金额),用户扫码付款
2. 确认收款后(```onMessage```),跟后端发送回调收款金额及收款时间(```sendPayment```)
3. 后台根据金额以及时间,把对应的订单自动标记
下面的例子以第2步为例,如何在后台确认收款,以及跟后端发送回调。
```
// Wechaty 经典启动
const bot = new Wechaty()
bot.on('scan', onScan)
bot.on('login', onLogin)
bot.on('message', onMessage)
bot.start()
// 微信收款的消息提示
async function onMessage (msg) {
if ( msg.type() !== bot.Message.Type.Attachment && !msg.self()
|| contact.name() !== '微信支付') {
return
}
const strs = msg.text().split('元')
if (strs.length >= 1) {
const prices = strs[0].split('微信支付收款')
if (prices.length >= 1) {
const priceStr = prices[1]
sendPayment(parseFloat(priceStr), msg.date().getTime())
}
}
}
// 收到金额之后,进行确认订单回调
function sendPayment (priceAmount, timestamp) {
const options = {
method: 'POST',
url: 'https://api.callbackaddress.com/api/admin/callback',
headers: { 'content-type': 'application/json', 'token': 'XXXXXX'},
body: {'amount': priceAmount, 'timestamp': timestamp },
json: true
};
request(options, function (error, response, body) {
if (error) throw new Error(error);
});
}
```
支付宝道理类似,不过目前产品包装没有Wechaty这么优秀的代码库。半自动操作如下:
1. 扫码登录支付宝账号,在Headers中获取Cookie。操作类似于``` bot.on('scan', onScan) ```
2. 轮询获取订单列表,如果有新支付订单,,跟后端发送回调收款金额及收款时间(```sendPayment```)
3. 由于此处使用了轮询的方式,为了防止频繁访问被支付宝风控,仅当有待支付订单才会高频访问订单接口。
## 效果预览
终于可以一站式的管理所有微信和支付宝的订单了!每笔订单的时间,金额,还有每天收入统计一览无余。

## 产品实现
如果还是觉得步骤有点繁琐?那可以试一下这款基于[桔子互动](https://www.botorange.com/)的云端服务哦。
* 支持微信扫码托管(基于桔子互动服务)
* 支持支付宝扫码托管
* 保障安全性,不记录个人账户密码
* 资金实时到账,不经过第三方
<img src="https://cdn.mugglepay.com/docs/pics/botorange.png" alt="桔子互动" width="500x"/>
本文仅供技术产品交流参考,建议使用官方认证接口。请勿使用此项目做违反微信、支付宝规定或者其他违法事情!
================================================
FILE: package.json
================================================
{
"name": "wechatpay",
"version": "0.1.0",
"description": "Personal Payment Solution",
"main": "pay.js",
"engines": {
"node": ">= 10"
},
"scripts": {
"postinstall": "check-node-version --node \">= 10\"",
"start": "node pay.js"
},
"repository": {
"type": "git",
"url": "git+https://github.com/coderwhocode/wechaty-pay.git"
},
"keywords": [],
"author": "Huan LI <zixia@zixia.net>",
"license": "ISC",
"bugs": {
"url": "https://github.com/coderwhocode/wechaty-pay/issues"
},
"homepage": "https://github.com/coderwhocode/wechaty-pay#readme",
"dependencies": {
"qrcode-terminal": "^0.12.0",
"request": "^2.88.0",
"wechaty": "^0.22.6"
},
"devDependencies": {
"check-node-version": "^3.2.0"
}
}
================================================
FILE: pay.js
================================================
const { Wechaty } = require('wechaty')
const request = require("request")
function onScan (qrcode, status) {
require('qrcode-terminal').generate(qrcode, { small: true }) // show qrcode on console
const qrcodeImageUrl = [
'https://api.qrserver.com/v1/create-qr-code/?data=',
encodeURIComponent(qrcode),
].join('')
console.log(qrcodeImageUrl)
}
function onLogin (user) {
console.log(`${user} login`)
}
function onLogout(user) {
console.log(`${user} logout`)
}
// sendPayment(0.01, 1562577831000)
function sendPayment (priceAmount, timestamp) {
console.log(priceAmount, timestamp);
// const options = {
// method: 'POST',
// url: 'https://api.callbackurl.com/callback',
// headers:
// {
// 'content-type': 'application/json',
// token: 'usertoken-callback' },
// body: {
// price_amount: priceAmount,
// timestamp: timestamp
// },
// json: true
// };
// request(options, function (error, response, body) {
// if (error) throw new Error(error);
// });
}
// 消息来自 “微信支付”,信息格式为“微信支付收款0.01元”
async function onMessage (msg) {
if (msg.age() > 300) {
// console.log('Message discarded because its TOO OLD(than 5 minute)')
return
}
const contact = msg.from()
const text = msg.text()
const msgDate = msg.date()
if ( msg.type() !== bot.Message.Type.Attachment
&& !msg.self()
) {
// console.log('Message discarded because it does not match Payment Attachment')
return
}
if ( contact.name() !== '微信支付'
) {
// console.log('Message is not from wechat pay - from ', contact.name())
return
}
const strs = text.split('元')
if (strs.length >= 1) {
const str= strs[0]
const strs2 = str.split('微信支付收款')
if (strs2.length >= 1) {
const priceStr = strs2[1]
sendPayment(parseFloat(priceStr), msgDate.getTime())
}
}
}
const bot = new Wechaty()
bot.on('scan', onScan)
bot.on('login', onLogin)
bot.on('logout', onLogout)
bot.on('message', onMessage)
bot.start()
.then(() => console.log('Starter Bot Started.'))
.catch(e => console.error(e))
gitextract_bcpk42yh/ ├── README.md ├── package.json └── pay.js
SYMBOL INDEX (5 symbols across 1 files)
FILE: pay.js
function onScan (line 4) | function onScan (qrcode, status) {
function onLogin (line 15) | function onLogin (user) {
function onLogout (line 19) | function onLogout(user) {
function sendPayment (line 24) | function sendPayment (priceAmount, timestamp) {
function onMessage (line 47) | async function onMessage (msg) {
Condensed preview — 3 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7K chars).
[
{
"path": "README.md",
"chars": 2289,
"preview": "# Wechaty Pay - 让线上没有难做的生意\n\n## TLDR\n本文主要面对没有营业执照,想使用微信或支付宝在线收款的中小企业或者个人开发者,日收入在5K以下(菠菜类或者想偷税者请绕道)。\n\n自从使用了Wechaty,资金及时到账,"
},
{
"path": "package.json",
"chars": 767,
"preview": "{\n \"name\": \"wechatpay\",\n \"version\": \"0.1.0\",\n \"description\": \"Personal Payment Solution\",\n \"main\": \"pay.js\",\n \"engi"
},
{
"path": "pay.js",
"chars": 2125,
"preview": "const { Wechaty } = require('wechaty')\nconst request = require(\"request\")\n\nfunction onScan (qrcode, status) {\n require("
}
]
About this extraction
This page contains the full source code of the coderwhocode/wechaty-pay GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3 files (5.1 KB), approximately 2.0k tokens, and a symbol index with 5 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.