#513 修复开放平台小程序jscode2session 错误

This commit is contained in:
007gzs
2018-03-25 23:30:18 +08:00
committed by Binary Wang
parent 6faae7e2d8
commit 2c2ed5d60c
7 changed files with 36 additions and 13 deletions

View File

@@ -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>
* 验证消息的确来自微信服务器 * 验证消息的确来自微信服务器

View File

@@ -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信息

View File

@@ -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 {

View File

@@ -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(); return service.jsCode2SessionInfo(jsCode);
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);
} }
@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);
} }

View File

@@ -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;
} }

View File

@@ -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);

View File

@@ -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;