From 5c9ec87bb8361ba023d8cd1be6241060f3528511 Mon Sep 17 00:00:00 2001
From: 007gzs <007gzs@gmail.com>
Date: Tue, 21 Nov 2017 20:55:17 +0800
Subject: [PATCH] =?UTF-8?q?#379=20WxOpenXmlMessage=20=E5=A2=9E=E5=8A=A0=20?=
=?UTF-8?q?=E5=8A=A0=E5=AF=86=20WxMpXmlOutMessage=E6=8E=A5=E5=8F=A3=20MpCo?=
=?UTF-8?q?nfigStorage=20=E8=BF=94=E5=9B=9Eaeskey=E5=92=8Ctoken=20MpServic?=
=?UTF-8?q?e=E5=8F=AF=E4=BB=A5=E7=9B=B4=E6=8E=A5=E5=8A=A0=E5=AF=86=20=20?=
=?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E5=85=A8=E7=BD=91=E5=8F=91=E5=B8=83?=
=?UTF-8?q?=E7=94=A8=E4=BE=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* 增加 微信第三方平台 接口
* WxOpenXmlMessage 消息处理
* 增加 摇周边部分接口
* fix
* fix
* rebase
* 增加 摇周边部分接口
* fix
* fix
* unix 换行符
* fix 三方接口BUG
* fix URL 错误
* WxOpenMpServiceImpl 修改为包可见,防止用户混淆
WxOpenXmlMessage 增加 加密 WxMpXmlOutMessage接口
MpConfigStorage 返回aeskey和token MpService可以直接加密
增加 全网发布用例
---
weixin-java-open/README.md | 28 ++++++++++++++++++-
.../open/api/WxOpenComponentService.java | 4 +--
.../api/impl/WxOpenInMemoryConfigStorage.java | 4 +--
.../open/api/impl/WxOpenMpServiceImpl.java | 2 +-
.../open/bean/message/WxOpenXmlMessage.java | 7 +++++
5 files changed, 39 insertions(+), 6 deletions(-)
diff --git a/weixin-java-open/README.md b/weixin-java-open/README.md
index d99b77067..1f935a971 100644
--- a/weixin-java-open/README.md
+++ b/weixin-java-open/README.md
@@ -1,4 +1,6 @@
消息机制未实现,下面为通知回调中设置的代码部分
+
+以下代码可通过腾讯全网发布测试用例
```
@RestController
@RequestMapping("notify")
@@ -55,7 +57,31 @@ public class NotifyController extends WechatThridBaseController {
// aes加密的消息
WxMpXmlMessage inMessage = WxOpenXmlMessage.fromEncryptedMpXml(requestBody, wxOpenService.getWxOpenConfigStorage(), timestamp, nonce, msgSignature);
this.logger.debug("\n消息解密后内容为:\n{} ", inMessage.toString());
- //wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId);
+ // 全网发布测试用例
+ if (StringUtils.equalsAnyIgnoreCase(appId, "wxd101a85aa106f53e", "wx570bc396a51b8ff8")) {
+ try {
+ if (StringUtils.equals(inMessage.getMsgType(), "text")) {
+ if (StringUtils.equals(inMessage.getContent(), "TESTCOMPONENT_MSG_TYPE_TEXT")) {
+ out = new WxOpenCryptUtil(wxOpenService.getWxOpenConfigStorage()).encrypt(
+ WxMpXmlOutMessage.TEXT().content("TESTCOMPONENT_MSG_TYPE_TEXT_callback")
+ .fromUser(inMessage.getToUser())
+ .toUser(inMessage.getFromUser())
+ .build()
+ .toXml()
+ );
+ } else if (StringUtils.startsWith(inMessage.getContent(), "QUERY_AUTH_CODE:")) {
+ String msg = inMessage.getContent().replace("QUERY_AUTH_CODE:", "") + "_from_api";
+ WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(msg).toUser(inMessage.getFromUser()).build();
+ wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage);
+ }
+ } else if (StringUtils.equals(inMessage.getMsgType(), "event")) {
+ WxMpKefuMessage kefuMessage = WxMpKefuMessage.TEXT().content(inMessage.getEvent() + "from_callback").toUser(inMessage.getFromUser()).build();
+ wxOpenService.getWxOpenComponentService().getWxMpServiceByAppid(appId).getKefuService().sendKefuMessage(kefuMessage);
+ }
+ } catch (WxErrorException e) {
+ logger.error("callback", e);
+ }
+ }
return out;
}
}
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenComponentService.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenComponentService.java
index 966a89835..9dc5a6d3d 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenComponentService.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenComponentService.java
@@ -29,11 +29,11 @@ public interface WxOpenComponentService {
/**
* 用code换取oauth2的access token
*/
- 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";
+ 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";
/**
* 刷新oauth2的access token
*/
- 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";
+ 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";
WxMpService getWxMpServiceByAppid(String appid);
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java
index 687a57d77..50cf8b6e7 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java
@@ -329,7 +329,7 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage {
@Override
public String getToken() {
- return null;
+ return wxOpenConfigStorage.getComponentToken();
}
@Override
@@ -340,7 +340,7 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage {
@Override
public String getAesKey() {
- return null;
+ return wxOpenConfigStorage.getComponentAesKey();
}
@Override
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMpServiceImpl.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMpServiceImpl.java
index 0123e389c..9c537bc93 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMpServiceImpl.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMpServiceImpl.java
@@ -9,7 +9,7 @@ import me.chanjar.weixin.open.api.WxOpenComponentService;
/**
* @author 007
*/
-public class WxOpenMpServiceImpl extends WxMpServiceImpl {
+/* package */ class WxOpenMpServiceImpl extends WxMpServiceImpl {
private WxOpenComponentService wxOpenComponentService;
private WxMpConfigStorage wxMpConfigStorage;
private String appId;
diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/message/WxOpenXmlMessage.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/message/WxOpenXmlMessage.java
index 26c1791cd..8cb245ba3 100644
--- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/message/WxOpenXmlMessage.java
+++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/message/WxOpenXmlMessage.java
@@ -5,6 +5,7 @@ import com.thoughtworks.xstream.annotations.XStreamConverter;
import lombok.Data;
import me.chanjar.weixin.common.util.xml.XStreamCDataConverter;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
+import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.open.api.WxOpenConfigStorage;
import me.chanjar.weixin.open.util.WxOpenCryptUtil;
import me.chanjar.weixin.open.util.xml.XStreamTransformer;
@@ -52,6 +53,12 @@ public class WxOpenXmlMessage implements Serializable {
@XStreamConverter(value = XStreamCDataConverter.class)
private String preAuthCode;
+ public static String wxMpOutXmlMessageToEncryptedXml(WxMpXmlOutMessage message, WxOpenConfigStorage wxOpenConfigStorage){
+ String plainXml = message.toXml();
+ WxOpenCryptUtil pc = new WxOpenCryptUtil(wxOpenConfigStorage);
+ return pc.encrypt(plainXml);
+ }
+
public static WxOpenXmlMessage fromXml(String xml) {
//修改微信变态的消息内容格式,方便解析
xml = xml.replace("", "");