微信小程序开发记录(四)--消息回复图片
前面的消息推送中,只是回复文本消息,但是现实的业务中要求有图片回复,通过公众号二维码图片回复来实现关注公众号,或下载APP。回复公众号二维码图片,识别公众号二维码可以直接跳转到关联的公众号中。
消息回复图片–通过公众号二维码图片关注公众号
开发者不能直接把二维码图片发送到用户处,需要先将二维码图片上传到微信资源服务器上,上传成功后,微信会返给开发者一个media_id,这个就是该二维码图片在微信资源服务器上的id,开发者将id保存在redis数据库中,到时候回复用户,只需要将id放入返回的数据结构中,并将数据类型设为图片即可。
获取media_id
/**
* 微信小程序管理后台APPID
*/
@Value("${spring.wx.appId}")
private String AppId;
/**
* 微信小程序管理后台凭证密钥AppSecret
*/
@Value("${spring.wx.appSecret}")
private String AppSecret;
/**
* 微信小程序临时素材上传接口--"https://api.weixin.qq.com/cgi-bin/media/upload?access_token="
*/
@Value("${spring.wx.uploadTempMedia}")
private String uploadTempMedia;
/**
* redis图片分层文件夹名称
*/
private static final String weChatImageId="weChat_image_id:";
/**
* redis Token分层文件夹名称
*/
private static final String weChatAccessToken="weChat_access_token";
@Autowired
private RedisTemplate redisTemplate;
/**
* 方法--获取media_id
* @return String
*/
public String getImageId(String imageName){
//获取接口访问令牌
String media_id = null;
Boolean hasKey=redisTemplate.hasKey(redisFolderName+weChatImageId+imageName);
if(hasKey){
//有参数
media_id=(String)redisTemplate.opsForValue().get(redisFolderName+weChatImageId+imageName);
}else {
try{
//无参数-访问第三方接口重新获取,微信接口--临时素材上传
media_id= uploadFileToWeChat(imageName);
//redis新增WeChatImageId
redisTemplate.opsForValue().set(redisFolderName+weChatImageId+imageName, media_id, 2, TimeUnit.DAYS);