Skip to content

Commit 8833bce

Browse files
authored
🎨 #4124 【小程序】修复小程序登录态校验接口地址和签名生成问题
1 parent 0174215 commit 8833bce

4 files changed

Lines changed: 38 additions & 2 deletions

File tree

‎weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaUserServiceImpl.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public WxMaCode2VerifyInfoResult getCode2VerifyInfo(String code, String checkcod
109109

110110
@Override
111111
public boolean checkSessionKey(String openid, String sessionKey) throws WxErrorException {
112-
String signature = SignUtils.createHmacSha256Sign(openid, sessionKey);
112+
String signature = SignUtils.createHmacSha256Sign("", sessionKey).toLowerCase();
113113
String url = String.format(CHECK_SESSION_KEY_URL, openid, signature);
114114
this.service.get(url, null);
115115
return true;

‎weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ public interface User {
387387
String CODE_2_VERIFY_INFO_URL = "https://api.weixin.qq.com/wxa/sec/checkcode2verifyinfo";
388388
/** 检查登录态接口 */
389389
String CHECK_SESSION_KEY_URL =
390-
"https://api.weixin.qq.com/wxa/checksessionkey?openid=%s&signature=%s&sig_method=hmac_sha256";
390+
"https://api.weixin.qq.com/wxa/checksession?openid=%s&signature=%s&sig_method=hmac_sha256";
391391
}
392392

393393
public interface Ocr {
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package cn.binarywang.wx.miniapp.api.impl;
2+
3+
import cn.binarywang.wx.miniapp.api.WxMaService;
4+
import me.chanjar.weixin.common.error.WxErrorException;
5+
import me.chanjar.weixin.common.util.SignUtils;
6+
import org.mockito.ArgumentCaptor;
7+
import org.testng.annotations.Test;
8+
9+
import static org.mockito.ArgumentMatchers.anyString;
10+
import static org.mockito.ArgumentMatchers.isNull;
11+
import static org.mockito.Mockito.mock;
12+
import static org.mockito.Mockito.verify;
13+
import static org.mockito.Mockito.when;
14+
import static org.testng.Assert.assertEquals;
15+
16+
/**
17+
* {@link WxMaUserServiceImpl} 检查登录态接口的单元测试。
18+
*/
19+
public class WxMaUserServiceImplCheckSessionKeyTest {
20+
21+
@Test
22+
public void shouldUseCheckSessionUrlAndSignEmptyStringWhenCheckingSessionKey() throws WxErrorException {
23+
WxMaService wxMaService = mock(WxMaService.class);
24+
when(wxMaService.get(anyString(), isNull())).thenReturn("{\"errcode\":0,\"errmsg\":\"ok\"}");
25+
26+
new WxMaUserServiceImpl(wxMaService).checkSessionKey("user-openid", "session-key");
27+
28+
ArgumentCaptor<String> url = ArgumentCaptor.forClass(String.class);
29+
verify(wxMaService).get(url.capture(), isNull());
30+
assertEquals(url.getValue(),
31+
"https://api.weixin.qq.com/wxa/checksession?openid=user-openid&signature="
32+
+ SignUtils.createHmacSha256Sign("", "session-key").toLowerCase()
33+
+ "&sig_method=hmac_sha256");
34+
}
35+
}

‎weixin-java-miniapp/src/test/resources/testng.xml‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<test name="Unit_Test">
55
<classes>
66
<class name="cn.binarywang.wx.miniapp.api.impl.WxMaSubscribeServiceImplUrlTest"/>
7+
<class name="cn.binarywang.wx.miniapp.api.impl.WxMaUserServiceImplCheckSessionKeyTest"/>
78
</classes>
89
</test>
910
</suite>

0 commit comments

Comments
 (0)