WeixinMsgController 类的 processInTextMsg() 方法用来处理接收到的文本消息,我们可以在这个方法里保存 openid 和 token,成功后提示读者:恭喜您已经解锁博客全部文章~
protected void processInTextMsg(InTextMsg inTextMsg) { String msgContent = inTextMsg.getContent().trim(); if ("2048".equals(msgContent)) { } else if (msgContent.length() == 6) { Weixin param = new Weixin(); param.setOpenid(inTextMsg.getFromUserName()); param.setToken(msgContent); param.save(); OutTextMsg outMsg = new OutTextMsg(inTextMsg); outMsg.setContent("恭喜您已经解锁博客全部文章~"); render(outMsg); } else { renderDefault(); } }3)响应前端的定时查询
WeixinController 类的 index() 方法用来响应前端的定时查询。
public void index() { // 跨域 getResponse().addHeader("Access-Control-Allow-Origin", "*"); String token = getPara("token"); String openid = service.findByToken(token); if (openid == null || "".equals(openid)) { renderJson("locked", true); } else { renderJson("locked", false); } }①、getResponse().addHeader("Access-Control-Allow-Origin", "*") 这行代码可以解决跨域的问题。
②、根据 token 查询读者是否已经关注了公众号,关注过的话返回 false,否则返回 true。
4)读者取消关注订阅号后删除记录
WeixinMsgController 类的 processInFollowEvent() 方法用来处理接收到的关注/取消关注事件,如果取消关注的话,根据 openid 删除记录。
protected void processInFollowEvent(InFollowEvent inFollowEvent) { if (InFollowEvent.EVENT_INFOLLOW_SUBSCRIBE.equals(inFollowEvent.getEvent())) { else if (InFollowEvent.EVENT_INFOLLOW_UNSUBSCRIBE.equals(inFollowEvent.getEvent())) { log.debug("取消关注:" + inFollowEvent.getFromUserName()); service.deleteByOpenid(inFollowEvent.getFromUserName()); } }04、注意事项
后端的工作完成后,就需要将其打包运行到服务器上了。
1)打包项目
命令行进入项目根目录,然后运行 mvn clean package 即可打包。
打包完成后,可以在 target 目录下看到以下内容。
tar.gz 文件为 target/jfinal_weixin_demo_for_maven-release/jfinal_weixin_demo_for_maven 目录的压缩包,方便上传至服务器。
2)将 tar.gz 文件上传至服务器,并启动服务。
上传工具可以使用 FileZilla,上传成功后可以通过 tar -xzvf xxx.tar.gz 命令进行解压。然后进入 jfinal_weixin_demo_for_maven 目录下,输入 ./jfinal.sh start 即可启动服务。
3)配置 Nginx
由于服务器上 80 端口已经被占用,所以我们需要 Nginx 反向代理一下。简单介绍一下 Nginx(发音同 engine x),它是异步框架的网页服务器,也可以用作反向代理、负载平衡器和 HTTP 缓存。
打开 nginx.conf 文件,增加以下内容。
location ^~ /jfinal/ { proxy_pass :8089/; rewrite :8089/ last; }配置之前,假如域名是 itwanger.com,访问该服务的地址为::8089。配置之后,访问该服务的地址就可以是:。这样请求的 URL 中就不需要指定端口了——有没有感觉到 Nginx 的一丝牛逼之处?
4)启用微信订阅号服务器配置
一切准备就绪后,就可以进入微信订阅号后台,填写服务器地址、令牌,然后启用服务器配置了。
5)实际效果
可能大家想知道效果如何,这里截几张图大家看看。这个功能已经在小白学堂(itmind.net)上线了,感兴趣的可以进去体验一把,测到 bug 有奖励哟。
首先进去文章是这个样子的:
然后关注了订阅号,发送了口令:
于是同时,博客上的文章也解锁了!
牛掰!
05、后记一周时间,我几乎把所有的事情都滞后了,但总算是把这个方案落地了!内心还是非常激动的。再次感谢崔庆才大佬的思路,也为自己顽强的斗志点个赞!