Skip to content

补充wxMaService.getInternetService().getUserEncryptKey()接口参数 #2506

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jan 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,36 @@
* 【小程序-服务端-网络】网络相关接口.
* 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/internet/internet.getUserEncryptKey.html
* </pre>
*
* @author <a href="https://github.com/chutian0124">chutian0124</a>
*/
public interface WxMaInternetService {
/**
* <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 signature 用sessionkey对空字符串签名得到的结果
* @param sigMethod 签名方法,只支持 hmac_sha256
* </pre>
*
*
* @return {@link WxMaInternetResponse}
* @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() throws WxErrorException;
WxMaInternetResponse getUserEncryptKey(String openid, String sessionKey) throws WxErrorException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,12 @@
import me.chanjar.weixin.common.enums.WxType;
import me.chanjar.weixin.common.error.WxError;
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>
Expand All @@ -21,9 +24,39 @@
public class WxMaInternetServiceImpl implements WxMaInternetService {
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
public WxMaInternetResponse getUserEncryptKey() throws WxErrorException {
String responseContent = this.wxMaService.post(WxMaApiUrlConstants.Internet.GET_USER_ENCRYPT_KEY, "");
public WxMaInternetResponse getUserEncryptKey(String openid, String signature, String sigMethod) throws WxErrorException {
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);
if (response.getErrcode() == -1) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@
import cn.binarywang.wx.miniapp.bean.internet.WxMaInternetResponse;
import cn.binarywang.wx.miniapp.test.ApiTestModule;
import com.google.inject.Inject;
import me.chanjar.weixin.common.error.WxErrorException;
import org.testng.annotations.Guice;
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>
Expand All @@ -21,9 +24,32 @@ public class WxMaInternetServiceImplTest {
@Inject
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
public void testGetUserEncryptKey() throws Exception {
String openid = "ogu-84hVFTbTt-myGisQESoDJ6BM";
String signature = HMACSHA256("", "9ny8n3t0KULoi0deF7T9pw==");
String sigMethod = "hmac_sha256";
WxMaInternetResponse response = this.wxService.getInternetService().getUserEncryptKey(openid, signature, sigMethod);
assertThat(response).isNotNull();
}

@Test
public void testGetUserEncryptKey() throws WxErrorException {
WxMaInternetResponse response = this.wxService.getInternetService().getUserEncryptKey();
System.out.println(response);
public void testGetUserEncryptKey2() throws Exception {
String openid = "ogu-84hVFTbTt-myGisQESoDJ6BM";
String sessionKey = "9ny8n3t0KULoi0deF7T9pw==";
WxMaInternetResponse response = this.wxService.getInternetService().getUserEncryptKey(openid, sessionKey);
assertThat(response).isNotNull();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,9 @@ public void testSetUserStorage() throws WxErrorException {
public void testGetNewPhoneNoInfo() throws Exception{
assertNotNull(wxService.getUserService().getNewPhoneNoInfo("test"));
}

@Test
public void testGetAccessToken() throws Exception{
assertNotNull(wxService.getAccessToken(true));
}
}