@@ -409,6 +409,12 @@ public interface WxMpService { | |||
*/ | |||
WxMpDeviceService getDeviceService(); | |||
/** | |||
* 返回摇一摇周边相关接口方法的实现类对象,以方便调用其各个接口 | |||
* | |||
* @return WxMpShakeService | |||
*/ | |||
WxMpShakeService getShakeService(); | |||
/** | |||
* 初始化http请求对象 | |||
@@ -0,0 +1,27 @@ | |||
package me.chanjar.weixin.mp.api; | |||
import me.chanjar.weixin.common.exception.WxErrorException; | |||
import me.chanjar.weixin.mp.bean.WxMpShakeInfoResult; | |||
import me.chanjar.weixin.mp.bean.WxMpShakeQuery; | |||
/** | |||
* 摇一摇周边的相关接口 | |||
* | |||
* @author rememberber | |||
*/ | |||
public interface WxMpShakeService { | |||
/** | |||
* <pre> | |||
* 获取设备及用户信息<br/> | |||
* 获取设备信息,包括UUID、major、minor,以及距离、openID等信息。 | |||
* 详情请见: https://mp.weixin.qq.com/wiki?action=doc&id=mp1443447963 | |||
* http请求方式: POST(请使用https协议) | |||
* 接口地址:https://api.weixin.qq.com/shakearound/user/getshakeinfo?access_token=ACCESS_TOKE | |||
* </pre> | |||
* | |||
* @param wxMpShakeQuery 查询参数 | |||
*/ | |||
WxMpShakeInfoResult getShakeInfo(WxMpShakeQuery wxMpShakeQuery) throws WxErrorException; | |||
} |
@@ -41,6 +41,7 @@ public abstract class AbstractWxMpServiceImpl<H, P> implements WxMpService, Requ | |||
private WxMpUserBlacklistService blackListService = new WxMpUserBlacklistServiceImpl(this); | |||
private WxMpTemplateMsgService templateMsgService = new WxMpTemplateMsgServiceImpl(this); | |||
private WxMpDeviceService deviceService = new WxMpDeviceServiceImpl(this); | |||
private WxMpShakeService shakeService = new WxMpShakeServiceImpl(this); | |||
private int retrySleepMillis = 1000; | |||
private int maxRetryTimes = 5; | |||
@@ -394,4 +395,9 @@ public abstract class AbstractWxMpServiceImpl<H, P> implements WxMpService, Requ | |||
public WxMpDeviceService getDeviceService() { | |||
return this.deviceService; | |||
} | |||
@Override | |||
public WxMpShakeService getShakeService(){ | |||
return this.shakeService; | |||
} | |||
} |
@@ -0,0 +1,39 @@ | |||
package me.chanjar.weixin.mp.api.impl; | |||
import me.chanjar.weixin.common.exception.WxErrorException; | |||
import me.chanjar.weixin.mp.api.WxMpService; | |||
import me.chanjar.weixin.mp.api.WxMpShakeService; | |||
import me.chanjar.weixin.mp.bean.WxMpShakeInfoResult; | |||
import me.chanjar.weixin.mp.bean.WxMpShakeQuery; | |||
/** | |||
* Created by rememberber on 2017/6/5. | |||
* @author rememberber | |||
*/ | |||
public class WxMpShakeServiceImpl implements WxMpShakeService { | |||
private WxMpService wxMpService; | |||
public WxMpShakeServiceImpl(WxMpService wxMpService) { | |||
this.wxMpService = wxMpService; | |||
} | |||
/** | |||
* <pre> | |||
* 获取设备及用户信息<br/> | |||
* 获取设备信息,包括UUID、major、minor,以及距离、openID等信息。 | |||
* 详情请见: https://mp.weixin.qq.com/wiki?action=doc&id=mp1443447963 | |||
* http请求方式: POST(请使用https协议) | |||
* 接口地址:https://api.weixin.qq.com/shakearound/user/getshakeinfo?access_token=ACCESS_TOKE | |||
* </pre> | |||
* | |||
* @param wxMpShakeQuery 查询参数 | |||
*/ | |||
@Override | |||
public WxMpShakeInfoResult getShakeInfo(WxMpShakeQuery wxMpShakeQuery) throws WxErrorException { | |||
String url = "https://api.weixin.qq.com/shakearound/user/getshakeinfo"; | |||
String postData = wxMpShakeQuery.toJsonString(); | |||
String responseContent = this.wxMpService.post(url, postData); | |||
return WxMpShakeInfoResult.fromJson(responseContent); | |||
} | |||
} |
@@ -0,0 +1,164 @@ | |||
package me.chanjar.weixin.mp.bean; | |||
import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder; | |||
import java.io.Serializable; | |||
/** | |||
* 摇一摇周边:获取设备及用户信息接口返回JSON数据接收类 | |||
* Created by rememberber on 2017/6/5. | |||
* | |||
* @author rememberber | |||
*/ | |||
public class WxMpShakeInfoResult implements Serializable { | |||
private Integer errcode; | |||
private String errmsg; | |||
private Data data; | |||
public static WxMpShakeInfoResult fromJson(String json) { | |||
return WxMpGsonBuilder.INSTANCE.create().fromJson(json, WxMpShakeInfoResult.class); | |||
} | |||
public class Data { | |||
private String page_id; | |||
private String openid; | |||
private String poi_id; | |||
private String brand_userame; | |||
private BeaconInfo beacon_info; | |||
public class BeaconInfo { | |||
private double distance; | |||
private Integer major; | |||
private Integer measure_power; | |||
private Integer minor; | |||
private Integer rssi; | |||
private String uuid; | |||
public double getDistance() { | |||
return distance; | |||
} | |||
public void setDistance(double distance) { | |||
this.distance = distance; | |||
} | |||
public Integer getMajor() { | |||
return major; | |||
} | |||
public void setMajor(Integer major) { | |||
this.major = major; | |||
} | |||
public Integer getMeasure_power() { | |||
return measure_power; | |||
} | |||
public void setMeasure_power(Integer measure_power) { | |||
this.measure_power = measure_power; | |||
} | |||
public Integer getMinor() { | |||
return minor; | |||
} | |||
public void setMinor(Integer minor) { | |||
this.minor = minor; | |||
} | |||
public Integer getRssi() { | |||
return rssi; | |||
} | |||
public void setRssi(Integer rssi) { | |||
this.rssi = rssi; | |||
} | |||
public String getUuid() { | |||
return uuid; | |||
} | |||
public void setUuid(String uuid) { | |||
this.uuid = uuid; | |||
} | |||
} | |||
public String getPage_id() { | |||
return page_id; | |||
} | |||
public void setPage_id(String page_id) { | |||
this.page_id = page_id; | |||
} | |||
public String getOpenid() { | |||
return openid; | |||
} | |||
public void setOpenid(String openid) { | |||
this.openid = openid; | |||
} | |||
public String getPoi_id() { | |||
return poi_id; | |||
} | |||
public void setPoi_id(String poi_id) { | |||
this.poi_id = poi_id; | |||
} | |||
public BeaconInfo getBeacon_info() { | |||
return beacon_info; | |||
} | |||
public void setBeacon_info(BeaconInfo beacon_info) { | |||
this.beacon_info = beacon_info; | |||
} | |||
public String getBrand_userame() { | |||
return brand_userame; | |||
} | |||
public void setBrand_userame(String brand_userame) { | |||
this.brand_userame = brand_userame; | |||
} | |||
} | |||
public Integer getErrcode() { | |||
return errcode; | |||
} | |||
public void setErrcode(Integer errcode) { | |||
this.errcode = errcode; | |||
} | |||
public String getErrmsg() { | |||
return errmsg; | |||
} | |||
public void setErrmsg(String errmsg) { | |||
this.errmsg = errmsg; | |||
} | |||
public Data getData() { | |||
return data; | |||
} | |||
public void setData(Data data) { | |||
this.data = data; | |||
} | |||
} |
@@ -0,0 +1,41 @@ | |||
package me.chanjar.weixin.mp.bean; | |||
import com.google.gson.Gson; | |||
import java.util.HashMap; | |||
import java.util.Map; | |||
/** | |||
* Created by rememberber on 2017/6/5. | |||
* | |||
* @author rememberber | |||
*/ | |||
public class WxMpShakeQuery { | |||
private String ticket; | |||
private int needPoi; | |||
public String toJsonString() { | |||
Map<String, Object> map = new HashMap<>(); | |||
map.put("ticket", this.ticket); | |||
map.put("need_poi", this.needPoi); | |||
return new Gson().toJson(map); | |||
} | |||
public String getTicket() { | |||
return ticket; | |||
} | |||
public void setTicket(String ticket) { | |||
this.ticket = ticket; | |||
} | |||
public int getNeedPoi() { | |||
return needPoi; | |||
} | |||
public void setNeedPoi(int needPoi) { | |||
this.needPoi = needPoi; | |||
} | |||
} |
@@ -0,0 +1,31 @@ | |||
package me.chanjar.weixin.mp.api.impl; | |||
import com.google.inject.Inject; | |||
import me.chanjar.weixin.mp.api.WxMpService; | |||
import me.chanjar.weixin.mp.api.test.ApiTestModule; | |||
import me.chanjar.weixin.mp.bean.WxMpShakeInfoResult; | |||
import me.chanjar.weixin.mp.bean.WxMpShakeQuery; | |||
import org.testng.annotations.Guice; | |||
import org.testng.annotations.Test; | |||
/** | |||
* 测试摇一摇周边相关的接口 | |||
* | |||
* @author rememberber | |||
*/ | |||
@Test(groups = "userAPI") | |||
@Guice(modules = ApiTestModule.class) | |||
public class WxMpShakeServiceImplTest { | |||
@Inject | |||
private WxMpService wxService; | |||
public void testGetShakeInfo() throws Exception { | |||
WxMpShakeQuery wxMpShakeQuery = new WxMpShakeQuery(); | |||
wxMpShakeQuery.setTicket("b87db7df490e5cbe4f598272f77f46be"); | |||
wxMpShakeQuery.setNeedPoi(1); | |||
WxMpShakeInfoResult wxMpShakeInfoResult = this.wxService.getShakeService().getShakeInfo(wxMpShakeQuery); | |||
System.out.println(); | |||
} | |||
} |