1申请微信测试号
1.1 测试号管理
使用微信扫码登录,自动生成APPID
和APPsecret
,设置URL
和token
测试号管理页面:
用uTools
工具进行内网穿透该工具会自动最小化到任务栏,同时按下ALT+空格唤出
点击连接,并复制地址
将该地址写入上面测试号管理里面的URL
在springboot
工程里面的yml配置文件中填入配置好的APPID
APPsecret
和token
1.2 初始化菜单
controller
配置访问路径
启动springboot
项目,重新关注一下测试号,即可发现自定义菜单已被初始化
2 微信返回多条消息
需求:点击早晚安打卡,返回消息,属于自定义菜单事件
2.1 发送一条消息
在MenuHandler里处理
返回图片
return WxMpXmlOutMessage.IMAGE()
.mediaId(media_id)
.fromUser(wxMessage.getToUser())
.toUser(wxMessage.getFromUser())
.build();
返回文本
return WxMpXmlOutMessage.TEXT().content("早安" + "\n\n" + threeUrl)
.fromUser(wxMessage.getToUser()).toUser(wxMessage.getFromUser())
.build();
这里只用返回图片和文本即可,微信还支持返回语音,视频,图文等内容,详情可见官方文档
2.2 发送多条消息
这种方式只能返回一条消息,如果有返回多条消息的需求,就需要用到客服推送,官方文档
另外值得一提的是,微信发送图片,语音等信息,必须要先上传至微信服务器,微信会返回一个media_id
,在发送给用户消息的时候,通过该media_id
完成对图片等文件的发送。
Java上传图片至微信服务器示例
官方调用微信接口地址为:https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=ACCESS_TOKEN 必须为post请求
在handler里调用微信接口,发送post请求,示例代码
String uploadResult = HttpRequest.post(uploadUrl) //微信接口地址
.header(Header.CONTENT_TYPE, content_type)//头信息,多个头信息多次调用此方法即可
.header(Header.CONNECTION, connection)
.header(Header.USER_AGENT, user_agent)
.form(paramMap)//表单内容 这里是一张图片
.timeout(20000)//超时,毫秒
.execute().body();
返回的uploadResult
信息如下:
{"type":"image","media_id":"8JbJTT4d4Y2YDmLPB3AFY7D4M8cE_UlsUv6Z5wdkNn3dEOA8cRh9F7zSnDeejgIZ","created_at":1602572094,"item":[]}
是String
类型的,先使用JSON.parseObject()
方法把字符串转为Map
,再通过get("media_id")
去获取到media_id
再调用微信客服发消息
String kfStr = HttpRequest.post(kfUrl) //接口地址
.body(kfJson) // json格式的字符串
.execute().body();
kfJson示例
{
"touser":"oeR6H6KBJPAXo7s1tQdU5lOJ_fHo",
"msgtype":"image",
"image":
{
"media_id":"8JbJTT4d4Y2YDmLPB3AFY7D4M8cE_UlsUv6Z5wdkNn3dEOA8cRh9F7zSnDeejgIZ"
}
}
运行效果