跟朋友合作开发一个小项目,需要实现一个微信个人号机器人。他的首选语言是Java,基于一个码农的懒惰,我就选择了Kotlin作为我的开发语言(我们各自负责不同模块)。本身我对实现一个微信个人号SDK也是蛮有兴趣的,就没有使用第三方的轮子,着手使用Kotlin重新实现了一个网页版微信的SDK。
网页版微信消息处理流程
首先是分析微信网页版的消息处理流程:
- 获取UUID
- 下载二维码,等待扫码
- 获取登录认证信息
- 初始化微信应用
- 同步消息和获取对话列表
- 发送消息
二维码扫描问题
因为程序要放到服务器环境上面运行,而服务器上面并没有图形界面。二维码的处理就较为繁琐,为此参考kdepp/tty_qr.py 实现了Kotlin版本的二维码Terminal输出工具。
const val BLOCK = "MM"
const val BLACK = " "
/**
* 二维码输出工具
* */
class QRPrinter(private val img: BufferedImage) {
constructor(input: InputStream) : this(ImageIO.read(input))
private fun qrString(size: Int = 37, padding: Int = 3): String {
val builder = StringBuffer()
val times = img.width / (size + padding * 2)
(