From 73c6aaf05a02fd4e013aa9f592b31fd9372c138f Mon Sep 17 00:00:00 2001 From: jinyu Date: Fri, 25 Dec 2015 12:03:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E8=A6=81=E5=AF=B9jssdk=E7=9A=84?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BB=A5=E5=8F=8A=E5=88=AB=E7=9A=84=E4=BC=98?= =?UTF-8?q?=E5=8C=96(:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGE.md | 21 ++ .../weixin4j/payment/WeixinPayProxy.java | 14 + .../foxinmy/weixin4j/token/TokenCreator.java | 2 +- .../foxinmy/weixin4j/token/TokenHolder.java | 4 + .../com/foxinmy/weixin4j/util/JSSDKAPI.java | 305 ++++++++++++++++++ .../foxinmy/weixin4j/util/JSSDKHelper.java | 124 +++++++ .../com/foxinmy/weixin4j/mp/WeixinProxy.java | 31 +- .../com/foxinmy/weixin4j/mp/api/MenuApi.java | 6 +- .../foxinmy/weixin4j/mp/test/MenuTest.java | 6 +- .../com/foxinmy/weixin4j/qy/WeixinProxy.java | 36 ++- .../com/foxinmy/weixin4j/qy/api/SuiteApi.java | 18 +- .../qy/suite/WeixinTokenSuiteCreator.java | 9 + 12 files changed, 566 insertions(+), 10 deletions(-) create mode 100644 weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKAPI.java create mode 100644 weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKHelper.java diff --git a/CHANGE.md b/CHANGE.md index 34f53827..1d25cec9 100644 --- a/CHANGE.md +++ b/CHANGE.md @@ -563,3 +563,24 @@ * 2015-12-21 + weixin4j-server:WeixinMessageHanlder中新增weight接口 + + +* 2015-12-25 + + + weixin4j-base:WeixinPayProxy类新增获取支付信息#getWeixinAccount方法 + + + weixin4j-base:新增JSSDK的config生成类 + + + weixin4j-mp:WeixinProxy新增获取appid(getAppId)方法 + + + weixin4j-mp:WeixinProxy新增获取jsticket(getJSTicketHolder)方法 + + + weixin4j-mp:私有化WeixinProxy(TokenHolder)构造器 + + + weixin4j-qy:WeixinProxy新增获取corpid(getCorpId)方法 + + + weixin4j-qy:WeixinProxy新增获取jsticket(getJSTicketHolder)方法 + + + weixin4j-qy:私有化WeixinProxy(TokenHolder)构造器 + + + weixin4j-qy:SuiteApi新增获取Weixinproxy对象(getWeixinProxy)方法 diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java index 7f39b5ed..ba3139da 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java @@ -52,6 +52,8 @@ public class WeixinPayProxy { private final CouponApi couponApi; private final CashApi cashApi; + private final WeixinPayAccount weixinAccount; + /** * 使用weixin4j.properties配置的账号信息 */ @@ -67,11 +69,23 @@ public class WeixinPayProxy { * */ public WeixinPayProxy(WeixinPayAccount weixinAccount) { + this.weixinAccount = weixinAccount; this.pay3Api = new Pay3Api(weixinAccount); this.couponApi = new CouponApi(weixinAccount); this.cashApi = new CashApi(weixinAccount); } + /** + * 获取微信商户支付信息 + * + * @return + */ + public WeixinPayAccount getWeixinAccount() { + // clone ... + String text = JSON.toJSONString(weixinAccount); + return JSON.parseObject(text, WeixinPayAccount.class); + } + /** * 统一下单接口
* 除被扫支付场景以外,商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易回话标识后再按扫码、JSAPI diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenCreator.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenCreator.java index 2de6db3b..2cd263eb 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenCreator.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenCreator.java @@ -14,7 +14,7 @@ import com.foxinmy.weixin4j.model.Token; */ public interface TokenCreator { /** - * 返回缓存KEY的名称:Prefix+UniqueId的组合 + * 返回缓存KEY的名称 * * @return */ diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenHolder.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenHolder.java index 935d0488..63dc71b1 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenHolder.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/TokenHolder.java @@ -74,4 +74,8 @@ public class TokenHolder { tokenStorager.caching(cacheKey, token); return token; } + + public TokenStorager getTokenStorager() { + return tokenStorager; + } } diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKAPI.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKAPI.java new file mode 100644 index 00000000..9cfd4678 --- /dev/null +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKAPI.java @@ -0,0 +1,305 @@ +package com.foxinmy.weixin4j.util; + +/** + * JSSDK接口列表 + * + * @className JSSDKAPIs + * @author jy + * @date 2015年12月23日 + * @since JDK 1.7 + * @see + */ +public enum JSSDKAPI { + /*** + * 分享接口-获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 + */ + onMenuShareTimeline, + /*** + * 分享接口-获取“分享给朋友”按钮点击状态及自定义分享内容接口 + */ + onMenuShareAppMessage, + /*** + * 分享接口-获取“分享到QQ”按钮点击状态及自定义分享内容接口 + */ + onMenuShareQQ, + /*** + * 分享接口-获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 + */ + onMenuShareWeibo, + /*** + * 分享接口-获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 + */ + onMenuShareQZone, + /*** + * 图像接口-拍照或从手机相册中选图接口 + */ + chooseImage, + /*** + * 图像接口-预览图片接口 + */ + previewImage, + /*** + * 图像接口-上传图片接口 + */ + uploadImage, + /*** + * 图像接口-下载图片接口 + */ + downloadImage, + /*** + * 音频接口-开始录音接口 + */ + startRecord, + /*** + * 音频接口-停止录音接口 + */ + stopRecord, + /*** + * 音频接口-监听录音自动停止接口 + */ + onVoiceRecordEnd, + /*** + * 音频接口-播放语音接口 + */ + playVoice, + /*** + * 音频接口-暂停播放接口 + */ + pauseVoice, + /*** + * 音频接口-停止播放接口 + */ + stopVoice, + /*** + * 音频接口-监听语音播放完毕接口 + */ + onVoicePlayEnd, + /*** + * 音频接口-上传语音接口 + */ + uploadVoice, + /*** + * 音频接口-下载语音接口 + */ + downloadVoice, + /*** + * 智能接口-识别音频并返回识别结果接口 + */ + translateVoice, + /*** + * 设备信息-获取网络状态接口 + */ + getNetworkType, + /*** + * 地理位置-使用微信内置地图查看位置接口 + */ + openLocation, + /*** + * 地理位置-获取地理位置接口 + */ + getLocation, + /*** + * 摇一摇周边-开启查找周边ibeacon设备接口 + */ + startSearchBeacons, + /*** + * 摇一摇周边-关闭查找周边ibeacon设备接口 + */ + stopSearchBeacons, + /*** + * 摇一摇周边-监听周边ibeacon设备接口 + */ + onSearchBeacons, + /*** + * 界面操作-隐藏右上角菜单接口 + */ + hideOptionMenu, + /*** + * 界面操作-显示右上角菜单接口 + */ + showOptionMenu, + /*** + * 界面操作-关闭当前网页窗口接口 + */ + closeWindow, + /*** + * 界面操作-批量隐藏功能按钮接口 + */ + hideMenuItems, + /*** + * 界面操作-批量显示功能按钮接口 + */ + showMenuItems, + /*** + * 界面操作-隐藏所有非基础按钮接口 + */ + hideAllNonBaseMenuItem, + /*** + * 界面操作-显示所有功能按钮接口 + */ + showAllNonBaseMenuItem, + /*** + * 微信扫一扫-调起微信扫一扫接口 + */ + scanQRCode, + /*** + * 微信小店-跳转微信商品页接口 + */ + openProductSpecificView, + /*** + * 微信卡券-拉取适用卡券列表并获取用户选择信息 + */ + chooseCard, + /*** + * 微信卡券-批量添加卡券接口 + */ + addCard, + /*** + * 微信卡券-查看微信卡包中的卡券接口 + */ + openCard, + /*** + * 微信卡券-核销后再次赠送卡券接口 + */ + consumeAndShareCard, + /*** + * 微信支付-发起一个微信支付请求 + */ + chooseWXPay; + + /** + * 分享接口集合 + */ + public final static JSSDKAPI[] SHARE_APIS = { onMenuShareTimeline, + onMenuShareAppMessage, onMenuShareQQ, onMenuShareWeibo, + onMenuShareQZone }; + /** + * 图像接口集合 + */ + public final static JSSDKAPI[] IMAGE_APIS = { chooseImage, previewImage, + uploadImage, downloadImage }; + /** + * 音频接口集合 + */ + public final static JSSDKAPI[] RECORD_APIS = { startRecord, stopRecord, + onVoiceRecordEnd, playVoice, pauseVoice, stopVoice, onVoicePlayEnd, + uploadVoice, downloadVoice }; + /** + * 智能接口集合 + */ + public final static JSSDKAPI[] SEM_APIS = { translateVoice }; + /** + * 设备信息接口集合 + */ + public final static JSSDKAPI[] DEVICE_APIS = { getNetworkType }; + /** + * 地理位置接口集合 + */ + public final static JSSDKAPI[] LOCATION_APIS = { openLocation, getLocation }; + /** + * 摇一摇周边接口集合 + */ + public final static JSSDKAPI[] BEACON_APIS = { startSearchBeacons, + stopSearchBeacons, onSearchBeacons }; + /** + * 界面操作接口集合 + */ + public final static JSSDKAPI[] UI_APIS = { hideOptionMenu, showOptionMenu, + closeWindow, hideMenuItems, showMenuItems, hideAllNonBaseMenuItem, + showAllNonBaseMenuItem }; + /** + * 微信扫一扫接口集合 + */ + public final static JSSDKAPI[] SCAN_APIS = { scanQRCode }; + /** + * 微信小店接口集合 + */ + public final static JSSDKAPI[] SHOP_APIS = { openProductSpecificView }; + /** + * 微信卡券接口集合 + */ + public final static JSSDKAPI[] CARD_APIS = { chooseCard, addCard, openCard, + consumeAndShareCard }; + /** + * 微信支付接口集合 + */ + public final static JSSDKAPI[] PAY_APIS = { chooseWXPay }; +} diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKHelper.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKHelper.java new file mode 100644 index 00000000..70bda874 --- /dev/null +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/util/JSSDKHelper.java @@ -0,0 +1,124 @@ +package com.foxinmy.weixin4j.util; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +import com.alibaba.fastjson.JSONObject; +import com.foxinmy.weixin4j.exception.WeixinException; +import com.foxinmy.weixin4j.token.TokenHolder; + +/** + * JSSDK帮助类 + * + * @className JSSDKHelper + * @author jy + * @date 2015年12月23日 + * @since JDK 1.6 + * @see + */ +public class JSSDKHelper { + private final TokenHolder ticketTokenHolder; + private JSONObject config; + private Set apis; + + /** + * ticket保存类 可调用WeixinProxy#getJSTicketHolder获取 + * + * @param ticketTokenHolder + */ + public JSSDKHelper(TokenHolder ticketTokenHolder) { + this.ticketTokenHolder = ticketTokenHolder; + this.config = new JSONObject(); + this.apis = new HashSet(); + } + + /** + * 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出, + * 仅在pc端时才会打印。 + * + * @return + */ + public JSSDKHelper debugMode() { + config.put("debug", true); + return this; + } + + /** + * 公众号的唯一标识 不填则获取weixin4j.properties#account中的id + * + * @param appId + * @return + */ + public JSSDKHelper appId(String appId) { + config.put("appId", appId); + return this; + } + + /** + * 需要使用的JS接口列表 + * + * @see JSSDKAPI + * @param apis + * @return + */ + public JSSDKHelper apis(JSSDKAPI... apis) { + for (JSSDKAPI api : apis) { + this.apis.add(api); + } + return this; + } + + /** + * 需要使用的JS接口列表 + * + * @see JSSDKAPI + * @param apis + * @return + */ + public JSSDKHelper apis(JSSDKAPI[]... apis) { + for (JSSDKAPI[] api : apis) { + for (JSSDKAPI apii : api) { + this.apis.add(apii); + } + } + return this; + } + + /** + * 生成config字符串 + * + * @param url + * 当前网页的URL,不包含#及其后面部分 + * @return + * @see 通过config接口注入权限验证配置 + * @throws WeixinException + */ + public String toJSONConfig(String url) throws WeixinException { + Map signMap = new HashMap(); + String timestamp = DateUtil.timestamp2string(); + String noncestr = RandomUtil.generateString(24); + signMap.put("timestamp", timestamp); + signMap.put("noncestr", noncestr); + signMap.put("jsapi_ticket", this.ticketTokenHolder.getAccessToken()); + signMap.put("url", url); + String sign = DigestUtil.SHA1(MapUtil + .toJoinString(signMap, false, true)); + if (StringUtil.isBlank(config.getString("appId"))) { + config.put("appId", Weixin4jConfigUtil.getWeixinAccount().getId()); + } + if (StringUtil.isBlank(config.getString("debug"))) { + config.put("debug", false); + } + if (apis.isEmpty()) { + throw new WeixinException("jsapilist not be empty"); + } + config.put("timestamp", timestamp); + config.put("noncestr", noncestr); + config.put("signature", sign); + config.put("jsApiList", apis.toArray()); + return config.toJSONString(); + } +} diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java index d8be9897..59487827 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java @@ -42,6 +42,7 @@ import com.foxinmy.weixin4j.mp.model.QRResult; import com.foxinmy.weixin4j.mp.model.SemQuery; import com.foxinmy.weixin4j.mp.model.SemResult; import com.foxinmy.weixin4j.mp.model.User; +import com.foxinmy.weixin4j.mp.token.WeixinJSTicketCreator; import com.foxinmy.weixin4j.mp.token.WeixinTokenCreator; import com.foxinmy.weixin4j.mp.type.DatacubeType; import com.foxinmy.weixin4j.mp.type.IndustryType; @@ -78,6 +79,7 @@ public class WeixinProxy { private final DataApi dataApi; private final TokenHolder tokenHolder; + private String appId; /** * 默认使用文件方式保存token、使用weixin4j.properties配置的账号信息 @@ -115,15 +117,16 @@ public class WeixinProxy { TokenStorager tokenStorager) { this(new TokenHolder(new WeixinTokenCreator(appid, appsecret), tokenStorager)); + this.appId = appid; } /** * 注意:TokenCreator 需为 WeixinTokenCreator * - * @see com.foxinmy.weixin4j.mp.token.WeixinTokenCreator.WeixinTokenCreator + * @see com.foxinmy.weixin4j.mp.token.WeixinTokenCreator * @param tokenHolder */ - public WeixinProxy(TokenHolder tokenHolder) { + private WeixinProxy(TokenHolder tokenHolder) { this.tokenHolder = tokenHolder; this.mediaApi = new MediaApi(tokenHolder); this.notifyApi = new NotifyApi(tokenHolder); @@ -138,10 +141,34 @@ public class WeixinProxy { this.dataApi = new DataApi(tokenHolder); } + /** + * 获取appid + * + * @return + */ + public String getAppId() { + return this.appId; + } + + /** + * token获取 + * + * @return + */ public TokenHolder getTokenHolder() { return this.tokenHolder; } + /** + * 获取JSSDK的tokenHolder + * + * @return + */ + public TokenHolder getJSTicketHolder() { + return new TokenHolder(new WeixinJSTicketCreator(this.appId, + this.tokenHolder), this.tokenHolder.getTokenStorager()); + } + /** * 上传图文消息内的图片获取URL * 请注意,本接口所上传的图片不占用公众号的素材库中图片数量的5000个的限制。图片仅支持jpg/png格式,大小必须在1MB以下。 diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MenuApi.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MenuApi.java index 5cb3de18..a0a952be 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MenuApi.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/MenuApi.java @@ -58,7 +58,7 @@ public class MenuApi extends MpApi { private JsonResult createMenu0(String url, JSONObject data) throws WeixinException { WeixinResponse response = weixinExecutor.post( - String.format(url, "h5hb64iP9mBzt0rK6DW1OuOpE066F6iQXmHUqJ83fxTHkDaA0tNOjMMuUrWGwAves4Vi5bfwPKdp3IVhCsZCOHhsX74GXnrTtMg_oFPgiUwSXEhAIABGN"), + String.format(url, tokenHolder.getAccessToken()), JSON.toJSONString(data, new NameFilter() { @Override public String process(Object object, String name, @@ -129,8 +129,8 @@ public class MenuApi extends MpApi { for (int i = 0; i < menuObjs.size(); i++) { menuObj = menuObjs.getJSONObject(i); menus.add(new Menu(menuObj.getString("menuid"), - buttonsConvertor(menuObj), - menuObj.getObject("matchrule", MenuMatchRule.class))); + buttonsConvertor(menuObj), menuObj.getObject( + "matchrule", MenuMatchRule.class))); } } return menus; diff --git a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/MenuTest.java b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/MenuTest.java index a2e92cdc..65bc42c6 100644 --- a/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/MenuTest.java +++ b/weixin4j-mp/src/test/java/com/foxinmy/weixin4j/mp/test/MenuTest.java @@ -45,7 +45,11 @@ public class MenuTest extends TokenTest { Button button = new Button("小哥介绍", domain, ButtonType.view); button.pushSub(new Button( "小哥介绍", - "http://mp.weixin.qq.com/s?__biz=MzI2MTA5OTM4OQ==&mid=400990970&idx=1&sn=5c7fd72e782c49f7c933b91c63eddc80#rd", + "http://x.eqxiu.com/s/89oy462U", + ButtonType.view)); + button.pushSub(new Button( + "小哥官网", + "http://www.jdxiaoge.com", ButtonType.view)); button.pushSub(new Button("兴趣部落", "http://buluo.qq.com/p/barindex.html?from=share&bid=282651", ButtonType.view)); button.pushSub(new Button("服务流程", "FLOW", ButtonType.click)); diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java index dd9c8740..b6e53fa0 100644 --- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java +++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java @@ -39,6 +39,7 @@ import com.foxinmy.weixin4j.qy.model.IdParameter; import com.foxinmy.weixin4j.qy.model.Party; import com.foxinmy.weixin4j.qy.model.Tag; import com.foxinmy.weixin4j.qy.model.User; +import com.foxinmy.weixin4j.qy.suite.WeixinTokenSuiteCreator; import com.foxinmy.weixin4j.qy.token.WeixinTokenCreator; import com.foxinmy.weixin4j.qy.type.ChatType; import com.foxinmy.weixin4j.qy.type.InviteType; @@ -71,6 +72,7 @@ public class WeixinProxy { private final ChatApi chatApi; private final TokenHolder tokenHolder; + private String corpId; /** * 默认使用文件方式保存token、使用weixin4j.properties配置的账号信息 @@ -113,6 +115,21 @@ public class WeixinProxy { TokenStorager tokenStorager) { this(new TokenHolder(new WeixinTokenCreator(corpid, corpsecret), tokenStorager)); + this.corpId = corpid; + } + + /** + * 第三方套件(永久授权码机制) + * + * @param tokenCreator + * 微信企业号token创建(永久授权码) + * @param tokenStorager + * token存储 + */ + public WeixinProxy(WeixinTokenSuiteCreator tokenCreator, + TokenStorager tokenStorager) { + this(new TokenHolder(tokenCreator, tokenStorager)); + this.corpId = tokenCreator.getAuthCorpId(); } /** @@ -121,7 +138,7 @@ public class WeixinProxy { * @see com.foxinmy.weixin4j.qy.token.WeixinTokenCreator.WeixinTokenCreator * @param tokenHolder */ - public WeixinProxy(TokenHolder tokenHolder) { + private WeixinProxy(TokenHolder tokenHolder) { this.tokenHolder = tokenHolder; this.partyApi = new PartyApi(tokenHolder); this.userApi = new UserApi(tokenHolder); @@ -135,10 +152,27 @@ public class WeixinProxy { this.chatApi = new ChatApi(tokenHolder); } + /** + * token获取 + * + * @return + */ public TokenHolder getTokenHolder() { return this.tokenHolder; } + /** + * 获取JSSDK的tokenHolder + * + * @return + */ + public TokenHolder getJSTicketHolder() { + return new TokenHolder( + new com.foxinmy.weixin4j.qy.token.WeixinJSTicketCreator( + this.corpId, this.tokenHolder), + this.tokenHolder.getTokenStorager()); + } + /** * 发送客服消息(需要管理员对应用有使用权限,对收件人touser、toparty、totag有查看权限,否则本次调用失败) *

diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/SuiteApi.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/SuiteApi.java index 4a3ed25e..41295396 100644 --- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/SuiteApi.java +++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/SuiteApi.java @@ -6,6 +6,7 @@ import com.foxinmy.weixin4j.exception.WeixinException; import com.foxinmy.weixin4j.http.weixin.JsonResult; import com.foxinmy.weixin4j.http.weixin.WeixinResponse; import com.foxinmy.weixin4j.model.Token; +import com.foxinmy.weixin4j.qy.WeixinProxy; import com.foxinmy.weixin4j.qy.model.AgentInfo; import com.foxinmy.weixin4j.qy.model.AgentSetter; import com.foxinmy.weixin4j.qy.model.OUserInfo; @@ -65,7 +66,7 @@ public class SuiteApi extends QyApi { * * @return */ - public TokenHolder getTokenHolder() { + public TokenHolder getSuiteTokenHolder() { return this.suiteTokenHolder; } @@ -107,12 +108,25 @@ public class SuiteApi extends QyApi { * 授权方corpid * @return 企业号token */ - public TokenHolder createTokenHolder(String authCorpId) { + public TokenHolder getTokenSuiteHolder(String authCorpId) { return new TokenHolder(new WeixinTokenSuiteCreator( getPerCodeHolder(authCorpId), suiteTokenHolder), suiteTicketHolder.getTokenStorager()); } + /** + * 创建WeixinProxy对象 + * + * @param authCorpId + * 已授权的corpid + * @return + */ + public WeixinProxy getWeixinProxy(String authCorpId) { + return new WeixinProxy(new WeixinTokenSuiteCreator( + getPerCodeHolder(authCorpId), suiteTokenHolder), + suiteTicketHolder.getTokenStorager()); + } + /** * 设置套件授权配置:如果需要对某次授权进行配置,则调用本接口,目前仅可以设置哪些应用可以授权,不调用则默认允许所有应用进行授权。 * diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinTokenSuiteCreator.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinTokenSuiteCreator.java index 3f8a2630..0ea26519 100644 --- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinTokenSuiteCreator.java +++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/suite/WeixinTokenSuiteCreator.java @@ -63,4 +63,13 @@ public class WeixinTokenSuiteCreator implements TokenCreator { token.setTime(System.currentTimeMillis()); return token; } + + /** + * 获取授权放的corpid + * + * @return + */ + public String getAuthCorpId() { + return this.perCodeHolder.getAuthCorpId(); + } }