package com.jfinal.weixin.sdk.api.shakearound; import com.jfinal.kit.StrKit; import com.jfinal.weixin.sdk.api.AccessTokenApi; import com.jfinal.weixin.sdk.api.ApiResult; import com.jfinal.weixin.sdk.api.shakearound.bean.DeviceIdentifier; import com.jfinal.weixin.sdk.utils.HttpUtils; import com.jfinal.weixin.sdk.utils.JsonUtils; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 周边-设备管理 * @author L.cm */ public class ShakeAroundDeviceApi { private static String applyIdUrl = "https://api.weixin.qq.com/shakearound/device/applyid?access_token="; /** * 申请配置设备所需的UUID、Major、Minor。申请成功后返回批次ID,可用返回的批次ID通过“查询设备ID申请状态”接口查询目前申请的审核状态。 * 若单次申请的设备ID数量小于500个,系统会进行快速审核;若单次申请的设备ID数量大于等 500个 ,会在三个工作日内完成审核。 * * @param quantity 申请的设备ID的数量,单次新增设备超过500个,需走人工审核流程 * @param applyReason 申请理由,不超过100个汉字或200个英文字母 * @param comment 备注,可为空,不超过15个汉字或30个英文字母 * @param poiId 设备关联的门店ID,可为空,关联门店后,在门店1KM的范围内有优先摇出信息的机会。门店相关信息具体可查看:https://mp.weixin.qq.com/zh_CN/htmledition/comm_htmledition/res/store_manage/store_manage_file.zip * @return {ApiResult} */ public static ApiResult applyId(int quantity, String applyReason, String comment, Integer poiId) { String url = applyIdUrl + AccessTokenApi.getAccessTokenStr(); Map data = new HashMap(); data.put("quantity", quantity); data.put("apply_reason", applyReason); if (StrKit.isBlank(comment)) { data.put("comment", comment); } if (null == poiId) { data.put("poi_id", poiId); } String jsonResult = HttpUtils.post(url, JsonUtils.toJson(data)); return new ApiResult(jsonResult); } private static String applyStatusUrl = "https://api.weixin.qq.com/shakearound/device/applystatus?access_token="; /** * 查询设备ID申请的审核状态。若单次申请的设备ID数量小于等于500个, * 系统会进行快速审核;若单次申请的设备ID数量大于500个,则在三个工作日内完成审核。 * @param applyId 批次ID,申请设备ID时所返回的批次ID * @return {ApiResult} */ public static ApiResult getApplyStatus(int applyId) { String url = applyStatusUrl + AccessTokenApi.getAccessTokenStr(); Map data = new HashMap(); data.put("apply_id", applyId); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(data)); return new ApiResult(jsonResult); } private static String updateUrl = "https://api.weixin.qq.com/shakearound/device/update?access_token="; /** * 编辑设备的备注信息。可用设备ID或完整的UUID、Major、Minor指定设备,二者选其一。 * @param deviceIdentifier 设备信息 * @param comment 设备的备注信息,不超过15个汉字或30个英文字母。 * @return {ApiResult} */ public static ApiResult updateDeviceInfo(DeviceIdentifier deviceIdentifier, String comment) { String url = updateUrl + AccessTokenApi.getAccessTokenStr(); Map data = new HashMap(); data.put("device_identifier", deviceIdentifier); data.put("comment", comment); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(data)); return new ApiResult(jsonResult); } private static String bindLocationUrl = "https://api.weixin.qq.com/shakearound/device/bindlocation?access_token="; /** * 配置设备与门店的关联关系 * 支持创建门店后直接关联在设备上,无需为审核通过状态,摇周边后台自动更新门店的最新信息和状态。 * @param deviceIdentifier 设备信息 * @param poiId 设备关联的门店ID,关联门店后,在门店1KM的范围内有优先摇出信息的机会。当值为0时,将清除设备已关联的门店ID。门店相关信息具体可查看:https://mp.weixin.qq.com/zh_CN/htmledition/comm_htmledition/res/store_manage/store_manage_file.zip * @return {ApiResult} */ public static ApiResult bindLocation(DeviceIdentifier deviceIdentifier, String poiId) { String url = bindLocationUrl + AccessTokenApi.getAccessTokenStr(); Map data = new HashMap(); data.put("device_identifier", deviceIdentifier); data.put("poi_id", poiId); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(data)); return new ApiResult(jsonResult); } private static String searchUrl = "https://api.weixin.qq.com/shakearound/device/search?access_token="; /** * 查询设备列表 * @param deviceIdentifier 指定的设备 * @return {ApiResult} */ public static ApiResult searchByDevice(DeviceIdentifier deviceIdentifier) { String url = searchUrl + AccessTokenApi.getAccessTokenStr(); Map data = new HashMap(); data.put("device_identifiers", deviceIdentifier); data.put("type", 1); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(data)); return new ApiResult(jsonResult); } /** * 需要分页查询或者指定范围内的设备时 * @param begin 页面列表的起始索引值; * @param count 待查询的页面数量,不能超过50个; * @return {ApiResult} */ public static ApiResult searchPage(int begin, int count) { String url = searchUrl + AccessTokenApi.getAccessTokenStr(); if(begin < 0) begin = 0; if(count > 50) count = 50; if(count < 1) count = 1; Map data = new HashMap(); data.put("type", 2); data.put("begin", begin); data.put("count", count); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(data)); return new ApiResult(jsonResult); } /** * 根据批次id查找 * @param applyId 应用id * @param begin 页面列表的起始索引值; * @param count 待查询的页面数量,不能超过50个; * @return {ApiResult} */ public static ApiResult searchPage(int applyId, int begin, int count) { String url = searchUrl + AccessTokenApi.getAccessTokenStr(); if(begin < 0) begin = 0; if(count > 50) count = 50; if(count < 1) count = 1; Map data = new HashMap(); data.put("type", 3); data.put("apply_id", applyId); data.put("begin", begin); data.put("count", count); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(data)); return new ApiResult(jsonResult); } private static String bindPageUrl = "https://api.weixin.qq.com/shakearound/device/bindpage?access_token="; /** * 配置设备与页面的关联关系。配置时传入该设备需要关联的页面的id列表(该设备原有的关联关系将被直接清除);页面的id列表允许为空,当页面的id列表为空时则会清除该设备的所有关联关系。配置完成后,在此设备的信号范围内,即可摇出关联的页面信息。 * 在申请设备ID后,可直接使用接口直接配置页面。 * 若设备配置多个页面,则随机出现页面信息。一个设备最多可配置30个关联页面。 * * @param deviceIdentifier 设备信息 * @param pageIds 待关联的页面列表 * @return {ApiResult} */ public static ApiResult bindPage(DeviceIdentifier deviceIdentifier, int... pageIds) { String url = bindPageUrl + AccessTokenApi.getAccessTokenStr(); Map data = new HashMap(); data.put("device_identifier", deviceIdentifier); data.put("page_ids", pageIds); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(data)); return new ApiResult(jsonResult); } private static String relationSearchUrl = "https://api.weixin.qq.com/shakearound/relation/search?access_token="; /** * 查询设备与页面的关联关系。 * 提供两种查询方式,可指定页面ID分页查询该页面所关联的所有的设备信息; * 也可根据设备ID或完整的UUID、Major、Minor查询该设备所关联的所有页面信息。 * @param deviceIdentifier 设备信息 * @param type 类别 * @return {ApiResult} */ public static ApiResult searchRelation(DeviceIdentifier deviceIdentifier, int type) { String url = relationSearchUrl + AccessTokenApi.getAccessTokenStr(); Map data = new HashMap(); data.put("device_identifier", deviceIdentifier); data.put("type", type); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(data)); return new ApiResult(jsonResult); } private static String groupAddUrl = "https://api.weixin.qq.com/shakearound/device/group/add?access_token="; /** * 新建设备分组,每个帐号下最多只有1000个分组。 * @param groupName 分组名 * @return {ApiResult} */ public static ApiResult addGroup(String groupName) { String url = groupAddUrl + AccessTokenApi.getAccessTokenStr(); Map groupData = new HashMap(); groupData.put("group_name", groupName); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(groupData)); return new ApiResult(jsonResult); } private static String groupUpdateUrl = "https://api.weixin.qq.com/shakearound/device/group/update?access_token="; /** * 编辑设备分组信息,目前只能修改分组名。 * @param groupId 分组id * @param groupName 分组名 * @return {ApiResult} */ public static ApiResult updateGroup(int groupId, String groupName) { String url = groupUpdateUrl + AccessTokenApi.getAccessTokenStr(); Map groupData = new HashMap(); groupData.put("group_id", groupId); groupData.put("group_name", groupName); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(groupData)); return new ApiResult(jsonResult); } private static String groupDeleteUrl = "https://api.weixin.qq.com/shakearound/device/group/delete?access_token="; /** * 删除设备分组,若分组中还存在设备,则不能删除成功。需把设备移除以后,才能删除。 * @param groupId 分组id * @return {ApiResult} */ public static ApiResult deleteGroup(int groupId) { String url = groupDeleteUrl + AccessTokenApi.getAccessTokenStr(); Map groupData = new HashMap(); groupData.put("group_id", groupId); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(groupData)); return new ApiResult(jsonResult); } private static String groupGetListUrl = "https://api.weixin.qq.com/shakearound/device/group/getlist?access_token="; /** * 查询账号下所有的分组。 * @param begin 分组列表的起始索引值 * @param count 待查询的分组数量,不能超过1000个 * @return {ApiResult} */ public static ApiResult getGroupList(int begin, int count) { String url = groupGetListUrl + AccessTokenApi.getAccessTokenStr(); Map groupData = new HashMap(); groupData.put("begin", begin); groupData.put("count", count); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(groupData)); return new ApiResult(jsonResult); } private static String groupGetDetailUrl = "https://api.weixin.qq.com/shakearound/device/group/getdetail?access_token="; /** * 查询分组详情,包括分组名,分组id,分组里的设备列表。 * @param groupId 分组唯一标识,全局唯一 * @param begin 分组列表的起始索引值 * @param count 待查询的分组数量,不能超过1000个 * @return {ApiResult} */ public static ApiResult getGroupDetail(int groupId, int begin, int count) { String url = groupGetDetailUrl + AccessTokenApi.getAccessTokenStr(); Map groupData = new HashMap(); groupData.put("group_id", groupId); groupData.put("begin", begin); groupData.put("count", count); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(groupData)); return new ApiResult(jsonResult); } private static String groupAddDeviceUrl = "https://api.weixin.qq.com/shakearound/device/group/adddevice?access_token="; /** * 添加设备到分组,每个分组能够持有的设备上限为10000,并且每次添加操作的添加上限为1000。只有在摇周边申请的设备才能添加到分组。 * @param groupId 分组唯一标识,全局唯一 * @param deviceIdentifierList 设备信息 * @return {ApiResult} */ public static ApiResult addDeviceToGroup(int groupId, List deviceIdentifierList) { String url = groupAddDeviceUrl + AccessTokenApi.getAccessTokenStr(); Map groupData = new HashMap(); groupData.put("group_id", groupId); groupData.put("device_identifiers", deviceIdentifierList); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(groupData)); return new ApiResult(jsonResult); } private static String groupDeleteDeviceUrl = "https://api.weixin.qq.com/shakearound/device/group/deletedevice?access_token="; /** * 从分组中移除设备,每次删除操作的上限为1000。 * @param groupId 分组唯一标识,全局唯一 * @param deviceIdentifierList 设备信息 * @return {ApiResult} */ public static ApiResult deleteDeviceFromGroup(int groupId, List deviceIdentifierList) { String url = groupDeleteDeviceUrl + AccessTokenApi.getAccessTokenStr(); Map groupData = new HashMap(); groupData.put("group_id", groupId); groupData.put("device_identifiers", deviceIdentifierList); String jsonResult = HttpUtils.post(url, JsonUtils.toJson(groupData)); return new ApiResult(jsonResult); } }