From edb15cc11704b6e8ce84cdee954a93b2bca883fd Mon Sep 17 00:00:00 2001 From: 007gzs <007gzs@gmail.com> Date: Fri, 22 Jun 2018 22:17:27 +0800 Subject: [PATCH] =?UTF-8?q?#639=20=E4=BF=AE=E5=A4=8D=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E4=BB=A3=E7=A0=81=E6=A8=A1=E7=89=88=E5=BA=93=E7=AE=A1?= =?UTF-8?q?=E7=90=86=20access=5Ftoken=20key=20=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/impl/WxOpenComponentServiceImpl.java | 27 ++++--- .../open/api/impl/WxOpenMaServiceImpl.java | 7 -- .../api/impl/WxOpenMaUserServiceImpl.java | 70 ------------------- 3 files changed, 17 insertions(+), 87 deletions(-) delete mode 100755 weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaUserServiceImpl.java diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java index 8bbde7ed..05f3df11 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java @@ -115,11 +115,15 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { } private String post(String uri, String postData) throws WxErrorException { + return post(uri, postData, "component_access_token"); + } + + private String post(String uri, String postData, String accessTokenKey) throws WxErrorException { String componentAccessToken = getComponentAccessToken(false); - String uriWithComponentAccessToken = uri + (uri.contains("?") ? "&" : "?") + "component_access_token=" + componentAccessToken; + String uriWithComponentAccessToken = uri + (uri.contains("?") ? "&" : "?") + accessTokenKey + "=" + componentAccessToken; try { return getWxOpenService().post(uriWithComponentAccessToken, postData); - }catch (WxErrorException e){ + } catch (WxErrorException e) { WxError error = e.getError(); /* * 发生以下情况时尝试刷新access_token @@ -131,7 +135,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { // 强制设置wxMpConfigStorage它的access token过期了,这样在下一次请求里就会刷新access token this.getWxOpenConfigStorage().expireComponentAccessToken(); if (this.getWxOpenConfigStorage().autoRefreshToken()) { - return this.post(uri, postData); + return this.post(uri, postData, accessTokenKey); } } if (error.getErrorCode() != 0) { @@ -142,11 +146,14 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { } private String get(String uri) throws WxErrorException { + return get(uri, "component_access_token"); + } + private String get(String uri, String accessTokenKey) throws WxErrorException { String componentAccessToken = getComponentAccessToken(false); - String uriWithComponentAccessToken = uri + (uri.contains("?") ? "&" : "?") + "component_access_token=" + componentAccessToken; + String uriWithComponentAccessToken = uri + (uri.contains("?") ? "&" : "?") + accessTokenKey + "=" + componentAccessToken; try { return getWxOpenService().get(uriWithComponentAccessToken, null); - }catch (WxErrorException e){ + } catch (WxErrorException e) { WxError error = e.getError(); /* * 发生以下情况时尝试刷新access_token @@ -158,7 +165,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { // 强制设置wxMpConfigStorage它的access token过期了,这样在下一次请求里就会刷新access token this.getWxOpenConfigStorage().expireComponentAccessToken(); if (this.getWxOpenConfigStorage().autoRefreshToken()) { - return this.get(uri); + return this.get(uri, accessTokenKey); } } if (error.getErrorCode() != 0) { @@ -298,7 +305,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { @Override public List getTemplateDraftList() throws WxErrorException { - String responseContent = get(GET_TEMPLATE_DRAFT_LIST_URL); + String responseContent = get(GET_TEMPLATE_DRAFT_LIST_URL, "access_token"); JsonObject response = JSON_PARSER.parse(StringUtils.defaultString(responseContent, "{}")).getAsJsonObject(); boolean hasDraftList = response.has("draft_list"); if (hasDraftList) { @@ -312,7 +319,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { @Override public List getTemplateList() throws WxErrorException { - String responseContent = get(GET_TEMPLATE_LIST_URL); + String responseContent = get(GET_TEMPLATE_LIST_URL, "access_token"); JsonObject response = JSON_PARSER.parse(StringUtils.defaultString(responseContent, "{}")).getAsJsonObject(); boolean hasDraftList = response.has("template_list"); if (hasDraftList) { @@ -328,13 +335,13 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { public void addToTemplate(long draftId) throws WxErrorException { JsonObject param = new JsonObject(); param.addProperty("draft_id", draftId); - post(ADD_TO_TEMPLATE_URL, param.toString()); + post(ADD_TO_TEMPLATE_URL, param.toString(), "access_token"); } @Override public void deleteTemplate(long templateId) throws WxErrorException { JsonObject param = new JsonObject(); param.addProperty("template_id", templateId); - post(DELETE_TEMPLATE_URL, param.toString()); + post(DELETE_TEMPLATE_URL, param.toString(), "access_token"); } } diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaServiceImpl.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaServiceImpl.java index 02a7f59f..acadd7e6 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaServiceImpl.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaServiceImpl.java @@ -14,19 +14,12 @@ import me.chanjar.weixin.open.api.WxOpenComponentService; private WxOpenComponentService wxOpenComponentService; private WxMaConfig wxMaConfig; private String appId; - private WxMaUserService wxMaUserService; public WxOpenMaServiceImpl(WxOpenComponentService wxOpenComponentService, String appId, WxMaConfig wxMaConfig) { this.wxOpenComponentService = wxOpenComponentService; this.appId = appId; this.wxMaConfig = wxMaConfig; initHttp(); - this.wxMaUserService = new WxOpenMaUserServiceImpl(wxOpenComponentService, this); - } - - @Override - public WxMaUserService getUserService() { - return this.wxMaUserService; } @Override diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaUserServiceImpl.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaUserServiceImpl.java deleted file mode 100755 index ae34eb7d..00000000 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaUserServiceImpl.java +++ /dev/null @@ -1,70 +0,0 @@ -package me.chanjar.weixin.open.api.impl; - -import cn.binarywang.wx.miniapp.api.WxMaService; -import cn.binarywang.wx.miniapp.api.WxMaUserService; -import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; -import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo; -import cn.binarywang.wx.miniapp.bean.WxMaUserInfo; -import cn.binarywang.wx.miniapp.util.crypt.WxMaCryptUtils; -import com.google.common.base.Joiner; -import me.chanjar.weixin.common.error.WxErrorException; -import me.chanjar.weixin.open.api.WxOpenComponentService; -import org.apache.commons.codec.digest.DigestUtils; - -import java.util.HashMap; -import java.util.Map; - -/** - * @author Charming - */ -class WxOpenMaUserServiceImpl implements WxMaUserService { - private static final String COMPONENT_JSCODE_TO_SESSION_URL = "https://api.weixin.qq.com/sns/component/jscode2session"; - private WxOpenComponentService wxOpenComponentService; - private WxMaService wxMaService; - - public WxOpenMaUserServiceImpl(WxOpenComponentService wxOpenComponentService, WxMaService wxMaService) { - this.wxOpenComponentService = wxOpenComponentService; - this.wxMaService = wxMaService; - } - - /** - * 第三方平台开发者的服务器使用登录凭证 code 以及 - * 第三方平台的 component_access_token - * 获取 session_key 和 openid。 - * 其中 session_key 是对用户数据进行加密签名的密钥。 - * 为了自身应用安全,session_key 不应该在网络上传输。 - * 文档:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1492585163_FtTNA&token=&lang=zh_CN - * - * @param jsCode 登录时获取的 code - * @return session_key 和 openid - * @throws WxErrorException 发生错误时 - */ - @Override - public WxMaJscode2SessionResult getSessionInfo(String jsCode) throws WxErrorException { - Map params = new HashMap<>(5); - params.put("appid", wxMaService.getWxMaConfig().getAppid()); - params.put("js_code", jsCode); - params.put("grant_type", "authorization_code"); - params.put("component_appid", wxOpenComponentService.getWxOpenConfigStorage().getComponentAppId()); - params.put("component_access_token", wxOpenComponentService.getComponentAccessToken(false)); - - String result = this.wxMaService.get(COMPONENT_JSCODE_TO_SESSION_URL, Joiner.on("&").withKeyValueSeparator("=").join(params)); - return WxMaJscode2SessionResult.fromJson(result); - } - - @Override - public WxMaUserInfo getUserInfo(String sessionKey, String encryptedData, String ivStr) { - return WxMaUserInfo.fromJson(WxMaCryptUtils.decrypt(sessionKey, encryptedData, ivStr)); - } - - @Override - public WxMaPhoneNumberInfo getPhoneNoInfo(String sessionKey, String encryptedData, String ivStr) { - return WxMaPhoneNumberInfo.fromJson(WxMaCryptUtils.decrypt(sessionKey, encryptedData, ivStr)); - } - - @Override - public boolean checkUserInfo(String sessionKey, String rawData, String signature) { - final String generatedSignature = DigestUtils.sha1Hex(rawData + sessionKey); - return generatedSignature.equals(signature); - } -}