This commit is contained in:
jinyu 2016-04-18 17:27:59 +08:00
parent c73b51f84f
commit 8902d8aef7
2 changed files with 165 additions and 165 deletions

View File

@ -1,130 +1,130 @@
package com.foxinmy.weixin4j.jssdk; package com.foxinmy.weixin4j.jssdk;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.foxinmy.weixin4j.exception.WeixinException; import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.token.TokenHolder; import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.util.DateUtil; import com.foxinmy.weixin4j.util.DateUtil;
import com.foxinmy.weixin4j.util.DigestUtil; import com.foxinmy.weixin4j.util.DigestUtil;
import com.foxinmy.weixin4j.util.MapUtil; import com.foxinmy.weixin4j.util.MapUtil;
import com.foxinmy.weixin4j.util.RandomUtil; import com.foxinmy.weixin4j.util.RandomUtil;
import com.foxinmy.weixin4j.util.StringUtil; import com.foxinmy.weixin4j.util.StringUtil;
import com.foxinmy.weixin4j.util.Weixin4jConfigUtil; import com.foxinmy.weixin4j.util.Weixin4jConfigUtil;
/** /**
* JSSDK配置类 * JSSDK配置类
* *
* @className JSSDKConfigurator * @className JSSDKConfigurator
* @author jy * @author jy
* @date 2015年12月23日 * @date 2015年12月23日
* @since JDK 1.6 * @since JDK 1.6
* @see * @see
*/ */
public class JSSDKConfigurator { public class JSSDKConfigurator {
private final TokenHolder ticketTokenHolder; private final TokenHolder ticketTokenHolder;
private JSONObject config; private JSONObject config;
private Set<JSSDKAPI> apis; private Set<JSSDKAPI> apis;
/** /**
* ticket保存类 可调用WeixinProxy#getTicketHolder获取 * ticket保存类 可调用WeixinProxy#getTicketHolder获取
* *
* @param ticketTokenHolder * @param ticketTokenHolder
*/ */
public JSSDKConfigurator(TokenHolder ticketTokenHolder) { public JSSDKConfigurator(TokenHolder ticketTokenHolder) {
this.ticketTokenHolder = ticketTokenHolder; this.ticketTokenHolder = ticketTokenHolder;
this.config = new JSONObject(); this.config = new JSONObject();
this.apis = new HashSet<JSSDKAPI>(); this.apis = new HashSet<JSSDKAPI>();
} }
/** /**
* 开启调试模式,调用的所有api的返回值会在客户端alert出来若要查看传入的参数可以在pc端打开参数信息会通过log打出 * 开启调试模式,调用的所有api的返回值会在客户端alert出来若要查看传入的参数可以在pc端打开参数信息会通过log打出
* 仅在pc端时才会打印 * 仅在pc端时才会打印
* *
* @return * @return
*/ */
public JSSDKConfigurator debugMode() { public JSSDKConfigurator debugMode() {
config.put("debug", true); config.put("debug", true);
return this; return this;
} }
/** /**
* 公众号的唯一标识 不填则获取weixin4j.properties#account中的id * 公众号的唯一标识 不填则获取weixin4j.properties#account中的id
* *
* @param appId * @param appId
* @return * @return
*/ */
public JSSDKConfigurator appId(String appId) { public JSSDKConfigurator appId(String appId) {
config.put("appId", appId); config.put("appId", appId);
return this; return this;
} }
/** /**
* 需要使用的JS接口列表 * 需要使用的JS接口列表
* *
* @see JSSDKAPI * @see JSSDKAPI
* @param apis * @param apis
* @return * @return
*/ */
public JSSDKConfigurator apis(JSSDKAPI... apis) { public JSSDKConfigurator apis(JSSDKAPI... apis) {
for (JSSDKAPI api : apis) { for (JSSDKAPI api : apis) {
this.apis.add(api); this.apis.add(api);
} }
return this; return this;
} }
/** /**
* 需要使用的JS接口列表 * 需要使用的JS接口列表
* *
* @see JSSDKAPI * @see JSSDKAPI
* @param apis * @param apis
* @return * @return
*/ */
public JSSDKConfigurator apis(JSSDKAPI[]... apis) { public JSSDKConfigurator apis(JSSDKAPI[]... apis) {
for (JSSDKAPI[] api : apis) { for (JSSDKAPI[] api : apis) {
for (JSSDKAPI apii : api) { for (JSSDKAPI apii : api) {
this.apis.add(apii); this.apis.add(apii);
} }
} }
return this; return this;
} }
/** /**
* 生成config配置JSON串 * 生成config配置JSON串
* *
* @param url * @param url
* 当前网页的URL不包含#及其后面部分 * 当前网页的URL不包含#及其后面部分
* @return * @return
* @see <a * @see <a
* href="http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html#.E6.AD.A5.E9.AA.A4.E4.B8.89.EF.BC.9A.E9.80.9A.E8.BF.87config.E6.8E.A5.E5.8F.A3.E6.B3.A8.E5.85.A5.E6.9D.83.E9.99.90.E9.AA.8C.E8.AF.81.E9.85.8D.E7.BD.AE">通过config接口注入权限验证配置</a> * href="http://mp.weixin.qq.com/wiki/11/74ad127cc054f6b80759c40f77ec03db.html#.E6.AD.A5.E9.AA.A4.E4.B8.89.EF.BC.9A.E9.80.9A.E8.BF.87config.E6.8E.A5.E5.8F.A3.E6.B3.A8.E5.85.A5.E6.9D.83.E9.99.90.E9.AA.8C.E8.AF.81.E9.85.8D.E7.BD.AE">通过config接口注入权限验证配置</a>
* @throws WeixinException * @throws WeixinException
*/ */
public String toJSONConfig(String url) throws WeixinException { public String toJSONConfig(String url) throws WeixinException {
Map<String, String> signMap = new HashMap<String, String>(); if (apis.isEmpty()) {
String timestamp = DateUtil.timestamp2string(); throw new WeixinException("jsapilist not be empty");
String noncestr = RandomUtil.generateString(24); }
signMap.put("timestamp", timestamp); Map<String, String> signMap = new HashMap<String, String>();
signMap.put("noncestr", noncestr); String timestamp = DateUtil.timestamp2string();
signMap.put("jsapi_ticket", this.ticketTokenHolder.getAccessToken()); String noncestr = RandomUtil.generateString(24);
signMap.put("url", url); signMap.put("timestamp", timestamp);
String sign = DigestUtil.SHA1(MapUtil.toJoinString(signMap, false, signMap.put("noncestr", noncestr);
false)); signMap.put("jsapi_ticket", this.ticketTokenHolder.getAccessToken());
if (StringUtil.isBlank(config.getString("appId"))) { signMap.put("url", url);
config.put("appId", Weixin4jConfigUtil.getWeixinAccount().getId()); String sign = DigestUtil.SHA1(MapUtil.toJoinString(signMap, false,
} false));
if (StringUtil.isBlank(config.getString("debug"))) { if (StringUtil.isBlank(config.getString("appId"))) {
config.put("debug", false); config.put("appId", Weixin4jConfigUtil.getWeixinAccount().getId());
} }
if (apis.isEmpty()) { if (StringUtil.isBlank(config.getString("debug"))) {
throw new WeixinException("jsapilist not be empty"); config.put("debug", false);
} }
config.put("timestamp", timestamp); config.put("timestamp", timestamp);
config.put("nonceStr", noncestr); config.put("nonceStr", noncestr);
config.put("signature", sign); config.put("signature", sign);
config.put("jsApiList", apis.toArray()); config.put("jsApiList", apis.toArray());
return config.toJSONString(); return config.toJSONString();
} }
} }

View File

@ -1,35 +1,35 @@
package com.foxinmy.weixin4j.sign; package com.foxinmy.weixin4j.sign;
/** /**
* 微信签名 * 微信签名
* *
* @className WeixinSignature * @className WeixinSignature
* @author jy * @author jy
* @date 2016年3月26日 * @date 2016年3月26日
* @since JDK 1.7 * @since JDK 1.6
* @see * @see
*/ */
public interface WeixinSignature { public interface WeixinSignature {
/** /**
* 是否编码 * 是否编码
* *
* @return * @return
*/ */
public boolean encoder(); public boolean encoder();
/** /**
* 是否转换小写 * 是否转换小写
* *
* @return * @return
*/ */
public boolean lowerCase(); public boolean lowerCase();
/** /**
* 签名 * 签名
* *
* @param obj * @param obj
* @return * @return
*/ */
public String sign(Object obj); public String sign(Object obj);
} }