mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 18:46:10 +08:00 
			
		
		
		
	🎨 #2506 【小程序】补充完善获取用户encryptKey接口的参数
This commit is contained in:
		| @ -8,20 +8,36 @@ import me.chanjar.weixin.common.error.WxErrorException; | |||||||
|  * 【小程序-服务端-网络】网络相关接口. |  * 【小程序-服务端-网络】网络相关接口. | ||||||
|  *  文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/internet/internet.getUserEncryptKey.html |  *  文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/internet/internet.getUserEncryptKey.html | ||||||
|  * </pre> |  * </pre> | ||||||
|  |  * | ||||||
|  * @author <a href="https://github.com/chutian0124">chutian0124</a> |  * @author <a href="https://github.com/chutian0124">chutian0124</a> | ||||||
|  */ |  */ | ||||||
| public interface WxMaInternetService { | public interface WxMaInternetService { | ||||||
|   /** |   /** | ||||||
|    * |  | ||||||
|    * |  | ||||||
|    * <pre> |    * <pre> | ||||||
|    * 获取用户encryptKey。 会获取用户最近3次的key,每个key的存活时间为3600s。 |    * 获取用户encryptKey。 会获取用户最近3次的key,每个key的存活时间为3600s。 | ||||||
|    * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/internet/internet.getUserEncryptKey.html |    * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/internet/internet.getUserEncryptKey.html | ||||||
|    * 接口地址:POST https://api.weixin.qq.com/wxa/business/getuserencryptkey?access_token=ACCESS_TOKEN&openid=OPENID&signature=SIGNATURE&sig_method=hmac_sha256 |    * 接口地址:POST https://api.weixin.qq.com/wxa/business/getuserencryptkey?access_token=ACCESS_TOKEN&openid=OPENID&signature=SIGNATURE&sig_method=hmac_sha256 | ||||||
|  |    * @param openid 用户的openid | ||||||
|  |    * @param signature 用sessionkey对空字符串签名得到的结果 | ||||||
|  |    * @param sigMethod 签名方法,只支持 hmac_sha256 | ||||||
|    * </pre> |    * </pre> | ||||||
|    * |    * | ||||||
|    * @return {@link WxMaInternetResponse} |    * @return {@link WxMaInternetResponse} | ||||||
|    * @throws WxErrorException |    * @throws WxErrorException | ||||||
|    */ |    */ | ||||||
|   WxMaInternetResponse getUserEncryptKey() throws WxErrorException; |   WxMaInternetResponse getUserEncryptKey(String openid, String signature, String sigMethod) throws WxErrorException; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * <pre> | ||||||
|  |    * 获取用户encryptKey。 会获取用户最近3次的key,每个key的存活时间为3600s。 | ||||||
|  |    * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/internet/internet.getUserEncryptKey.html | ||||||
|  |    * 接口地址:POST https://api.weixin.qq.com/wxa/business/getuserencryptkey?access_token=ACCESS_TOKEN&openid=OPENID&signature=SIGNATURE&sig_method=hmac_sha256 | ||||||
|  |    * @param openid 用户的openid | ||||||
|  |    * @param sessionKey 用户的sessionKey | ||||||
|  |    * </pre> | ||||||
|  |    * | ||||||
|  |    * @return {@link WxMaInternetResponse} | ||||||
|  |    * @throws WxErrorException | ||||||
|  |    */ | ||||||
|  |   WxMaInternetResponse getUserEncryptKey(String openid, String sessionKey) throws WxErrorException; | ||||||
| } | } | ||||||
|  | |||||||
| @ -9,9 +9,12 @@ import lombok.RequiredArgsConstructor; | |||||||
| import me.chanjar.weixin.common.enums.WxType; | import me.chanjar.weixin.common.enums.WxType; | ||||||
| import me.chanjar.weixin.common.error.WxError; | import me.chanjar.weixin.common.error.WxError; | ||||||
| import me.chanjar.weixin.common.error.WxErrorException; | import me.chanjar.weixin.common.error.WxErrorException; | ||||||
|  | import org.jetbrains.annotations.NotNull; | ||||||
|  |  | ||||||
|  | import javax.crypto.Mac; | ||||||
|  | import javax.crypto.spec.SecretKeySpec; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * |  | ||||||
|  * 服务端网络相关接口 |  * 服务端网络相关接口 | ||||||
|  * |  * | ||||||
|  * @author <a href="https://github.com/chutian0124">chutian0124</a> |  * @author <a href="https://github.com/chutian0124">chutian0124</a> | ||||||
| @ -21,9 +24,39 @@ import me.chanjar.weixin.common.error.WxErrorException; | |||||||
| public class WxMaInternetServiceImpl implements WxMaInternetService { | public class WxMaInternetServiceImpl implements WxMaInternetService { | ||||||
|   private final WxMaService wxMaService; |   private final WxMaService wxMaService; | ||||||
|  |  | ||||||
|  |   private String sha256(String data, String sessionKey) throws Exception { | ||||||
|  |     Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); | ||||||
|  |     SecretKeySpec secret_key = new SecretKeySpec(sessionKey.getBytes("UTF-8"), "HmacSHA256"); | ||||||
|  |     sha256_HMAC.init(secret_key); | ||||||
|  |     byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8")); | ||||||
|  |     StringBuilder sb = new StringBuilder(); | ||||||
|  |     for (byte item : array) { | ||||||
|  |       sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3)); | ||||||
|  |     } | ||||||
|  |     return sb.toString().toUpperCase(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   @Override |   @Override | ||||||
|   public WxMaInternetResponse getUserEncryptKey() throws WxErrorException { |   public WxMaInternetResponse getUserEncryptKey(String openid, String signature, String sigMethod) throws WxErrorException { | ||||||
|     String responseContent = this.wxMaService.post(WxMaApiUrlConstants.Internet.GET_USER_ENCRYPT_KEY, ""); |     String url = WxMaApiUrlConstants.Internet.GET_USER_ENCRYPT_KEY + "?openid=" + openid + "&signature=" + signature + "&sig_method=" + sigMethod; | ||||||
|  |     return getWxMaInternetResponse(url); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @Override | ||||||
|  |   public WxMaInternetResponse getUserEncryptKey(String openid, String sessionKey) throws WxErrorException { | ||||||
|  |     String signature = null; | ||||||
|  |     try { | ||||||
|  |       signature = sha256("", sessionKey); | ||||||
|  |     } catch (Exception e) { | ||||||
|  |       throw new WxErrorException("签名错误"); | ||||||
|  |     } | ||||||
|  |     String url = WxMaApiUrlConstants.Internet.GET_USER_ENCRYPT_KEY + "?sig_method=hmac_sha256&openid=" + openid + "&signature=" + signature; | ||||||
|  |     return getWxMaInternetResponse(url); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @NotNull | ||||||
|  |   private WxMaInternetResponse getWxMaInternetResponse(String url) throws WxErrorException { | ||||||
|  |     String responseContent = this.wxMaService.post(url, ""); | ||||||
|     WxMaInternetResponse response = WxMaGsonBuilder.create().fromJson(responseContent, WxMaInternetResponse.class); |     WxMaInternetResponse response = WxMaGsonBuilder.create().fromJson(responseContent, WxMaInternetResponse.class); | ||||||
|     if (response.getErrcode() == -1) { |     if (response.getErrcode() == -1) { | ||||||
|       throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); |       throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); | ||||||
|  | |||||||
| @ -4,12 +4,15 @@ import cn.binarywang.wx.miniapp.api.WxMaService; | |||||||
| import cn.binarywang.wx.miniapp.bean.internet.WxMaInternetResponse; | import cn.binarywang.wx.miniapp.bean.internet.WxMaInternetResponse; | ||||||
| import cn.binarywang.wx.miniapp.test.ApiTestModule; | import cn.binarywang.wx.miniapp.test.ApiTestModule; | ||||||
| import com.google.inject.Inject; | import com.google.inject.Inject; | ||||||
| import me.chanjar.weixin.common.error.WxErrorException; |  | ||||||
| import org.testng.annotations.Guice; | import org.testng.annotations.Guice; | ||||||
| import org.testng.annotations.Test; | import org.testng.annotations.Test; | ||||||
|  |  | ||||||
|  | import javax.crypto.Mac; | ||||||
|  | import javax.crypto.spec.SecretKeySpec; | ||||||
|  |  | ||||||
|  | import static org.assertj.core.api.Assertions.assertThat; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * |  | ||||||
|  * 服务端网络相关接口测试 |  * 服务端网络相关接口测试 | ||||||
|  * |  * | ||||||
|  * @author <a href="https://github.com/chutian0124">chutian0124</a> |  * @author <a href="https://github.com/chutian0124">chutian0124</a> | ||||||
| @ -21,9 +24,32 @@ public class WxMaInternetServiceImplTest { | |||||||
|   @Inject |   @Inject | ||||||
|   private WxMaService wxService; |   private WxMaService wxService; | ||||||
|  |  | ||||||
|  |   private static String HMACSHA256(String data, String key) throws Exception { | ||||||
|  |     Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); | ||||||
|  |     SecretKeySpec secret_key = new SecretKeySpec(key.getBytes("UTF-8"), "HmacSHA256"); | ||||||
|  |     sha256_HMAC.init(secret_key); | ||||||
|  |     byte[] array = sha256_HMAC.doFinal(data.getBytes("UTF-8")); | ||||||
|  |     StringBuilder sb = new StringBuilder(); | ||||||
|  |     for (byte item : array) { | ||||||
|  |       sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3)); | ||||||
|  |     } | ||||||
|  |     return sb.toString().toUpperCase(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   @Test |   @Test | ||||||
|   public void testGetUserEncryptKey() throws WxErrorException { |   public void testGetUserEncryptKey() throws Exception { | ||||||
|     WxMaInternetResponse response = this.wxService.getInternetService().getUserEncryptKey(); |     String openid = "ogu-84hVFTbTt-myGisQESoDJ6BM"; | ||||||
|     System.out.println(response); |     String signature = HMACSHA256("", "9ny8n3t0KULoi0deF7T9pw=="); | ||||||
|  |     String sigMethod = "hmac_sha256"; | ||||||
|  |     WxMaInternetResponse response = this.wxService.getInternetService().getUserEncryptKey(openid, signature, sigMethod); | ||||||
|  |     assertThat(response).isNotNull(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @Test | ||||||
|  |   public void testGetUserEncryptKey2() throws Exception { | ||||||
|  |     String openid = "ogu-84hVFTbTt-myGisQESoDJ6BM"; | ||||||
|  |     String sessionKey = "9ny8n3t0KULoi0deF7T9pw=="; | ||||||
|  |     WxMaInternetResponse response = this.wxService.getInternetService().getUserEncryptKey(openid, sessionKey); | ||||||
|  |     assertThat(response).isNotNull(); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -76,4 +76,9 @@ public class WxMaUserServiceImplTest { | |||||||
|   public void testGetNewPhoneNoInfo() throws Exception{ |   public void testGetNewPhoneNoInfo() throws Exception{ | ||||||
|     assertNotNull(wxService.getUserService().getNewPhoneNoInfo("test")); |     assertNotNull(wxService.getUserService().getNewPhoneNoInfo("test")); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   @Test | ||||||
|  |   public void testGetAccessToken() throws Exception{ | ||||||
|  |     assertNotNull(wxService.getAccessToken(true)); | ||||||
|  |   } | ||||||
| } | } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 huazai
					huazai