diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaUserService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaUserService.java index 21696701d..008c025f1 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaUserService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaUserService.java @@ -60,6 +60,12 @@ public interface WxMaUserService { /** * 获取手机号信息,基础库:2.21.2及以上或2023年8月28日起 * + *
若已配置 {@code apiSignatureAesKey} 及 {@code apiSignatureRsaPrivateKey} 开启服务端 API 签名,
+ * 该接口请求将自动走加密 + RSA 签名路径(见
+ * API签名文档)。
+ * 签名串格式为 {@code urlpath\nappid\ntimestamp\npostdata}(4 个字段),
+ * RSA 私钥序列号通过请求头 {@code Wechatmp-Serial} 传递,不包含在签名串中。
+ *
* @param code 每个code只能使用一次,code的有效期为5min。code获取方式参考手机号快速验证组件
* @return 用户手机号信息
* @throws WxErrorException .
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
index 13b4248e2..6ab0293e0 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java
@@ -915,11 +915,17 @@ public abstract class BaseWxMaServiceImpl 注意:RSA 私钥序列号(rsaKeySn)不应包含在待签名串中,它应通过请求头
+ * {@code Wechatmp-Serial} 传递。4.8.0 曾错误地将 rsaKeySn 插入签名串(产生 5 个字段),
+ * 导致所有走 API 签名路径的接口(包括 {@code getPhoneNumber}、同城配送等)返回 40234
+ * {@code invalid signature}。此方法明确使用 4 字段格式以确保签名正确。
+ *
+ * @param urlPath 当前请求 API 的 URL,不含 Query 参数
+ * @param appId 小程序 AppId
+ * @param timestamp 签名时的时间戳
+ * @param postData 加密后的请求 POST 数据(JSON 字符串)
* @return 拼接好的待签名串
+ * @see 微信服务端API签名指南
*/
static String buildSignaturePayload(String urlPath, String appId, long timestamp, String postData) {
return urlPath + "\n" + appId + "\n" + timestamp + "\n" + postData;
diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSignaturePayloadTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSignaturePayloadTest.java
index 82f436fe5..7d1066a0f 100644
--- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSignaturePayloadTest.java
+++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSignaturePayloadTest.java
@@ -3,16 +3,21 @@ package cn.binarywang.wx.miniapp.api.impl;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
+import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
- * 验证同城配送 API 签名 payload 格式的单元测试。
+ * 验证小程序 API 签名 payload 格式的单元测试。
*
* 直接测试 {@link BaseWxMaServiceImpl#buildSignaturePayload} 生产方法,
* 确保待签名串格式符合微信官方规范:
* 字段之间使用换行符 {@code \n} 分隔,共 4 个字段,末尾无额外回车符。
*
- * @param urlPath 当前请求 API 的 URL,不含 Query 参数
- * @param appId 小程序 AppId
- * @param timestamp 签名时的时间戳
- * @param postData 加密后的请求 POST 数据(JSON 字符串)
+ *
* {@code urlpath\nappid\ntimestamp\npostdata}
* 共 4 个字段,字段间以换行符 {@code \n} 分隔,末尾无额外回车符。
*
+ *