700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 实现微信公众号自动回复验证码功能

实现微信公众号自动回复验证码功能

时间:2019-09-15 14:25:43

相关推荐

实现微信公众号自动回复验证码功能

官网开发文档:https://developers./doc/offiaccount/Getting_Started/Getting_Started_Guide.html

不过上面开始的简单服务器搭建都是python做的。

注册一个自己的微信公众号登陆微信公众平台,微信公众平台 - 开发 - 基本配置,开启公众号开发者功能,获取AppID和AppSecret,配置服务器。官网提供的是python的方式配置服务器。

//java开发的后端直接return接收的echostr字符串@GetMapping("/weixin")public String checkSignature(String echostr,String signature,Long timestamp,Long nonce){System.out.println("echostr: " + echostr);System.out.println("signature: " + signature);System.out.println("timestamp: " + timestamp);System.out.println("nonce: " + nonce);return echostr;}

开启服务接收消息的功能。开启功能之后,给公众发送的消息会议下面服务器地址post请求的方式将xml消息数据包填写在url上面。

<!--发送到服务器的消息格式为text/xml--><xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>1348831860</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[this is a test]]></Content><MsgId>1234567890123456</MsgId><MsgDataId>xxxx</MsgDataId><Idx>xxxx</Idx></xml>

//实体类接收消息package com.test.verification_code.pojo;import javax.xml.bind.annotation.XmlElement;import javax.xml.bind.annotation.XmlRootElement;import java.io.Serializable;@Data@XmlRootElement(name = "xml")public class ReceiveMessage implements Serializable {private static final long serialVersionUID = 1L;@XmlElement(name = "ToUserName")private String ToUserName;@XmlElement(name = "FromUserName")private String FromUserName;@XmlElement(name = "CreateTime")private Long CreateTime;@XmlElement(name = "MsgType")private String MsgType;@XmlElement(name = "Content")private String Content;@XmlElement(name = "MsgId")private Long MsgId;@XmlElement(name = "MsgDataId")private Long MsgDataId;@XmlElement(name = "Idx")private Long Idx;}

被动回复消息实体类准备

<!---被动回复消息格式--><xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[你好]]></Content></xml>

//回复消息的实体类,可以修改以下toString方法格式为xml的格式即可@XmlRootElement(name = "xml")public class SendMessage implements Serializable {private static final long serialVersionUID = 1L;@XmlElement(name = "ToUserName")private String ToUserName;@XmlElement(name = "FromUserName")private String FromUserName;@XmlElement(name = "CreateTime")private Long CreateTime;@XmlElement(name = "MsgType")private String MsgType;@XmlElement(name = "Content")private String Content;@Overridepublic String toString() {return "<xml>" +"<ToUserName>" + ToUserName + "</ToUserName>" +"<FromUserName>" + FromUserName + "</FromUserName>" +"<CreateTime>" + CreateTime + "</CreateTime>" +"<MsgType>" + MsgType + "</MsgType>" +"<Content>" + Content + "</Content>" +"</xml>";}}

service准备,用redis缓存验证码,设置过期时间5分钟

@Servicepublic class CodeServiceImpl implements CodeService {@Autowiredprivate RedisTemplate<String,Object> redisTemplate;public String getCode(String key){Object result = redisTemplate.opsForValue().get(key);if (result == null){return null;}return result.toString();}public void createCode(String key,Object code){redisTemplate.opsForValue().set(key,code,5, TimeUnit.MINUTES);}}

controller处理接收的消息,被动回复消息

//注意接收的数据类型为text/xml,不是application/xml,如果写成了application/xml会出现下图错误。@PostMapping(value = "/weixin",consumes = "text/xml",produces = "text/xml")public String getMessage(@RequestBody ReceiveMessage receiveMessage){System.out.println(receiveMessage);if (receiveMessage.getContent().equals("验证码")){String code = codeService.getCode(receiveMessage.getToUserName());if (code == null){code = CodeUtils.getCode(4);codeService.createCode(receiveMessage.getToUserName(),code);}System.out.println("验证码:" + code);SendMessage sendMessage = new SendMessage();sendMessage.setContent("验证码是: " + code + ",有效期5分钟");sendMessage.setCreateTime(receiveMessage.getCreateTime());sendMessage.setFromUserName(receiveMessage.getToUserName());sendMessage.setToUserName(receiveMessage.getFromUserName());sendMessage.setMsgType("text");return sendMessage.toString();}return "success";}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。