有没有个人微信扫码收款的软件?
之前开发的博客论坛,随着用户量不断增加,服务器成本越来越大
想着实现会员制回点服务器成本,经过一番研究,发现个人是不能开通微信的收款功能的
参考了大部分个人站点,都是使用第三方卡密平台进行发卡
我也去某密注册了一个账号,因为手续费、提现规则等各种原因,还是放弃了...
业务场景分析:
用户在站点上付款 -----> 我监听到付款金额 -----> 给用户开通会员
重要的就是如何监听付款,有两种解决方案:
监听GUI:性能消耗巨大、窗口位置会影响监听结果
HOOK微信:实现难度大...
网上搜HOOK框架,一搜一大把,但是都需要付费购买...(也理解,毕竟知识付费的时代...)
不负有心人,最终还是找到个完全免费且稳定的【兔TO微信框架】那就开干!!!
下载框架:[1.0.2.0]兔TO微信框架.rar - 蓝奏云
框架具体如何使用参考这篇文章:使用兔TO框架,实现微信收发消息-CSDN博客
废话不多数,直接运行框架,启动微信
用Flask搭建一个HTTP服务,用来监听微信的消息
from flask import Flask, requestapp = 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, requestimport reimport requestsimport 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'<title><!\[CDATA\[微信支付收款.+元.*]]></title>', 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也行
业务逻辑总结:
用户在网站点击充值按钮 -----> 后端返回个人收款码并标记此次动作为待付款 -----> 前端开始轮询扫码结果 -----> 用户扫码并填写备注付款 -----> 监听到收款消息 -----> 提取收款金额、备注信息,发送给后端 -----> 后端判断账号是否存在、金额是否正确 -----> 开通会员,标记为付款完成
还没有任何评论,你来说两句吧