本文的内容
显示
1.
1.配置微信微信官方账号
2.
2.编写服务器
3.
3.处理业务逻辑
3.1.
推荐阅读
顾名思义,我们在这里做订阅号机器人,大致是一个流程:微信官方账号接收用户消息——微信平台向我们的服务器发送消息——我们的服务器对消息进行处理——将处理结果返回给微信平台——微信平台向用户发送内容。
基于这样一个大前提,有以下步骤:
1.填写服务器配置,接收微信平台发送的内容。
2.开发服务器并验证服务器地址的有效性。
3.处理特定的业务逻辑
1.配置微信微信官方账号
你必须先有订阅号,然后在订阅号后台点击开发者-基本配置进入以下页面,点击确定。
然后进入配置页面,我们会一一讲解配置。
开发者ID,开发者调用的唯一符号,需要在调用接口时传递。
开发者密码非常重要,必须保存在您自己的服务器上以验证安全性。
服务地址,这是我们用来接收微信平台转发的用户消息的服务的地址。
Token,用户收到信息时,验证请求是否来自微信平台。
用于加密消息以防止被拦截。如果6设置为明文模式,则不需要此配置。
是否加密传输消息?
本期只接收图片消息,验证后回复,所以只需要配置3和4。
是我们具体的服务器地址,路径是weixin/receive,下面具体的代码部分会详细解释。
令牌可以随意生成一个UUID。
随机生成,后面调用API的话会用到。
这时如果你点击提交,会提示验证失败,因为你还没有部署API,这里配置好了我们就开始写代码。
2.编写服务器
在服务器端使用现有的轮子非常简单。因为是spring-boot项目,所以直接引入现成的微信启动器,还必须添加一个资源库。这是基于Github自己的仓库。
developer-weapons-repository https://raw . githubusercontent . com/developer-weapons/repository/master com . github . developer . weapons微信-spring-boot-starter1.2.6
不过写两个接口,一个第一次绑定微信后台验证,一个以后接收消息/weixin/receive。
将准备好的令牌配置到application.properties,然后将其注入控制器。大概的验证码如下。如果签名验证成功,则返回echostr,视为通信的标志,如果验证失败,则返回error。
@自动连线
私有微信官方服务微信官方服务;
@Value('${weixin.token} ')
私有字符串标记;
@ request mapping(value='/weixin/receive 'method=RequestMethod。获取)
公共无效接收(
@RequestParam(value='signature ')字符串签名,
@RequestParam(value='timestamp ')字符串时间戳
@RequestParam(value='nonce ')字符串nonce,
@RequestParam(value='echostr ')字符串echostr,
HttpServletResponse响应)引发IOException {
boolean valid=wechatoofficialservice . is valid(签名、时间戳、nonce、令牌);
PrintWriter writer=response . getwriter();
如果(有效){
writer . print(echostr);
}否则{
writer.print('error ')。
}
writer . flush();
writer . close();
}
写到这里就可以找一个服务器部署了,点击验证。此时点击提交直接成功。点击启用后生效。生效后,您原先配置的自动回复将生效,请谨慎操作。
3.处理业务逻辑
业务逻辑是先接收消息,下面是接收消息的代码。
@ request mapping(value='/weixin/receive 'method=RequestMethod。帖子)
公共无效接收(
@RequestParam(value='signature ')字符串签名,
@RequestParam(value='timestamp ')字符串时间戳
@RequestParam(value='nonce ')字符串nonce,
HttpServletRequest请求,
HttpServletResponse响应)引发IOException {
request . setcharacterencoding(' UTF-8 ');
response . setcharacterencoding(“UTF-8”);
boolean valid=wechatoofficialservice . is valid(签名、时间戳、nonce、令牌);
PrintWriter writer=response . getwriter();
如果(!有效){
writer.print('error ')。
writer . flush();
writer . close();
返回;
}
尝试{
map map=wechatoofficialservice . tomap(request . getinputstream());
if (map.get('MsgType ')。等于(' image '){
string msg=officilautoreplymessage . build()。withContent('收到的图片链接是:' map.get('PicUrl '))。withMsgtype(MessageTypeEnum。正文)。with from username(map . get(' ToUserName '))。with touser name(map . get(' from username '))。to XML();
writer . print(msg);
writer . flush();
writer . close();
返回;
}
} catch(异常e) {
log.error('WeixinController接收错误'e);
}
writer.print('成功');
writer . flush();
writer . close();
}
第一步,验证消息是否来自微信平台,然后使用wechatOfficialService.toMap方法分析接收到的消息的内容。目前判断比较简单,直接判断是不是图片消息,然后把图片的URL返回给发消息的用户。效果图如下
那么接下来就是最关键的一步,如何识别黄色,这个具体逻辑可以参考这篇文章《通过UCloud AI内容审核UAI-Censor免费搭建鉴黄平台教程》,现在我们直接把相关代码放上去。
按照上面的文章修改代码后,结果如下。具体的publicKey和privateKey供自己参考。
if (map.get('MsgType ')。等于(' image '){
string RES=check service . check(public key,privateKey,map . get(' PicUrl '));
officilautoreplymessage官方lAutoReplyMessage=
OfficialAutoReplyMessage.build()。withMsgtype(MessageTypeEnum。正文)。with from username(map . get(' ToUserName '))。with touser name(map . get(' from username '));
if (StringUtils.equals('禁止'res)) {
官方消息。有内容(‘兄弟,你的图有问题’);
}否则{
官方消息。有内容(‘骚年,你的图刚刚好’);
}
writer . print(officilautoreplymessage . to XML());
writer . flush();
writer . close();
返回;
}
最终的效果如下
那么你会造自己的探黄机器人吗?获取项目源代码(测试订阅号“面试Q”,订阅号“面试Q”只能用于学习,后期会下线。如果需要体验,请尽快。)
来源:代码制作者的笔记
西部数码代理(chenqinet.cn)是工信部批准的正规老牌云服务商,拥有ISP、云牌照、IDC、CDN全业务资质。自成立以来,二十多年来一直专注于域名注册,虚拟主机,云服务器,企业邮箱,企业网站建立等互联网基础服务!
公司开发的云计算平台以便捷、高效、高性价比、意想不到的售后优势占领市场,跻身国内前三的接入服务商,为国内超过50万家网站提供高速稳定的托管服务!先后荣获中国高新技术企业、中国优秀云计算服务商、中国十大IDC企业、中国最受欢迎云服务商等称号!
目前西部数码代理高性能云服务器在售,最低仅售48元!
http://zhuji.chenqinet.cn/cloudhost/