() {
+
+ @Override
+ public ComponentSnsAccessToken call() throws Exception {
+ String json = HttpUtils.get(url, queryParas);
+ return new ComponentSnsAccessToken(json);
+ }
+ });
+ }
+}
diff --git a/src/main/java/com/jfinal/weixin/sdk/jfinal/MsgInterceptor.java b/src/main/java/com/jfinal/weixin/sdk/jfinal/MsgInterceptor.java
index ccb2002b5d46691299be4926405510b141098816..632d69c7bdc0d393a5f9036b0f7691388ee465ba 100644
--- a/src/main/java/com/jfinal/weixin/sdk/jfinal/MsgInterceptor.java
+++ b/src/main/java/com/jfinal/weixin/sdk/jfinal/MsgInterceptor.java
@@ -37,10 +37,22 @@ public class MsgInterceptor implements Interceptor {
throw new RuntimeException("控制器需要继承 MsgController");
try {
- String appId = _parser.getAppId(controller);
- // 将 appId 与当前线程绑定,以便在后续操作中方便获取ApiConfig对象: ApiConfigKit.getApiConfig();
- ApiConfigKit.setThreadLocalAppId(appId);
-
+
+ if(ApiConfigKit.isComponentMode()){
+ /**
+ * 代公众号处理消息和事件,获取 appid
+ * 收到消息的示例 /msg/wx1d72971e8550ae68?signature=8c9……
+ */
+ String authorizerAppId = controller.getPara(0);
+ ApiConfigKit.setThreadLocalAuthorizerAppId(authorizerAppId);
+ ApiConfigKit.setThreadLocalComponentApiConfig(ApiConfigKit.getApiConfig());
+
+ } else {
+ String appId = _parser.getAppId(controller);
+ // 将 appId 与当前线程绑定,以便在后续操作中方便获取ApiConfig对象: ApiConfigKit.getApiConfig();
+ ApiConfigKit.setThreadLocalAppId(appId);
+ }
+
// 如果是服务器配置请求,则配置服务器并返回
if (isConfigServerRequest(controller)) {
configServer(controller);
@@ -60,7 +72,8 @@ public class MsgInterceptor implements Interceptor {
}
} finally {
- ApiConfigKit.removeThreadLocalAppId();
+ ApiConfigKit.removeThreadLocalAuthorizerAppId();
+ ApiConfigKit.removeThreadLocalComponentApiConfig();
}
}
diff --git a/src/main/java/com/jfinal/weixin/sdk/jfinal/component/AuthMessageController.java b/src/main/java/com/jfinal/weixin/sdk/jfinal/component/AuthMessageController.java
index d9df99cd29dcafde43c0886f1077bc08f7b5f11d..00e725df3284d748aedbbcd1098925eaa549c8a2 100644
--- a/src/main/java/com/jfinal/weixin/sdk/jfinal/component/AuthMessageController.java
+++ b/src/main/java/com/jfinal/weixin/sdk/jfinal/component/AuthMessageController.java
@@ -11,19 +11,22 @@ import com.jfinal.core.Controller;
import com.jfinal.ext.interceptor.NotAction;
import com.jfinal.kit.HttpKit;
import com.jfinal.kit.StrKit;
-import com.jfinal.log.Log;
import com.jfinal.weixin.sdk.api.ApiConfig;
import com.jfinal.weixin.sdk.api.ApiConfigKit;
import com.jfinal.weixin.sdk.kit.MsgEncryptKit;
import com.jfinal.weixin.sdk.msg.ComponentMsgParser;
-import com.jfinal.weixin.sdk.msg.component.*;
+import com.jfinal.weixin.sdk.msg.component.AuthMsg;
+import com.jfinal.weixin.sdk.msg.component.AuthorizedMsg;
+import com.jfinal.weixin.sdk.msg.component.ComponentVerifyTicketMsg;
+import com.jfinal.weixin.sdk.msg.component.NotDefinedComponentMsg;
+import com.jfinal.weixin.sdk.msg.component.UnAuthorizedMsg;
+import com.jfinal.weixin.sdk.msg.component.UpdateAuthorizedMsg;
/**
* 接收微信服务器消息,自动解析成 InMsg 并分发到相应的处理方法
*/
public abstract class AuthMessageController extends Controller {
- private static final Log log = Log.getLog(AuthMessageController.class);
private String inMsgXml = null; // 本次请求 xml数据
private AuthMsg inMsg = null; // 本次请求 xml 解析后的 InMsg 对象
diff --git a/src/main/java/com/jfinal/weixin/sdk/jfinal/component/AuthMessageControllerAdapter.java b/src/main/java/com/jfinal/weixin/sdk/jfinal/component/AuthMessageControllerAdapter.java
index c49d8d1b915f0f5b8f8255b5b6d16b5cdc8f4054..fa8bc070ddb60fd0daa478a1f85abf1f0d124c20 100644
--- a/src/main/java/com/jfinal/weixin/sdk/jfinal/component/AuthMessageControllerAdapter.java
+++ b/src/main/java/com/jfinal/weixin/sdk/jfinal/component/AuthMessageControllerAdapter.java
@@ -13,7 +13,12 @@ import com.jfinal.weixin.sdk.cache.IAccessTokenCache;
import com.jfinal.weixin.sdk.msg.component.*;
/**
- * 接收微信服务器消息,自动解析成 InMsg 并分发到相应的处理方法
+ * 接收微信服务器消息,自动解析成 InMsg 并分发到相应的处理方法
+ * 消息类型:
+ * component_verify_ticket 微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,用于获取第三方平台接口调用凭据
+ * authorized 授权成功通知
+ * unauthorized 取消授权通知
+ * updateauthorized 授权更新通知
*/
public abstract class AuthMessageControllerAdapter extends AuthMessageController {
diff --git a/src/main/java/com/jfinal/weixin/sdk/jfinal/component/ComponentAPIInterceptor.java b/src/main/java/com/jfinal/weixin/sdk/jfinal/component/ComponentAPIInterceptor.java
index 72245cdb0a7600563c7de489d5796e498ddf9241..fad7834c428d2c80734eb1039e9ff61912468fa1 100644
--- a/src/main/java/com/jfinal/weixin/sdk/jfinal/component/ComponentAPIInterceptor.java
+++ b/src/main/java/com/jfinal/weixin/sdk/jfinal/component/ComponentAPIInterceptor.java
@@ -17,9 +17,13 @@ public class ComponentAPIInterceptor implements Interceptor {
throw new RuntimeException("控制器需要继承 ApiController");
try {
- ApiConfigKit.setThreadLocalComponentApiConfig(((ComponentAPIController) controller).getApiConfig());
+
+ ApiConfigKit.setThreadLocalComponentApiConfig(ApiConfigKit.getApiConfig());
+
inv.invoke();
+
} finally {
+ ApiConfigKit.removeThreadLocalAuthorizerAppId();
ApiConfigKit.removeThreadLocalComponentApiConfig();
}
}
diff --git a/src/main/java/com/jfinal/weixin/sdk/msg/component/AuthMsg.java b/src/main/java/com/jfinal/weixin/sdk/msg/component/AuthMsg.java
index b5bed6e2bcb0a36fe84715bbdceb2cdeca2a7b3e..c6ff17ab7aa51b7dfabc362aace4b759353ec500 100644
--- a/src/main/java/com/jfinal/weixin/sdk/msg/component/AuthMsg.java
+++ b/src/main/java/com/jfinal/weixin/sdk/msg/component/AuthMsg.java
@@ -8,16 +8,7 @@ package com.jfinal.weixin.sdk.msg.component;
/**
*
- * 接收消息,以下是接收文本消息的例子
- * 接收文本消息
- * <xml>
- * <ToUserName><![CDATA[toUser]]></ToUserName>
- * <FromUserName><![CDATA[fromUser]]></FromUserName>
- * <CreateTime>1348831860</CreateTime>
- * <MsgType><![CDATA[text]]></MsgType>
- * <Content><![CDATA[this is a test]]></Content>
- * <MsgId>1234567890123456</MsgId>
- * </xml>
+ * 接收公众号授权给第三方平台的消息
*
*/
public abstract class AuthMsg {
@@ -30,13 +21,10 @@ public abstract class AuthMsg {
/**
* 消息类型
- * 1:text 文本消息
- * 2:image 图片消息
- * 3:voice 语音消息
- * 4:video 视频消息
- * 5:location 地址位置消息
- * 6:link 链接消息
- * 7:event 事件
+ * 1:component_verify_ticket 每10分钟推送一次的安全ticket
+ * 2:authorized 授权成功通知
+ * 3:unauthorized 取消授权通知
+ * 4:updateauthorized 授权更新通知
*/
protected String infoType;
diff --git a/src/main/java/com/jfinal/weixin/sdk/msg/component/AuthorizedMsg.java b/src/main/java/com/jfinal/weixin/sdk/msg/component/AuthorizedMsg.java
index ac05c0e9ea7689871a3aec7371bf3c0bd59d948e..e567eb248299de1fc978a616ba7d0b6d616dd332 100644
--- a/src/main/java/com/jfinal/weixin/sdk/msg/component/AuthorizedMsg.java
+++ b/src/main/java/com/jfinal/weixin/sdk/msg/component/AuthorizedMsg.java
@@ -8,12 +8,14 @@ package com.jfinal.weixin.sdk.msg.component;
/**
*
- * 接收文本消息
+ * 接收公众号对第三方平台授权成功的通知
*
- *
+ * 第三方平台appid
* 1413192605
- *
- *
+ * authorized
+ * 公众号appid
+ * 授权码(code)
+ * 过期时间
*
*
*/
diff --git a/src/main/java/com/jfinal/weixin/sdk/msg/component/ComponentVerifyTicketMsg.java b/src/main/java/com/jfinal/weixin/sdk/msg/component/ComponentVerifyTicketMsg.java
index 569026c6d3c19792f2ab9c5a98365172aaae698f..004c782e20a60a5682dafdf54bbe6ef73aac5c56 100644
--- a/src/main/java/com/jfinal/weixin/sdk/msg/component/ComponentVerifyTicketMsg.java
+++ b/src/main/java/com/jfinal/weixin/sdk/msg/component/ComponentVerifyTicketMsg.java
@@ -8,12 +8,12 @@ package com.jfinal.weixin.sdk.msg.component;
/**
*
- * 接收文本消息
+ * 接收微信服务器每隔 10 分钟定时推送 component_verify_ticket 的消息
*
- *
+ * 第三方平台appid
* 1413192605
- *
- *
+ * component_verify_ticket
+ * Ticket内容
*
*
*/
diff --git a/src/main/java/com/jfinal/weixin/sdk/msg/component/UnAuthorizedMsg.java b/src/main/java/com/jfinal/weixin/sdk/msg/component/UnAuthorizedMsg.java
index efbbc175ed95cfedf7467f583ecaa33fd5ba86b2..f98245d1cbc1504d0ec088b6c6142bedefa8ff5f 100644
--- a/src/main/java/com/jfinal/weixin/sdk/msg/component/UnAuthorizedMsg.java
+++ b/src/main/java/com/jfinal/weixin/sdk/msg/component/UnAuthorizedMsg.java
@@ -8,14 +8,12 @@ package com.jfinal.weixin.sdk.msg.component;
/**
*
- * 接收文本消息
+ * 接收公众号对第三方平台取消授权的通知
*
* 第三方平台appid
* 1413192760
- * authorized
+ * unauthorized
* 公众号appid
- * 授权码(code)
- * 过期时间
*
*
*/
diff --git a/src/main/java/com/jfinal/weixin/sdk/msg/component/UpdateAuthorizedMsg.java b/src/main/java/com/jfinal/weixin/sdk/msg/component/UpdateAuthorizedMsg.java
index 28a538b475e32d4cbe061c4d1d893286d1728843..1606497de4e75b7e034ab14e4750b131d8a2f90e 100644
--- a/src/main/java/com/jfinal/weixin/sdk/msg/component/UpdateAuthorizedMsg.java
+++ b/src/main/java/com/jfinal/weixin/sdk/msg/component/UpdateAuthorizedMsg.java
@@ -8,7 +8,7 @@ package com.jfinal.weixin.sdk.msg.component;
/**
*
- * 接收文本消息
+ * 接收公众号对第三方平台更新授权的通知
*
* 第三方平台appid
* 1413192760
diff --git a/src/main/resources/a_little_config.txt b/src/main/resources/a_little_config.txt
index ab466cefe11e6bd638cdc8f4a6739037fe38efc7..7fbeaf67768e3eaee2c8e54309516ef525e9018c 100644
--- a/src/main/resources/a_little_config.txt
+++ b/src/main/resources/a_little_config.txt
@@ -2,6 +2,8 @@ jdbcUrl = jdbc:mysql://127.0.0.1/jfinal_weixin?characterEncoding=utf8&zeroDateTi
user = root
password =
devMode = true
+# 公众号第三方平台模式
+componentMode = true
# 微信服务器回调所用的 token
token=__my__token__
@@ -10,8 +12,14 @@ token=__my__token__
appId=wx9803d1188fa5fbda
appSecret=db859c968763c582794e7c3d003c3d87
-#是否对消息进行加密,是否对消息进行加密,对应于微信平台的消息加解密方式,false支持明文模式及兼容模式,true支持安全模式及兼容模式
-#encryptMessage=true
-#encodingAesKey=yourEncodingAesKey
+# 公众号第三方平台
+# 注意:最后一对 appId、appSecret 才是有效的
+appId=wx1***************
+appSecret=779*****************************
+
+# 是否对消息进行加密,是否对消息进行加密,对应于微信平台的消息加解密方式,false支持明文模式及兼容模式,true支持安全模式及兼容模式
+# 如果公众号第三方平台模式= true,encryptMessage 必须设置为 true
+encryptMessage=true
+encodingAesKey=yourEncodingAesKey
diff --git a/src/main/webapp/WEB-INF/services/com.jfinal.weixin.sdk.api.component b/src/main/webapp/WEB-INF/services/com.jfinal.weixin.sdk.api.component
new file mode 100644
index 0000000000000000000000000000000000000000..7f4c7c132087983f5cb88261f75857c1cf2f4d1e
--- /dev/null
+++ b/src/main/webapp/WEB-INF/services/com.jfinal.weixin.sdk.api.component
@@ -0,0 +1 @@
+com.jfinal.weixin.sdk.api.component.DefaultAuthorizedApi
\ No newline at end of file
diff --git a/src/main/webapp/_front/common/location_replace.html b/src/main/webapp/_front/common/location_replace.html
new file mode 100644
index 0000000000000000000000000000000000000000..304a2a966a66da4b918ba9effbf50a31f1a144fe
--- /dev/null
+++ b/src/main/webapp/_front/common/location_replace.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file