@@ -1,5 +1,6 @@ | |||||
package cn.binarywang.wx.miniapp.api; | package cn.binarywang.wx.miniapp.api; | ||||
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; | |||||
import cn.binarywang.wx.miniapp.config.WxMaConfig; | import cn.binarywang.wx.miniapp.config.WxMaConfig; | ||||
import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; | import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor; | ||||
@@ -15,6 +16,13 @@ public interface WxMaService { | |||||
*/ | */ | ||||
String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; | String GET_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; | ||||
String JSCODE_TO_SESSION_URL = "https://api.weixin.qq.com/sns/jscode2session"; | |||||
/** | |||||
* 获取登录后的session信息 | |||||
* | |||||
* @param jsCode 登录时获取的 code | |||||
*/ | |||||
WxMaJscode2SessionResult jsCode2SessionInfo(String jsCode) throws WxErrorException; | |||||
/** | /** | ||||
* <pre> | * <pre> | ||||
* 验证消息的确来自微信服务器 | * 验证消息的确来自微信服务器 | ||||
@@ -10,7 +10,6 @@ import me.chanjar.weixin.common.exception.WxErrorException; | |||||
* @author <a href="https://github.com/binarywang">Binary Wang</a> | * @author <a href="https://github.com/binarywang">Binary Wang</a> | ||||
*/ | */ | ||||
public interface WxMaUserService { | public interface WxMaUserService { | ||||
String JSCODE_TO_SESSION_URL = "https://api.weixin.qq.com/sns/jscode2session"; | |||||
/** | /** | ||||
* 获取登录后的session信息 | * 获取登录后的session信息 | ||||
@@ -1,8 +1,10 @@ | |||||
package cn.binarywang.wx.miniapp.api.impl; | package cn.binarywang.wx.miniapp.api.impl; | ||||
import cn.binarywang.wx.miniapp.api.*; | import cn.binarywang.wx.miniapp.api.*; | ||||
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; | |||||
import cn.binarywang.wx.miniapp.config.WxMaConfig; | import cn.binarywang.wx.miniapp.config.WxMaConfig; | ||||
import cn.binarywang.wx.miniapp.constant.WxMaConstants; | import cn.binarywang.wx.miniapp.constant.WxMaConstants; | ||||
import com.google.common.base.Joiner; | |||||
import com.google.gson.JsonParser; | import com.google.gson.JsonParser; | ||||
import me.chanjar.weixin.common.bean.WxAccessToken; | import me.chanjar.weixin.common.bean.WxAccessToken; | ||||
import me.chanjar.weixin.common.bean.result.WxError; | import me.chanjar.weixin.common.bean.result.WxError; | ||||
@@ -21,6 +23,8 @@ import org.slf4j.Logger; | |||||
import org.slf4j.LoggerFactory; | import org.slf4j.LoggerFactory; | ||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.util.HashMap; | |||||
import java.util.Map; | |||||
import java.util.concurrent.locks.Lock; | import java.util.concurrent.locks.Lock; | ||||
/** | /** | ||||
@@ -121,6 +125,18 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl | |||||
return this.getWxMaConfig().getAccessToken(); | return this.getWxMaConfig().getAccessToken(); | ||||
} | } | ||||
@Override | |||||
public WxMaJscode2SessionResult jsCode2SessionInfo(String jsCode) throws WxErrorException { | |||||
final WxMaConfig config = getWxMaConfig(); | |||||
Map<String, String> params = new HashMap<>(8); | |||||
params.put("appid", config.getAppid()); | |||||
params.put("secret", config.getSecret()); | |||||
params.put("js_code", jsCode); | |||||
params.put("grant_type", "authorization_code"); | |||||
String result = get(JSCODE_TO_SESSION_URL, Joiner.on("&").withKeyValueSeparator("=").join(params)); | |||||
return WxMaJscode2SessionResult.fromJson(result); | |||||
} | |||||
@Override | @Override | ||||
public boolean checkSignature(String timestamp, String nonce, String signature) { | public boolean checkSignature(String timestamp, String nonce, String signature) { | ||||
try { | try { | ||||
@@ -25,15 +25,7 @@ public class WxMaUserServiceImpl implements WxMaUserService { | |||||
@Override | @Override | ||||
public WxMaJscode2SessionResult getSessionInfo(String jsCode) throws WxErrorException { | public WxMaJscode2SessionResult getSessionInfo(String jsCode) throws WxErrorException { | ||||
final WxMaConfig config = service.getWxMaConfig(); | |||||
Map<String, String> params = new HashMap<>(8); | |||||
params.put("appid", config.getAppid()); | |||||
params.put("secret", config.getSecret()); | |||||
params.put("js_code", jsCode); | |||||
params.put("grant_type", "authorization_code"); | |||||
String result = this.service.get(JSCODE_TO_SESSION_URL, Joiner.on("&").withKeyValueSeparator("=").join(params)); | |||||
return WxMaJscode2SessionResult.fromJson(result); | |||||
return service.jsCode2SessionInfo(jsCode); | |||||
} | } | ||||
@Override | @Override | ||||
@@ -44,7 +36,6 @@ public class WxMaUserServiceImpl implements WxMaUserService { | |||||
@Override | @Override | ||||
public boolean checkUserInfo(String sessionKey, String rawData, String signature) { | public boolean checkUserInfo(String sessionKey, String rawData, String signature) { | ||||
final String generatedSignature = DigestUtils.sha1Hex(rawData + sessionKey); | final String generatedSignature = DigestUtils.sha1Hex(rawData + sessionKey); | ||||
//System.out.println(generatedSignature); | |||||
return generatedSignature.equals(signature); | return generatedSignature.equals(signature); | ||||
} | } | ||||
@@ -85,6 +85,6 @@ public interface WxOpenComponentService { | |||||
String oauth2buildAuthorizationUrl(String appid, String redirectURI, String scope, String state); | String oauth2buildAuthorizationUrl(String appid, String redirectURI, String scope, String state); | ||||
WxMaJscode2SessionResult miniappJscode2Session(String appid, String jsCode, String appId) throws WxErrorException; | |||||
WxMaJscode2SessionResult miniappJscode2Session(String appId, String jsCode) throws WxErrorException; | |||||
} | } |
@@ -239,7 +239,7 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService { | |||||
} | } | ||||
@Override | @Override | ||||
public WxMaJscode2SessionResult miniappJscode2Session(String appid, String jsCode, String appId) throws WxErrorException { | |||||
public WxMaJscode2SessionResult miniappJscode2Session(String appId, String jsCode) throws WxErrorException { | |||||
String url = String.format(MINIAPP_JSCODE_2_SESSION, appId, jsCode, getWxOpenConfigStorage().getComponentAppId()); | String url = String.format(MINIAPP_JSCODE_2_SESSION, appId, jsCode, getWxOpenConfigStorage().getComponentAppId()); | ||||
String responseContent = get(url); | String responseContent = get(url); | ||||
return WxMaJscode2SessionResult.fromJson(responseContent); | return WxMaJscode2SessionResult.fromJson(responseContent); | ||||
@@ -1,10 +1,15 @@ | |||||
package me.chanjar.weixin.open.api.impl; | package me.chanjar.weixin.open.api.impl; | ||||
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; | import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl; | ||||
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; | |||||
import cn.binarywang.wx.miniapp.config.WxMaConfig; | import cn.binarywang.wx.miniapp.config.WxMaConfig; | ||||
import com.google.common.base.Joiner; | |||||
import me.chanjar.weixin.common.exception.WxErrorException; | import me.chanjar.weixin.common.exception.WxErrorException; | ||||
import me.chanjar.weixin.open.api.WxOpenComponentService; | import me.chanjar.weixin.open.api.WxOpenComponentService; | ||||
import java.util.HashMap; | |||||
import java.util.Map; | |||||
/** | /** | ||||
* @author <a href="https://github.com/007gzs">007</a> | * @author <a href="https://github.com/007gzs">007</a> | ||||
*/ | */ | ||||
@@ -20,6 +25,10 @@ import me.chanjar.weixin.open.api.WxOpenComponentService; | |||||
initHttp(); | initHttp(); | ||||
} | } | ||||
@Override | |||||
public WxMaJscode2SessionResult jsCode2SessionInfo(String jsCode) throws WxErrorException { | |||||
return wxOpenComponentService.miniappJscode2Session(appId, jsCode); | |||||
} | |||||
@Override | @Override | ||||
public WxMaConfig getWxMaConfig() { | public WxMaConfig getWxMaConfig() { | ||||
return wxMaConfig; | return wxMaConfig; | ||||