package org.nutz.weixin.impl;
import org.nutz.http.Request;
import org.nutz.http.Request.METHOD;
import org.nutz.http.Response;
import org.nutz.http.Sender;
import org.nutz.ioc.impl.PropertiesProxy;
import org.nutz.json.Json;
import org.nutz.lang.Strings;
import org.nutz.lang.util.NutMap;
import org.nutz.weixin.spi.WxLogin;
import org.nutz.weixin.spi.WxResp;
public class WxLoginImpl implements WxLogin {
protected String host;
protected String appid;
protected String appsecret;
@Override
public String qrconnect(String redirect_uri, String scope, String state) {
Request req = Request.create("https://open.weixin.qq.com/connect/qrconnect", METHOD.GET);
NutMap params = new NutMap();
params.put("appid", appid);
if (redirect_uri.startsWith("http"))
params.put("redirect_uri", redirect_uri);
else
params.put("redirect_uri", host + redirect_uri);
params.put("response_type", "code");
params.put("scope", Strings.sBlank(scope, "snsapi_login"));
req.setParams(params);
return req.getUrl().toString() + "#wechat_redirect";
}
@Override
public String authorize(String redirect_uri, String scope, String state) {
Request req = Request.create("https://open.weixin.qq.com/connect/oauth2/authorize", METHOD.GET);
NutMap params = new NutMap();
params.put("appid", appid);
if (redirect_uri.startsWith("http"))
params.put("redirect_uri", redirect_uri);
else
params.put("redirect_uri", host + redirect_uri);
params.put("response_type", "code");
params.put("scope", Strings.sBlank(scope, "snsapi_userinfo"));
req.setParams(params);
return req.getUrl().toString() + "#wechat_redirect";
}
@Override
public WxResp access_token(String code) {
Request req = Request.create("https://api.weixin.qq.com/sns/oauth2/access_token", METHOD.GET);
NutMap params = new NutMap();
params.put("appid", appid);
params.put("secret", appsecret);
params.put("code", code);
params.put("grant_type", "authorization_code");
req.setParams(params);
Response resp = Sender.create(req).send();
if (!resp.isOK()) {
return null;
}
return Json.fromJson(WxResp.class, resp.getReader("UTF-8"));
}
@Override
public WxResp refresh_token(String refresh_token) {
Request req = Request.create("https://api.weixin.qq.com/sns/oauth2/refresh_token", METHOD.GET);
NutMap params = new NutMap();
params.put("appid", appid);
params.put("secret", appsecret);
params.put("refresh_token", refresh_token);
params.put("grant_type", "refresh_token");
req.setParams(params);
Response resp = Sender.create(req).send();
if (!resp.isOK()) {
return null;
}
return Json.fromJson(WxResp.class, resp.getReader("UTF-8"));
}
@Override
public WxResp auth(String token) {
return null;
}
@Override
public WxResp userinfo(String openid, String access_token) {
// https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
Request req = Request.create("https://api.weixin.qq.com/sns/userinfo", METHOD.GET);
NutMap params = new NutMap();
params.put("access_token", access_token);
params.put("openid", openid);
req.setParams(params);
Response resp = Sender.create(req).send();
if (!resp.isOK()) {
return null;
}
return Json.fromJson(WxResp.class, resp.getReader("UTF-8"));
}
public WxLoginImpl configure(PropertiesProxy conf, String prefix) {
prefix = Strings.sBlank(prefix);
appid = conf.get(prefix + "appid");
appsecret = conf.get(prefix + "appsecret");
host = conf.get(prefix + "host");
return this;
}
}