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

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

先创建两个实体,用来接收微信(测试号或公众号)的消息和发送给微信(测试号或公众号)的消息。
接收微信发送消息的实体(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; // 消息类型,文本为text
	private 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; // 用户的openId
	private String FromUserName; // 测试号帐号(一个OpenID)
	private Long CreateTime; // 消息创建时间 (整型)
	private String MsgType; // 消息类型,文本为text
	private 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)
	@ResponseBody
    public 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)
	@ResponseBody
	public 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("http://pic.netbian.com/uploads/allimg/200604/001849-15912011292fcb.jpg");
			    item.setDescription("壁纸欢迎关注本测试号!");
				item.setUrl("http://pic.netbian.com/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;
	}

下面是效果测试
在这里插入图片描述
代码效果就这样了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值