微信公众号开发之获得素材列表
微信公众号开发之获得素材列表
对于获得公众号的素材列表首先需要阅读微信开发者手册
开发准备工具
测试公众号
内网穿透HTTP地址(微信对本地服务的通信对一些,公众号信息的获取不需要)
具体参考:
https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QgOcoCTL-1625189967278)(C:\Users\wang\AppData\Roaming\Typora\typora-user-images\image-20210630113832423.png)]
微信获得素材列表接口:https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN
需要同过post方法去向微信接口发送下列数据
{"type":TYPE,"offset":OFFSET,"count":COUNT
}
其中最为重要的是微信Access_Token的获得
access_token是微信公众号的全局权限令牌因为它两小时刷新一次所以我们只能将其存储(数据库,缓存并且设置时间戳)
access_token封装实体类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.Date;@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Token {private Date date;//获得时间private String accessToken;//令牌private int expiresIn;//微信设置的access_token有效时间
}
access_token调用工具类
import com.alibaba.fastjson.JSONObject;
import com.test.weixindemo.Pojo.Token;import com.test.weixindemo.Pojo.Url;
import com.test.weixindemo.mapper.TokenMapper;
import com.test.weixindemo.mapper.UrlMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@Component
public class TokenUtil {@Autowiredprivate TokenMapper ats;private static TokenMapper accessTokenService;@Resourceprivate UrlMapper urlMapper;private static UrlMapper urlService;@PostConstructpublic void init(){accessTokenService = ats;urlService=urlMapper;}public static String getToken() throws ParseException {Token accessToken = accessTokenService.checkDate(7200);//上次创建的时间Date creatTime = accessToken.getDate();//格式化时间SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");String date = sdf.format(creatTime);//将时间转换成毫秒值long lastTime = sdf.parse(date).getTime();//获取到现在的毫秒值long nowTime = System.currentTimeMillis();//如果时差大于2小时则重新获取access_tokenif (nowTime - lastTime > 60*60*1000) {Url urls= urlService.getUrl("access_token");String url= urls.getUrl();JSONObject jsonObject = CommonUtil.httpRequest(url,"GET",null);String access_token = (String) jsonObject.get("access_token");Integer ei = (Integer) jsonObject.get("expires_in");if (access_token != null) {Token token = new Token();Date d = new Date();token.setDate(d);token.setAccessToken(access_token);token.setExpiresIn(ei);accessTokenService.updateToken(token);}}return accessTokenService.getToken();}
}
http交互工具类
import com.alibaba.fastjson.JSONObject;
import javax.net.ssl.HttpsURLConnection;
import java.io.*;
import java.net.URL;
import java.nio.charset.StandardCharsets;
public class CommonUtil {public synchronized static JSONObject httpRequest(String requestUrl ,String requestMethod,String outputStr) {JSONObject jsonObject = null;StringBuilder buffer = new StringBuilder();try {URL url = new URL(requestUrl);HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();httpUrlConn.setDoOutput(true);httpUrlConn.setDoInput(true);httpUrlConn.setUseCaches(false);httpUrlConn.setRequestMethod(requestMethod);if (null != outputStr) {OutputStream outputStream = httpUrlConn.getOutputStream();// 注意编码格式outputStream.write(outputStr.getBytes(StandardCharsets.UTF_8));outputStream.close();}// 将返回的输入流转换成字符串InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}bufferedReader.close();inputStreamReader.close();// 释放资源inputStream.close();inputStream = null;httpUrlConn.disconnect();jsonObject = JSONObject.parseObject(buffer.toString());} catch (Exception e) {e.printStackTrace();}return jsonObject;}}
获得素材列表类
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.test.weixindemo.Pojo.Material;
import com.test.weixindemo.Pojo.MaterialParam;
import com.test.weixindemo.mapper.UrlMapper;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;@Componentpublic class GetMaterial {@Resourceprivate UrlMapper urlMapper;private static UrlMapper urlService;@PostConstructpublic void init(){urlService=urlMapper;}public static List<Material> getMaterial(String accessToken,String type, int offset, int count) {String MATERIAL =urlService.getUrl("Material").getUrl() ;List<Material> list = new ArrayList<Material>();//定义实体集合String outputStr = "";String requestUrl = MATERIAL.replace("ACCESS_TOKEN", accessToken);MaterialParam materialParam = new MaterialParam();materialParam.setCount(count);materialParam.setOffset(offset);materialParam.setType(type);JSONObject jsonObject = new JSONObject();jsonObject = (JSONObject) JSONObject.toJSON(materialParam);outputStr = jsonObject.toJSONString();jsonObject = CommonUtil.httpRequest(requestUrl, "POST", outputStr);if (null != jsonObject) {JSONArray jsonArray = jsonObject.getJSONArray("item");for (int i = 0; i < jsonArray.size(); i++) {JSONObject json = (JSONObject) jsonArray.get(i);json = json.getJSONObject("content");JSONArray arr = json.getJSONArray("news_item");json = (JSONObject) arr.get(0);Material material = new Material();String title = json.getString("title");String author = json.getString("author");String digest = json.getString("digest");String thumb_media_id = json.getString("thumb_media_id");String url = json.getString("url");String content = json.getString("content");material.setTitle(title);material.setAuthor(author);material.setDigest(digest);material.setThumb_media_id(thumb_media_id);material.setUrl(url);material.setContent(content);material.setShow_cover_pic(1);list.add(material);}}return list;}
}
);
material.setUrl(url);
material.setContent(content);
material.setShow_cover_pic(1);
list.add(material);
}
}
return list;
}
}
在本次测试中所有接口均写入数据方便调用,修改。
微信公众号开发之获得素材列表相关推荐
- 微信公众号导入失败服务器错误代码,微信公众号开发之上传素材文件errcode:41005错误...
前言 前段时间,因为腾讯云的服务器需要重装呐,原以为本地有一份微信公众号开发的代码,然后就没有备份直接重装了服务器,WTF,结果发现本地并没有备份.(给自己的蠢死了!!) "errcode& ...
- 微信公众号开发教程[012]-素材管理
一.关于图文消息,我的理解 我理解中,普通<img><iframe>等标签的src属性,可以跨域,哪里的图片都行.但是公众号的聊天会话界面,放的图片,语音,图文 ...
- 微信公众号开发--新增临时素材
在近日的微信公众号开发中,遇到临时素材的提交 遇到错误码45001 显示媒体文件不存在,返回代码打印了文件路径,发现路径没有任何问题,继续重来还是45001. 过了会弹出api访问超过当日次数,更郁闷 ...
- 微信公众号开发之获取用户列表和用户基本信息(五)
一.获取用户列表 公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的)组成.一次拉取调用最多拉取10000个关注者的Op ...
- php拉取公众号所有关注的人,微信公众平台开发获取关注者列表
本文介绍在微信公众平台上如何使用高级接口开发获取关注者列表的功能. 一.接口介绍 公众号可通过本接口来获取帐号的关注者列表,关注者列表由一串OpenID(加密后的微信号,每个用户对每个公众号的Open ...
- 微信公众号开发上传图文素材带有卡片小程序报错:errcode=45166,errmsg = invalid content hint...
微信公众号开发自从支持允许在群发图文中插入小程序,方便了小程序的运营及推广.最近在三方服务开发中,要支持图文素材插入小程序遇到了一个很是棘手的问题.官方给出的插入小程序的示例支持文字.图片.卡片.如下 ...
- 微信公众号开发(一)服务器及接口的配置
微信公众号开发(一)服务器及接口的配置 关于微信公众号中的订阅号和服务的区别这里不多加讨论,网上有很多资源可以搜到,这里直接进入正题,如果是个人开发者,这里建议使用测试号进行开发学习,测试号的权限要比 ...
- 微信公众号开发--图文消息发送不显示图片的问题
使用微信公众号接口实现图文消息推送,遇到问题,不显示图片,且content内容中有英文双引号也不行 1.微信不允许有外链的图片,所以会自动过滤 2."双引号格式问题. 前端把双引号传给后端后 ...
- 微信公众号开发(七)发送客服消息
微信公众号开发(七)发送客服消息 当用户和公众号产生特定动作的交互时(具体动作列表请见下方说明),微信将会把消息数据推送给开发者,开发者可以在一段时间内(目前修改为48小时)调用客服接口,通过POST ...
- 微信公众号开发系统入门教程(公众号注册、开发环境搭建、access_token管理、Demo实现、natapp外网穿透)
由于图片图床问题,文章部分图片无法预览,暂时把该文章迁移至简书,给大家带来麻烦,抱歉了. 感兴趣的小伙伴可参考:https://www.jianshu.com/p/cc1b1050b5b4 Autho ...
最新文章
- liunx系统mysql全量备份和增量备份
- OpenCV学习笔记(一):图像显示
- ubuntu 创建桌面快捷方式
- 页面加载时间如何影响你的收益?
- C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(一)让物体动起来①
- 用X264编码以后的H264数据
- Cknife流量分析
- WMS仓库仓储管理系统源码
- 安装bzz1.0教程
- 军犬舆情热点:最高检明确正当防卫标准;ofo戴威称勇敢活下去
- 2018.3.4 st
- python 什么是原类_python中什么是类
- 介绍一个可以把安卓手机屏幕投影到电脑上的办法
- 申请苹果开发者公司账号和邓白氏编码全流程
- 语音合成 GAN Vocoders 总览
- Java变量概述与使用
- 微信小程序商城源码学习
- 您的连接不是私密连接 thisisunsafe
- 【工业4.0系列谈之五】建设智能工厂 可从这6个方面着手
- 爬取网易云音乐所有歌单信息