监听个人微信收款,实现扫码充值

监听个人微信收款,实现扫码充值

之前开发的博客论坛,随着用户量不断增加,服务器成本越来越大

想着实现会员制回点服务器成本,经过一番研究,发现个人是不能开通微信的收款功能的

参考了大部分个人站点,都是使用第三方卡密平台进行发卡

我也去某密注册了一个账号,因为手续费、提现规则等各种原因,还是放弃了...

业务场景分析:

用户在站点上付款 -----> 我监听到付款金额 -----> 给用户开通会员

重要的就是如何监听付款,有两种解决方案:

监听GUI:性能消耗巨大、窗口位置会影响监听结果

HOOK微信:实现难度大...

网上搜HOOK框架,一搜一大把,但是都需要付费购买...(也理解,毕竟知识付费的时代...)

不负有心人,最终还是找到个完全免费且稳定的【兔TO微信框架】那就开干!!!

下载框架:https://wwjx.lanzout.com/i4GrB1lek93e

框架具体如何使用参考这篇文章:https://blog.csdn.net/Some_Sunshine/article/details/135660550

废话不多数,直接运行框架,启动微信

用Flask搭建一个HTTP服务,用来监听微信的消息

from flask import Flask, request

app = Flask(__name__)

@app.route("/msg", methods=["POST"])

def recv_msg():

"""监听微信消息"""

# 获取消息

msg = request.get_json()

print(msg)

return "success"

if __name__ == '__main__':

app.run(port=9000)

保存自己的收款码,让小号付个0.01元

收到款后 “服务通知” 或者 “微信支付” 中就会有消息

再来看看监听到的消息是什么,是一段xml,找个工具解析一下这段xml看看有什么可以用的数据

这里可以提取到收款金额,记住这里!

只知道金额是不够的,还要知道是哪个用户付款的,可以让用户付款时备注一下账号

这次付款前带上备注,看看监听到的消息中有没有相关信息

这里就很明显的看到备注信息了

再次解析xml,可以看到,备注信息在lines节点下的第一个子节点中

这里要注意:如果付款时没备注的话,lines下的子节点是没有备注信息的,所以要注意处理一下

定位到这2个地方之后就可以开始撸代码了,完整代码如下:

from flask import Flask, request

import re

import requests

import xml.etree.ElementTree

app = Flask(__name__)

def recharge(account, amount):

"""给后端发送充值请求"""

print(f"尝试为“{account}”开通权限")

# 发送请求

try:

url = "http://v1.xxx.cn/api/recharge"

result = requests.post(url, data={

"account": account,

"amount": amount,

"secret": "xxxxxxxxx", # 请求密钥,防止恶意请求

}).json()

if result["code"] == 200:

print("开通成功!")

else:

print(f'开通失败,原因:{result["msg"]}')

except:

print("发送请求错误")

@app.route("/msg", methods=["POST"])

def recv_msg():

"""监听微信消息"""

# 获取消息

msg = request.get_json()

# print(msg)

# 如果消息发送者不是自己、消息类型是49、发送者是“消息通知”或者“微信支付”

if msg["is_self_msg"] == 0 and msg["msg_type"] == 49 and msg["wx_id"] in ["notifymessage", "gh_3dfda90e39d6"]:

# 提取消息内容

content = msg["content"]

# 判断是不是收款码的通知

if re.search(r'<!\[CDATA\[微信支付收款.+元.*]]>', content):

# 解析xml

root = xml.etree.ElementTree.fromstring(content)

# 提取收到的金额

amount = root.find(".//appmsg/mmreader/template_detail/line_content/topline/value/word").text[1:]

print(f"收到金额:{amount}")

# 提取备注信息

des = ""

lines = root.find(".//appmsg/mmreader/template_detail/line_content/lines")

for line in lines:

if line.find("./key/word").text == "付款方备注":

des = line.find("./value/word").text

print(f"备注信息:{des}")

# 如果备注是邮箱

if re.match(r'^[\w\.-]+@[\w\.-]+\.\w+$', des):

# 向后端发送请求,开通权限

recharge(account=des, amount=amount)

return "success"

if __name__ == '__main__':

app.run(port=9000)

测试效果,完美!

这个框架只支持Windows,可以去某宝买个几十块钱1年的学生机、找个小号,一直挂着就行了

我用的是阿里99/年的学生机,2h2G3M,装的系统是winserver2012,贼流畅,实测1h2G也行

业务逻辑总结:

用户在网站点击充值按钮 -----> 后端返回个人收款码并标记此次动作为待付款 -----> 前端开始轮询扫码结果 -----> 用户扫码并填写备注付款 -----> 监听到收款消息 -----> 提取收款金额、备注信息,发送给后端 -----> 后端判断账号是否存在、金额是否正确 -----> 开通会员,标记为付款完成

相关推荐

日本最好用的20款化妆水,款款都是销量王!
365etb为什么关闭账号

日本最好用的20款化妆水,款款都是销量王!

06-27 👁️ 5560
Steam上GTA5应该买哪个?详尽攻略帮你选择最佳版本!
日本最好用的20款化妆水,款款都是销量王!
365etb为什么关闭账号

日本最好用的20款化妆水,款款都是销量王!

06-27 👁️ 5560
牦牛肉价格多少钱一斤?牦牛肉与普通牛肉有何区别?
口袋妖怪皮丘怎么进化
365etb为什么关闭账号

口袋妖怪皮丘怎么进化

06-27 👁️ 9863
抓手指游戏规则 逢3抓手游戏猴子和阿水的简短故事