mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-08-24 16:18:51 +08:00
🎨 #2506 【小程序】补充完善获取用户encryptKey接口的参数
This commit is contained in:
parent
0601e8fb17
commit
1dc58f0021
@ -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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user