第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > 微信接口连接和简单自动回复功能

微信接口连接和简单自动回复功能

时间:2021-08-24 19:48:13

相关推荐

微信接口连接和简单自动回复功能

## 微信接口连接和自动回复功能

先创建两个实体,用来接收微信(测试号或公众号)的消息和发送给微信(测试号或公众号)的消息。

接收微信发送消息的实体(InMsgEntity )

import lombok.Data;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlRootElement;@Data //使用lombok的@Data注释功能,可以自动生成get,set,toString等方法@XmlRootElement(name="xml")//使用这个和下面这个注释可以在生成微信识别的xml结尾格式@XmlAccessorType(XmlAccessType.FIELD)public class InMsgEntity {// 文本消息private String ToUserName; // 开发者微信号private String FromUserName; // 发送方帐号(一个OpenID)private Long CreateTime; // 消息创建时间 (整型)private String MsgType; // 消息类型,文本为textprivate String Content; // 文本消息内容private Long MsgId; // 消息id,64位整型private String PicUrl; // 图片链接(由系统生成)private String MediaId; // 图片消息媒体id,可以调用获取临时素材接口拉取数据private String Event;//事件类型,subscribe(订阅)、unsubscribe(取消订阅)在这里插入代码片private String EvenKey;//事件菜单值}

发送给微信的实体(OutMsgEntity )

import lombok.Data;import javax.xml.bind.annotation.XmlAccessType;import javax.xml.bind.annotation.XmlAccessorType;import javax.xml.bind.annotation.XmlElementWrapper;import javax.xml.bind.annotation.XmlRootElement;@Data@XmlRootElement(name="xml")@XmlAccessorType(XmlAccessType.FIELD)public class OutMsgEntity {// 文本消息private String ToUserName; // 用户的openIdprivate String FromUserName; // 测试号帐号(一个OpenID)private Long CreateTime; // 消息创建时间 (整型)private String MsgType; // 消息类型,文本为textprivate String Content; // 文本消息内容@XmlElementWrapper(name="Image")private String[] MediaId; // 图片消息媒体id,可以调用获取临时素材接口拉取数据//图文信息private Integer ArticleCount;//图文列表明细@XmlElementWrapper(name="Articles")private ArticleItem[] item;}

controller层代码

这个controller是连接微信的,一般都是要通过排序和加密来验证的,这里我就不写了。

正确的验证方式说明如下():

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

1)将token、timestamp、nonce三个参数进行字典序排序

2)将三个参数字符串拼接成一个字符串进行sha1加密

3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

详细内容请查看官方微信开发文档

@RequestMapping(value="/WeChat.do", method=RequestMethod.GET)@ResponseBodypublic String wechat(String signature,String timestamp,String nonce,String echostr){log.info("连接成功!");return echostr; }

连接成功之后,就可以进行简单的自动回复功能了。

说明:连接测试走的方式get方式,在微信测试号中输入内容走的是post方式,所以这两种方式就能实现简单的连接和交互。

下面这个controller能说实现的功能说明:

1、当关注测试号的时候,会自动推送欢迎功能;

2、用户在测试号页面输入什么内容,系统就会回复什么内容;

3、用户在测试号页面回复“1”,或“2”关键字,会自动回复已写好的文字内容。

@RequestMapping(value="/WeChat.do", method=RequestMethod.POST)@ResponseBodypublic Object returnMessage(@RequestBody InMsgEntity inMsgEntity){log.info("---进入WeChatController的returnMessage方法");OutMsgEntity outMsgEntity =new OutMsgEntity();//发送方outMsgEntity.setFromUserName(inMsgEntity.getToUserName());log.info("发送方姓名:inMessageByWeChat.getToUserName():{}", inMsgEntity.getToUserName());//接收方outMsgEntity.setToUserName(inMsgEntity.getFromUserName());log.info("接收方姓名:inMessageByWeChat.getFromUserName():{}", inMsgEntity.getFromUserName());//消息创建时间outMsgEntity.setCreateTime(new Date().getTime());//判断传过来的消息类型String type= inMsgEntity.getMsgType();String show=null;if(type.equals("text")){//消息类型outMsgEntity.setMsgType("text");//设置消息内容outMsgEntity.setContent(inMsgEntity.getContent());log.info("---接收到的信息:inMessageByWeChat.getContent():{}", inMsgEntity.getContent());if(inMsgEntity.getContent().contains("2")){show="人生是场表演,它以生活为舞台,以时间为布景,"+ "以情感起伏变化为线索,以我们经历的人与事为情节,以精彩与成功为高潮。"+ "你哭也好,笑也罢,愿意也好,被动也罢,这是一场你无法拒绝的表演。有时,"+ "我们演饰了别人,丢失了自己,成了自己舞台上的配角。去做属于自己的主角吧,"+ "你的表演,谁都无可替代。";}else if(inMsgEntity.getContent().contains("1")){show="你回复1我就给你回复1,哈哈!";}}else if(type.equals("image")){//消息类型outMsgEntity.setMsgType("image");//设置图片性关系outMsgEntity.setMediaId(new String[]{inMsgEntity.getMediaId()});}else if(type.equals("event")){//判断事件的类型if(inMsgEntity.getEvent().equals("subscribe")){//回复普通文本消息//outMessageByWeChat.setContent("欢迎关注!!!{微笑}");//outMessageByWeChat.setMsgType("text");//回复图文消息outMsgEntity.setMsgType("news");//设置图文个数outMsgEntity.setArticleCount(1);//设置图文明细列表ArticleItem item = new ArticleItem();item.setTitle("欢迎关注本微信测试号");item.setPicUrl("/uploads/allimg/04/001849-1591292fcb.jpg");item.setDescription("壁纸欢迎关注本测试号!");item.setUrl("/tupian/25942.html");outMsgEntity.setItem(new ArticleItem[]{item});}}if(show!=null){outMsgEntity.setContent(show);log.info("---打印回复类型数据,outMessageByWeChat.getContent():{}", outMsgEntity.getContent());}log.info("---退出WeChatController的returnMessage方法---");return outMsgEntity;}

下面是效果测试

代码效果就这样了。

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