diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShareService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShareService.java index 8c6030e53..d32aee2c1 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShareService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShareService.java @@ -1,5 +1,6 @@ package cn.binarywang.wx.miniapp.api; +import cn.binarywang.wx.miniapp.bean.WxMaGroupEnterInfo; import cn.binarywang.wx.miniapp.bean.WxMaShareInfo; /** @@ -18,4 +19,16 @@ public interface WxMaShareService { */ WxMaShareInfo getShareInfo(String sessionKey, String encryptedData, String ivStr); + /** + * 解密群入口敏感数据. + * 对应 wx.getGroupEnterInfo 接口返回的 encryptedData 解密 + * + * @param sessionKey 会话密钥 + * @param encryptedData 消息密文 + * @param ivStr 加密算法的初始向量 + * @return 群入口信息 + * @see wx.getGroupEnterInfo 官方文档 + */ + WxMaGroupEnterInfo getGroupEnterInfo(String sessionKey, String encryptedData, String ivStr); + } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShareServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShareServiceImpl.java index fd1981aa0..a3a8e6176 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShareServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShareServiceImpl.java @@ -2,6 +2,7 @@ package cn.binarywang.wx.miniapp.api.impl; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.WxMaShareService; +import cn.binarywang.wx.miniapp.bean.WxMaGroupEnterInfo; import cn.binarywang.wx.miniapp.bean.WxMaShareInfo; import cn.binarywang.wx.miniapp.util.crypt.WxMaCryptUtils; import lombok.RequiredArgsConstructor; @@ -18,4 +19,9 @@ public class WxMaShareServiceImpl implements WxMaShareService { return WxMaShareInfo.fromJson(WxMaCryptUtils.decrypt(sessionKey, encryptedData, ivStr)); } + + @Override + public WxMaGroupEnterInfo getGroupEnterInfo(String sessionKey, String encryptedData, String ivStr) { + return WxMaGroupEnterInfo.fromJson(WxMaCryptUtils.decrypt(sessionKey, encryptedData, ivStr)); + } } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaGroupEnterInfo.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaGroupEnterInfo.java new file mode 100644 index 000000000..e65ec602d --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaGroupEnterInfo.java @@ -0,0 +1,46 @@ +package cn.binarywang.wx.miniapp.bean; + +import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder; +import com.google.gson.annotations.SerializedName; +import lombok.Data; + +import java.io.Serializable; + +/** + * 微信小程序群入口信息. + * 对应 wx.getGroupEnterInfo 接口返回的解密数据 + * + * @see wx.getGroupEnterInfo 官方文档 + */ +@Data +public class WxMaGroupEnterInfo implements Serializable { + private static final long serialVersionUID = -8053613683499632227L; + + /** + * 多聊群下返回的群唯一标识. + */ + @SerializedName("opengid") + private String openGId; + + /** + * 单聊群下返回的群唯一标识. + */ + @SerializedName("open_single_roomid") + private String openSingleRoomid; + + /** + * 用户在当前群的唯一标识. + */ + @SerializedName("group_openid") + private String groupOpenid; + + /** + * 聊天室类型. + */ + @SerializedName("chat_type") + private Integer chatType; + + public static WxMaGroupEnterInfo fromJson(String json) { + return WxMaGsonBuilder.create().fromJson(json, WxMaGroupEnterInfo.class); + } +} diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShareServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShareServiceImplTest.java index dcf3726e3..f6d041ff3 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShareServiceImplTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShareServiceImplTest.java @@ -1,6 +1,7 @@ package cn.binarywang.wx.miniapp.api.impl; import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.WxMaGroupEnterInfo; import cn.binarywang.wx.miniapp.bean.WxMaShareInfo; import cn.binarywang.wx.miniapp.test.ApiTestModule; import com.google.inject.Inject; @@ -37,4 +38,16 @@ public class WxMaShareServiceImplTest { assertNotNull(shareInfo); System.out.println(shareInfo.toString()); } + + /** + * TODO 测试数据有问题,需要替换为正确的数据 + */ + @Test + public void testGetGroupEnterInfo() { + WxMaGroupEnterInfo groupEnterInfo = this.wxService.getShareService().getGroupEnterInfo("tiihtNczf5v6AKRyjwEUhQ==", + "CiyLU1Aw2KjvrjMdj8YKliAjtP4gsMZMQmRzooG2xrDcvSnxIMXFufNstNGTyaGS9uT5geRa0W4oTOb1WT7fJlAC+oNPdbB+3hVbJSRgv+4lGOETKUQz6OYStslQ142dNCuabNPGBzlooOmB231qMM85d2/fV6ChevvXvQP8Hkue1poOFtnEtpyxVLW1zAo6/1Xx1COxFvrc2d7UL/lmHInNlxuacJXwu0fjpXfz/YqYzBIBzD6WUfTIF9GRHpOn/Hz7saL8xz+W//FRAUid1OksQaQx4CMs8LOddcQhULW4ucetDf96JcR3g0gfRK4PC7E/r7Z6xNrXd2UIeorGj5Ef7b1pJAYB6Y5anaHqZ9J6nKEBvB4DnNLIVWSgARns/8wR2SiRS7MNACwTyrGvt9ts8p12PKFdlqYTopNHR1Vf7XjfhQlVsAJdNiKdYmYVoKlaRv85IfVunYzO0IKXsyl7JCUjCpoG20f0a04COwfneQAGGwd5oa+T8yO5hzuyDb/XcxxmK01EpqOyuxINew==", + "r7BXXKkLb8qrSNn05n0qiA=="); + assertNotNull(groupEnterInfo); + System.out.println(groupEnterInfo.toString()); + } }