上节讲了调用微信公众平台获取Access token,有了Access token就可以进行平台接口测试了。
当然在此之前还需要自己的测试号来查看自己接口调用的效果。测试号申请如下:
网络异常,图片无法展示
|
进入测试号,里面有一个测试号二维码,手机扫码即可浏览测试号情况
网络异常,图片无法展示
|
这样就有了一个空白的测试公众号了
网络异常,图片无法展示
|
自定义菜单开发
参考微信接口文档可以看到按钮的类型有很多(click点击推事件、view跳转 URL、scancode_push:扫码推事件、scancode_waitmsg:扫码推事件且弹出“消息接收中”、pic_sysphoto:弹出系统拍照发图、pic_photo_or_album:弹出拍照或者相册发图、pic_weixin:弹出微信相册发图器、location_select:弹出地理位置选择器、media_id:下发消息(除文本消息)。。。。)
网络异常,图片无法展示
|
根据请求实例可以看出 url需要携带access_token(后面所有必然都要携带) 并上送json格式请求数据
网络异常,图片无法展示
|
1.json请求格式上送数据测试
HttpClientUtils请求工具类
/** * 封装HTTP POST方法 * * @param * @param (如JSON串) * @return * @throws ClientProtocolException * @throws IOException */ public static String post(String url, String data) throws ClientProtocolException, IOException { HttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); //设置请求和传输超时时间 RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(5000).setConnectTimeout(5000).build(); httpPost.setConfig(requestConfig); httpPost.setHeader("Content-Type", "text/json; charset=utf-8"); httpPost.setEntity(new StringEntity(data, "UTF-8")); HttpResponse response = httpClient.execute(httpPost); String httpEntityContent = getHttpEntityContent(response); httpPost.abort(); return httpEntityContent; } 复制代码
常量类WeCharConstant增加 创建菜单请求url常量
/** * 创建菜单URL */ public static final String CREATE_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN"; 复制代码
菜单:MenuService
import cn.org.spring.common.util.HttpClientUtils; import com.ctsi.sddx.constants.WeCharConstant; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.IOException; /** * @Author : lizzu * @create 2022/9/25 15:19 */ @Service public class MenuService { private static final String CREATE_URL = WeCharConstant.CREATE_MENU_URL; @Resource private AccessTokenService accessTokenService; /** * 创建菜单 * * @param json * @throws IOException */ public String createMenu(String json) throws IOException { return sendPost(json); } /** * 发送POST请求 * * @param data 请求数据 * @return * @throws IOException */ private String sendPost(String data) throws IOException { return HttpClientUtils.post(CREATE_URL.replace("ACCESS_TOKEN", accessTokenService.getAccessToken()), data); } } 复制代码
MenuController
import java.io.IOException; /** * @Author : lizzu * @create 2022/9/25 15:24 */ @RestController @RequestMapping("/v1/weChart") public class MenuController { @Autowired MenuService menuService; @GetMapping("/createMenuToJson") public String createMenuToJson(String json) throws IOException { return menuService.createMenu(json); } @GetMapping("/deleteMenu") public String deleteMenu() throws IOException { return menuService.deleteMenu(); } } 复制代码
上送json报文:
{ "button": [ { "key": "20", "name": "拍照", "sub_button": [ { "name": "搜索", "type": "view", "url": "http://www.soso/com/" }, { "name": "搜索1", "type": "view", "url": "http://www.baidu.com/" } ], "type": "click" }, { "key": "20", "name": "个人中心", "sub_button": [ { "name": "百度", "type": "view", "url": "http://www.baidu.com/" } ], "type": "click" }, { "key": "20", "name": "我的会员", "type": "click" } ] } 复制代码
返回 { "errcode": 0, "errmsg": "ok" } 查看效果
网络异常,图片无法展示
|
网络异常,图片无法展示
|
json请求格式 完成
下篇讲创建Button类 组织json上送数据