From 3be78afe33c6719976b951b7ec9fda6bff139900 Mon Sep 17 00:00:00 2001 From: Binary Wang Date: Tue, 23 Jun 2026 11:18:21 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E3=80=90=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E3=80=91=E4=BF=AE=E5=A4=8D=20getUserEncryptKey=20=E7=AD=BE?= =?UTF-8?q?=E5=90=8D=E8=AE=A1=E7=AE=97=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/impl/WxMaInternetServiceImpl.java | 3 +- .../WxMaInternetServiceImplSignatureTest.java | 35 +++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImplSignatureTest.java diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImpl.java index 91d11795f..e1efeaa4a 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImpl.java @@ -9,7 +9,6 @@ import lombok.RequiredArgsConstructor; import me.chanjar.weixin.common.enums.WxType; import me.chanjar.weixin.common.error.WxError; import me.chanjar.weixin.common.error.WxErrorException; -import org.apache.commons.codec.binary.Base64; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; @@ -27,7 +26,7 @@ public class WxMaInternetServiceImpl implements WxMaInternetService { private String sha256(String data, String sessionKey) throws Exception { Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); - SecretKeySpec secret_key = new SecretKeySpec(Base64.decodeBase64(sessionKey), "HmacSHA256"); + SecretKeySpec secret_key = new SecretKeySpec(sessionKey.getBytes(StandardCharsets.UTF_8), "HmacSHA256"); sha256_HMAC.init(secret_key); byte[] array = sha256_HMAC.doFinal(data.getBytes(StandardCharsets.UTF_8)); StringBuilder sb = new StringBuilder(); diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImplSignatureTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImplSignatureTest.java new file mode 100644 index 000000000..236ead0dc --- /dev/null +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaInternetServiceImplSignatureTest.java @@ -0,0 +1,35 @@ +package cn.binarywang.wx.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.api.WxMaService; +import org.mockito.ArgumentCaptor; +import org.testng.annotations.Test; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +/** + * 服务端网络相关接口签名测试. + */ +public class WxMaInternetServiceImplSignatureTest { + @Test + public void testGetUserEncryptKeySignatureUsesRawSessionKey() throws Exception { + WxMaService wxMaService = mock(WxMaService.class); + when(wxMaService.post(anyString(), eq(""))).thenReturn("{\"errcode\":0,\"errmsg\":\"ok\"}"); + + String openid = "ogu-84hVFTbTt-myGisQESoDJ6BM"; + String sessionKey = "9ny8n3t0KULoi0deF7T9pw=="; + WxMaInternetServiceImpl service = new WxMaInternetServiceImpl(wxMaService); + + service.getUserEncryptKey(openid, sessionKey); + + ArgumentCaptor urlCaptor = ArgumentCaptor.forClass(String.class); + verify(wxMaService).post(urlCaptor.capture(), eq("")); + assertThat(urlCaptor.getValue()) + .contains("openid=" + openid) + .contains("signature=A6782009C273FDF75CAD421C9D3EAF6CA8715C1B15CB1E130EF40FE7901A9772"); + } +}