Skip to content

Commit 5c9ec87

Browse files
007gzsbinarywang
authored andcommitted
#379 WxOpenXmlMessage 增加 加密 WxMpXmlOutMessage接口 MpConfigStorage 返回aeskey和token MpService可以直接加密 增加 全网发布用例
* 增加 微信第三方平台 接口 * WxOpenXmlMessage 消息处理 * 增加 摇周边部分接口 * fix * fix * rebase * 增加 摇周边部分接口 * fix * fix * unix 换行符 * fix 三方接口BUG * fix URL 错误 * WxOpenMpServiceImpl 修改为包可见,防止用户混淆 WxOpenXmlMessage 增加 加密 WxMpXmlOutMessage接口 MpConfigStorage 返回aeskey和token MpService可以直接加密 增加 全网发布用例
1 parent 5564870 commit 5c9ec87

File tree

5 files changed

+39
-6
lines changed

5 files changed

+39
-6
lines changed

weixin-java-open/README.md

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
消息机制未实现,下面为通知回调中设置的代码部分
2+
3+
以下代码可通过腾讯全网发布测试用例
24
```
35
@RestController
46
@RequestMapping("notify")
@@ -55,7 +57,31 @@ public class NotifyController extends WechatThridBaseController {
5557
// aes加密的消息
5658
WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(requestBody, wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);
5759
this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString());
58-
//wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId);
60+
// 全网发布测试用例
61+
if (StringUtils.equalsAnyIgnoreCase(appId, "wxd101a85aa106f53e", "wx570bc396a51b8ff8")) {
62+
try {
63+
if (StringUtils.equals(inMessage.getMsgType(), "text")) {
64+
if (StringUtils.equals(inMessage.getContent(), "TESTCOMPONENT_MSG_TYPE_TEXT")) {
65+
out = new WxOpenCryptUtil(wxOpenService.getWxOpenConfigStorage()).encrypt(
66+
WxMpXmlOutMessage.TEXT().content("TESTCOMPONENT_MSG_TYPE_TEXT_callback")
67+
.fromUser(inMessage.getToUser())
68+
.toUser(inMessage.getFromUser())
69+
.build()
70+
.toXml()
71+
);
72+
} else if (StringUtils.startsWith(inMessage.getContent(), "QUERY_AUTH_CODE:")) {
73+
String msg = inMessage.getContent().replace("QUERY_AUTH_CODE:", "") + "_from_api";
74+
WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(msg).toUser(inMessage.getFromUser()).build();
75+
wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage);
76+
}
77+
} else if (StringUtils.equals(inMessage.getMsgType(), "event")) {
78+
WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(inMessage.getEvent() + "from_callback").toUser(inMessage.getFromUser()).build();
79+
wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage);
80+
}
81+
} catch (WxErrorException e) {
82+
logger.error("callback", e);
83+
}
84+
}
5985
return out;
6086
}
6187
}

weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenComponentService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ public interface WxOpenComponentService {
2929
/**
3030
* 用code换取oauth2的access token
3131
*/
32-
String OAUTH2_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&code=%s&grant_type=authorization_code&component_appid=%s";
32+
String OAUTH2_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/component/access_token?appid=%s&code=%s&grant_type=authorization_code&component_appid=%s";
3333
/**
3434
* 刷新oauth2的access token
3535
*/
36-
String OAUTH2_REFRESH_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%s&grant_type=refresh_token&refresh_token=%s&component_appid==%s";
36+
String OAUTH2_REFRESH_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/component/refresh_token?appid=%s&grant_type=refresh_token&refresh_token=%s&component_appid==%s";
3737

3838
WxMpService getWxMpServiceByAppid(String appid);
3939

weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ public String getSecret() {
329329

330330
@Override
331331
public String getToken() {
332-
return null;
332+
return wxOpenConfigStorage.getComponentToken();
333333
}
334334

335335
@Override
@@ -340,7 +340,7 @@ public long getExpiresTime() {
340340

341341
@Override
342342
public String getAesKey() {
343-
return null;
343+
return wxOpenConfigStorage.getComponentAesKey();
344344
}
345345

346346
@Override

weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMpServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
/**
1010
* @author <a href="https://github.com/007gzs">007</a>
1111
*/
12-
public class WxOpenMpServiceImpl extends WxMpServiceImpl {
12+
/* package */ class WxOpenMpServiceImpl extends WxMpServiceImpl {
1313
private WxOpenComponentService wxOpenComponentService;
1414
private WxMpConfigStorage wxMpConfigStorage;
1515
private String appId;

weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/message/WxOpenXmlMessage.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import lombok.Data;
66
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
77
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
8+
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
89
import me.chanjar.weixin.open.api.WxOpenConfigStorage;
910
import me.chanjar.weixin.open.util.WxOpenCryptUtil;
1011
import me.chanjar.weixin.open.util.xml.XStreamTransformer;
@@ -52,6 +53,12 @@ public class WxOpenXmlMessage implements Serializable {
5253
@XStreamConverter(value = XStreamCDataConverter.class)
5354
private String preAuthCode;
5455

56+
public static String wxMpOutXmlMessageToEncryptedXml(WxMpXmlOutMessage message, WxOpenConfigStorage wxOpenConfigStorage){
57+
String plainXml = message.toXml();
58+
WxOpenCryptUtil pc = new WxOpenCryptUtil(wxOpenConfigStorage);
59+
return pc.encrypt(plainXml);
60+
}
61+
5562
public static WxOpenXmlMessage fromXml(String xml) {
5663
//修改微信变态的消息内容格式,方便解析
5764
xml = xml.replace("</PicList><PicList>", "");

0 commit comments

Comments
 (0)