diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImpl.java index abbb021e8..bd715efde 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImpl.java @@ -109,7 +109,7 @@ public WxMaCode2VerifyInfoResult getCode2VerifyInfo(String code, String checkcod @Override public boolean checkSessionKey(String openid, String sessionKey) throws WxErrorException { - String signature = SignUtils.createHmacSha256Sign(openid, sessionKey); + String signature = SignUtils.createHmacSha256Sign("", sessionKey).toLowerCase(); String url = String.format(CHECK_SESSION_KEY_URL, openid, signature); this.service.get(url, null); return true; diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java index e16cd982a..c6f70df76 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java @@ -387,7 +387,7 @@ public interface User { String CODE_2_VERIFY_INFO_URL = "https://api.weixin.qq.com/wxa/sec/checkcode2verifyinfo"; /** 检查登录态接口 */ String CHECK_SESSION_KEY_URL = - "https://api.weixin.qq.com/wxa/checksessionkey?openid=%s&signature=%s&sig_method=hmac_sha256"; + "https://api.weixin.qq.com/wxa/checksession?openid=%s&signature=%s&sig_method=hmac_sha256"; } public interface Ocr { diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImplCheckSessionKeyTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImplCheckSessionKeyTest.java new file mode 100644 index 000000000..73aa9ac30 --- /dev/null +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImplCheckSessionKeyTest.java @@ -0,0 +1,35 @@ +package cn.binarywang.wx.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import me.chanjar.weixin.common.error.WxErrorException; +import me.chanjar.weixin.common.util.SignUtils; +import org.mockito.ArgumentCaptor; +import org.testng.annotations.Test; + +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.isNull; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.testng.Assert.assertEquals; + +/** + * {@link WxMaUserServiceImpl} 检查登录态接口的单元测试。 + */ +public class WxMaUserServiceImplCheckSessionKeyTest { + + @Test + public void shouldUseCheckSessionUrlAndSignEmptyStringWhenCheckingSessionKey() throws WxErrorException { + WxMaService wxMaService = mock(WxMaService.class); + when(wxMaService.get(anyString(), isNull())).thenReturn("{\"errcode\":0,\"errmsg\":\"ok\"}"); + + new WxMaUserServiceImpl(wxMaService).checkSessionKey("user-openid", "session-key"); + + ArgumentCaptor url = ArgumentCaptor.forClass(String.class); + verify(wxMaService).get(url.capture(), isNull()); + assertEquals(url.getValue(), + "https://api.weixin.qq.com/wxa/checksession?openid=user-openid&signature=" + + SignUtils.createHmacSha256Sign("", "session-key").toLowerCase() + + "&sig_method=hmac_sha256"); + } +} diff --git a/weixin-java-miniapp/src/test/resources/testng.xml b/weixin-java-miniapp/src/test/resources/testng.xml index b34a4415d..9733604a1 100644 --- a/weixin-java-miniapp/src/test/resources/testng.xml +++ b/weixin-java-miniapp/src/test/resources/testng.xml @@ -4,6 +4,7 @@ +