cn.ipokerface.weixin.jssdk.JssdkConfigurator Maven / Gradle / Ivy
package cn.ipokerface.weixin.jssdk;
import cn.ipokerface.weixin.exception.WeixinException;
import cn.ipokerface.weixin.token.TokenManager;
import cn.ipokerface.weixin.utils.*;
import com.alibaba.fastjson.JSONObject;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* Created by PokerFace
* Create Date 2019-12-28.
* Email: [email protected]
* Version 1.0.0
*
* Description:
*/
public class JssdkConfigurator {
private final TokenManager ticketTokenManager;
private JSONObject config;
private Set apis;
/**
* ticket保存类 可调用WeixinProxy#getTicketManager获取
*
* @param ticketTokenManager
*/
public JssdkConfigurator(TokenManager ticketTokenManager) {
this.ticketTokenManager = ticketTokenManager;
this.config = new JSONObject();
this.apis = new HashSet();
}
/**
* 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,
* 仅在pc端时才会打印。
*
* @return
*/
public JssdkConfigurator debugMode() {
config.put("debug", true);
return this;
}
/**
* 需要使用的JS接口列表
*
* @see JssdkApis
* @param apis
* @return
*/
public JssdkConfigurator apis(JssdkApis... apis) {
for (JssdkApis api : apis) {
this.apis.add(api);
}
return this;
}
/**
* 需要使用的JS接口列表
*
* @see JssdkApis
* @param apis
* @return
*/
public JssdkConfigurator apis(JssdkApis[]... apis) {
for (JssdkApis[] api : apis) {
apis(api);
}
return this;
}
/**
* 生成config配置JSON串
*
* @param url
* 当前网页的URL,不包含#及其后面部分
* @return jssdk配置JSON字符串
* @see 公众号JSSDK
* @see 企业号JSSDK
* @throws WeixinException
*/
public String toJSONConfig(String url) throws WeixinException {
if (apis.isEmpty()) {
throw new WeixinException("jsapilist not be empty");
}
Map signMap = new HashMap();
String timestamp = DateUtils.timestamp2string();
String noncestr = RandomUtil.generateString(24);
signMap.put("timestamp", timestamp);
signMap.put("noncestr", noncestr);
signMap.put("jsapi_ticket", this.ticketTokenManager.getAccessToken());
signMap.put("url", url);
String sign = DigestUtils.SHA1(MapUtils.toJoinString(signMap, false, false));
config.put("appId", ticketTokenManager.getWeixinId());
if (StringUtil.isBlank(config.getString("debug"))) {
config.put("debug", false);
}
config.put("timestamp", timestamp);
config.put("nonceStr", noncestr);
config.put("signature", sign);
config.put("jsApiList", apis.toArray());
return config.toJSONString();
}
}