Skip to content

Commit

Permalink
🆕 #2281【小程序】增加小程序加密网络通道支持
Browse files Browse the repository at this point in the history
  • Loading branch information
chutian0124 committed Sep 7, 2021
1 parent f7f2121 commit 3c267bb
Show file tree
Hide file tree
Showing 8 changed files with 223 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package cn.binarywang.wx.miniapp.api;

import cn.binarywang.wx.miniapp.bean.internet.WxMaInternetResponse;
import me.chanjar.weixin.common.error.WxErrorException;

/**
* <pre>
* 【小程序-服务端-网络】网络相关接口.
* 文档地址: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
* </pre>
*
* @return {@link WxMaInternetResponse}
* @throws WxErrorException
*/
WxMaInternetResponse getUserEncryptKey() throws WxErrorException;
}
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,13 @@ public interface WxMaService extends WxService {
*/
WxMaCloudService getCloudService();

/**
* 获取服务端网络接口服务对象
*
* @return 。internet service
*/
WxMaInternetService getInternetService();

/**
* 获取直播接口服务对象
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public abstract class BaseWxMaServiceImpl<H, P> implements WxMaService, RequestH
private final WxMaSchemeService schemeService = new WxMaSchemeServiceImpl(this);
private final WxMaAnalysisService analysisService = new WxMaAnalysisServiceImpl(this);
private final WxMaCodeService codeService = new WxMaCodeServiceImpl(this);
private final WxMaInternetService internetService = new WxMaInternetServiceImpl(this);
private final WxMaSettingService settingService = new WxMaSettingServiceImpl(this);
private final WxMaJsapiService jsapiService = new WxMaJsapiServiceImpl(this);
private final WxMaShareService shareService = new WxMaShareServiceImpl(this);
Expand Down Expand Up @@ -488,6 +489,11 @@ public WxMaCloudService getCloudService() {
return this.cloudService;
}

@Override
public WxMaInternetService getInternetService() {
return this.internetService;
}

@Override
public WxMaLiveService getLiveService() {
return this.liveService;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package cn.binarywang.wx.miniapp.api.impl;

import cn.binarywang.wx.miniapp.api.WxMaInternetService;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.internet.WxMaInternetResponse;
import cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants;
import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
import lombok.RequiredArgsConstructor;
import me.chanjar.weixin.common.enums.WxType;
import me.chanjar.weixin.common.error.WxError;
import me.chanjar.weixin.common.error.WxErrorException;

/**
*
* 服务端网络相关接口
*
* @author <a href="https://github.com/chutian0124">chutian0124</a>
* @Date 2021-09-06
*/
@RequiredArgsConstructor
public class WxMaInternetServiceImpl implements WxMaInternetService {
private final WxMaService wxMaService;

@Override
public WxMaInternetResponse getUserEncryptKey() throws WxErrorException {
String responseContent = this.wxMaService.post(WxMaApiUrlConstants.Internet.GET_USER_ENCRYPT_KEY, "");
WxMaInternetResponse response = WxMaGsonBuilder.create().fromJson(responseContent, WxMaInternetResponse.class);
if (response.getErrcode() == -1) {
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
}
return response;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package cn.binarywang.wx.miniapp.bean.internet;

import cn.binarywang.wx.miniapp.bean.WxMaBaseResponse;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.io.Serializable;
import java.util.List;

/**
*
*
* <pre>
* 获取用户encryptKey。 用户最近三次的加密key,每个key的存活时间为3600s。
* 【小程序-服务端-网络】网络相关接口.
* 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/internet/internet.getUserEncryptKey.html
* 微信返回报文:
* {
* "errcode":0,
* "errmsg":"ok",
* "key_info_list":
* [
* {
* "encrypt_key":"VI6BpyrK9XH4i4AIGe86tg==",
* "version":10,
* "expire_in":3597,
* "iv":"6003f73ec441c386",
* "create_time":1616572301
* },
* {
* "encrypt_key":"aoUGAHltcliiL9f23oTKHA==",
* "version":9,
* "expire_in":0,
* "iv":"7996656384218dbb",
* "create_time":1616504886
* },
* {
* "encrypt_key":"MlZNQNnRQz3zXHHcr6A3mA==",
* "version":8,
* "expire_in":0,
* "iv":"58a1814f88883024",
* "create_time":1616488061
* }
* ]
* }
* </pre>
*
* @author <a href="https://github.com/chutian0124">chutian0124</a>
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class WxMaInternetResponse extends WxMaBaseResponse implements Serializable {

private static final long serialVersionUID = 6254922047193011785L;
/**
* 用户最近三次的加密key列表
*/
@SerializedName("key_info_list")
List<WxMaInternetUserKeyInfo> keyInfoList;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package cn.binarywang.wx.miniapp.bean.internet;

import com.google.gson.annotations.SerializedName;
import lombok.Data;

import java.io.Serializable;

/**
*
*
* <pre>
* 【小程序-服务端-网络】网络相关接口.
* 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/internet/internet.getUserEncryptKey.html
* 微信返回报文:
* {
* "encrypt_key":"VI6BpyrK9XH4i4AIGe86tg==",
* "version":10,
* "expire_in":3597,
* "iv":"6003f73ec441c386",
* "create_time":1616572301
* }
* </pre>
*
* @author <a href="https://github.com/chutian0124">chutian0124</a>
*/
@Data
public class WxMaInternetUserKeyInfo implements Serializable {
private static final long serialVersionUID = 117922490907396705L;
/**
* 加密key
*/
@SerializedName("encrypt_key")
private String encryptKey;

/**
* key的版本号
*/
private Integer version;

/**
* 剩余有效时间
*/
@SerializedName("expire_in")
private Long expireIn;

/**
* 加密iv
*/
private String iv;

/**
* 创建key的时间戳
*/
@SerializedName("create_time")
private Long createTime;
}
Original file line number Diff line number Diff line change
Expand Up @@ -388,4 +388,8 @@ public interface Invoice{
*/
String UPDATE_STATUS_BATCH = "https://api.weixin.qq.com/card/invoice/reimburse/updatestatusbatch";
}

public interface Internet{
String GET_USER_ENCRYPT_KEY = "https://api.weixin.qq.com/wxa/business/getuserencryptkey";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package cn.binarywang.wx.miniapp.api.impl;

import cn.binarywang.wx.miniapp.api.WxMaService;
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;

/**
*
* 服务端网络相关接口测试
*
* @author <a href="https://github.com/chutian0124">chutian0124</a>
* @date 2021-09-06
*/
@Test
@Guice(modules = ApiTestModule.class)
public class WxMaInternetServiceImplTest {
@Inject
private WxMaService wxService;

@Test
public void testGetUserEncryptKey() throws WxErrorException {
WxMaInternetResponse response = this.wxService.getInternetService().getUserEncryptKey();
System.out.println(response);
}
}

0 comments on commit 3c267bb

Please sign in to comment.