| @@ -0,0 +1,24 @@ | |||
| package cn.binarywang.wx.miniapp.api; | |||
| import java.util.List; | |||
| import cn.binarywang.wx.miniapp.bean.WxMaRunStepInfo; | |||
| /** | |||
| * 微信运动相关操作接口. | |||
| * | |||
| * @author <a href="https://github.com/binarywang">Binary Wang</a> | |||
| */ | |||
| public interface WxMaRunService { | |||
| /** | |||
| * 解密分享敏感数据. | |||
| * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.getWeRunData.html | |||
| * | |||
| * @param sessionKey 会话密钥 | |||
| * @param encryptedData 消息密文 | |||
| * @param ivStr 加密算法的初始向量 | |||
| */ | |||
| List<WxMaRunStepInfo> getRunStepInfo(String sessionKey, String encryptedData, String ivStr); | |||
| } | |||
| @@ -152,39 +152,45 @@ public interface WxMaService { | |||
| WxMaTemplateService getTemplateService(); | |||
| /** | |||
| * 数据分析相关查询服务 | |||
| * 数据分析相关查询服务. | |||
| * | |||
| * @return WxMaAnalysisService | |||
| */ | |||
| WxMaAnalysisService getAnalysisService(); | |||
| /** | |||
| * 返回代码操作相关的 API | |||
| * 返回代码操作相关的 API. | |||
| * | |||
| * @return WxMaCodeService | |||
| */ | |||
| WxMaCodeService getCodeService(); | |||
| /** | |||
| * 返回jsapi操作相关的 API服务类对象 | |||
| * 返回jsapi操作相关的 API服务类对象. | |||
| * | |||
| * @return WxMaJsapiService | |||
| */ | |||
| WxMaJsapiService getJsapiService(); | |||
| /** | |||
| * 小程序修改服务器地址、成员管理 API | |||
| * 小程序修改服务器地址、成员管理 API. | |||
| * | |||
| * @return WxMaSettingService | |||
| */ | |||
| WxMaSettingService getSettingService(); | |||
| /** | |||
| * 返回分享相关查询服务 | |||
| * 返回分享相关查询服务. | |||
| * @return WxMaShareService | |||
| */ | |||
| WxMaShareService getShareService(); | |||
| /** | |||
| * 返回维新运动相关接口服务对象. | |||
| * @return WxMaShareService | |||
| */ | |||
| WxMaRunService getRunService(); | |||
| /** | |||
| * 初始化http请求对象. | |||
| */ | |||
| @@ -0,0 +1,29 @@ | |||
| package cn.binarywang.wx.miniapp.api.impl; | |||
| import java.util.List; | |||
| import cn.binarywang.wx.miniapp.api.WxMaRunService; | |||
| import cn.binarywang.wx.miniapp.api.WxMaService; | |||
| import cn.binarywang.wx.miniapp.bean.WxMaRunStepInfo; | |||
| import cn.binarywang.wx.miniapp.util.crypt.WxMaCryptUtils; | |||
| /** | |||
| * <pre> | |||
| * | |||
| * Created by Binary Wang on 2018/11/4. | |||
| * </pre> | |||
| * | |||
| * @author <a href="https://github.com/binarywang">Binary Wang</a> | |||
| */ | |||
| public class WxMaRunServiceImpl implements WxMaRunService { | |||
| private WxMaService service; | |||
| public WxMaRunServiceImpl(WxMaService service) { | |||
| this.service = service; | |||
| } | |||
| @Override | |||
| public List<WxMaRunStepInfo> getRunStepInfo(String sessionKey, String encryptedData, String ivStr) { | |||
| return WxMaRunStepInfo.fromJson(WxMaCryptUtils.decrypt(sessionKey, encryptedData, ivStr)); | |||
| } | |||
| } | |||
| @@ -6,7 +6,6 @@ import java.util.HashMap; | |||
| import java.util.Map; | |||
| import java.util.concurrent.locks.Lock; | |||
| import cn.binarywang.wx.miniapp.api.*; | |||
| import org.apache.http.HttpHost; | |||
| import org.apache.http.client.config.RequestConfig; | |||
| import org.apache.http.client.methods.CloseableHttpResponse; | |||
| @@ -16,6 +15,18 @@ import org.apache.http.impl.client.CloseableHttpClient; | |||
| import org.slf4j.Logger; | |||
| import org.slf4j.LoggerFactory; | |||
| import cn.binarywang.wx.miniapp.api.WxMaAnalysisService; | |||
| import cn.binarywang.wx.miniapp.api.WxMaCodeService; | |||
| import cn.binarywang.wx.miniapp.api.WxMaJsapiService; | |||
| import cn.binarywang.wx.miniapp.api.WxMaMediaService; | |||
| import cn.binarywang.wx.miniapp.api.WxMaMsgService; | |||
| import cn.binarywang.wx.miniapp.api.WxMaQrcodeService; | |||
| import cn.binarywang.wx.miniapp.api.WxMaRunService; | |||
| import cn.binarywang.wx.miniapp.api.WxMaService; | |||
| import cn.binarywang.wx.miniapp.api.WxMaSettingService; | |||
| import cn.binarywang.wx.miniapp.api.WxMaShareService; | |||
| import cn.binarywang.wx.miniapp.api.WxMaTemplateService; | |||
| import cn.binarywang.wx.miniapp.api.WxMaUserService; | |||
| import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; | |||
| import cn.binarywang.wx.miniapp.config.WxMaConfig; | |||
| import com.google.common.base.Joiner; | |||
| @@ -57,6 +68,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl | |||
| private WxMaSettingService settingService = new WxMaSettingServiceImpl(this); | |||
| private WxMaJsapiService jsapiService = new WxMaJsapiServiceImpl(this); | |||
| private WxMaShareService shareService = new WxMaShareServiceImpl(this); | |||
| private WxMaRunService runService = new WxMaRunServiceImpl(this); | |||
| private int retrySleepMillis = 1000; | |||
| private int maxRetryTimes = 5; | |||
| @@ -332,4 +344,9 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl | |||
| public WxMaShareService getShareService() { | |||
| return this.shareService; | |||
| } | |||
| @Override | |||
| public WxMaRunService getRunService() { | |||
| return this.runService; | |||
| } | |||
| } | |||
| @@ -0,0 +1,38 @@ | |||
| package cn.binarywang.wx.miniapp.bean; | |||
| import java.io.Serializable; | |||
| import java.util.List; | |||
| import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; | |||
| import com.google.gson.JsonObject; | |||
| import com.google.gson.JsonParser; | |||
| import com.google.gson.reflect.TypeToken; | |||
| import lombok.Data; | |||
| /** | |||
| * 微信运动步数信息. | |||
| * | |||
| * @author <a href="https://github.com/binarywang">Binary Wang</a> | |||
| */ | |||
| @Data | |||
| public class WxMaRunStepInfo implements Serializable { | |||
| private static final JsonParser JSON_PARSER = new JsonParser(); | |||
| private static final long serialVersionUID = -7496372171398607044L; | |||
| /** | |||
| * 时间戳,表示数据对应的时间. | |||
| */ | |||
| private Long timestamp; | |||
| /** | |||
| * 微信运动步数. | |||
| */ | |||
| private Integer step; | |||
| public static List<WxMaRunStepInfo> fromJson(String json) { | |||
| JsonObject jsonObject = JSON_PARSER.parse(json).getAsJsonObject(); | |||
| return WxMaGsonBuilder.create().fromJson(jsonObject.get("stepInfoList").toString(), | |||
| new TypeToken<List<WxMaRunStepInfo>>() { | |||
| }.getType()); | |||
| } | |||
| } | |||
| @@ -0,0 +1,43 @@ | |||
| package cn.binarywang.wx.miniapp.bean; | |||
| import java.util.List; | |||
| import org.testng.annotations.*; | |||
| import static org.assertj.core.api.Assertions.assertThat; | |||
| import static org.testng.Assert.*; | |||
| /** | |||
| * <pre> | |||
| * | |||
| * Created by Binary Wang on 2018/11/4. | |||
| * </pre> | |||
| * | |||
| * @author <a href="https://github.com/binarywang">Binary Wang</a> | |||
| */ | |||
| public class WxMaRunStepInfoTest { | |||
| @Test | |||
| public void testFromJson() { | |||
| // 数据来源:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/werun/wx.getWeRunData.html | |||
| String json = "{\n" + | |||
| " \"stepInfoList\": [\n" + | |||
| " {\n" + | |||
| " \"timestamp\": 1445866601,\n" + | |||
| " \"step\": 100\n" + | |||
| " },\n" + | |||
| " {\n" + | |||
| " \"timestamp\": 1445876601,\n" + | |||
| " \"step\": 120\n" + | |||
| " }\n" + | |||
| " ]\n" + | |||
| "}"; | |||
| final List<WxMaRunStepInfo> stepInfoList = WxMaRunStepInfo.fromJson(json); | |||
| assertThat(stepInfoList).isNotEmpty(); | |||
| assertThat(stepInfoList.get(0).getStep()).isEqualTo(100); | |||
| assertThat(stepInfoList.get(0).getTimestamp()).isEqualTo(1445866601); | |||
| assertThat(stepInfoList.get(1).getStep()).isEqualTo(120); | |||
| assertThat(stepInfoList.get(1).getTimestamp()).isEqualTo(1445876601); | |||
| } | |||
| } | |||