fixed something

This commit is contained in:
jinyu 2017-06-07 17:10:17 +08:00
parent 6326ee1c03
commit 309022b44b
4 changed files with 863 additions and 885 deletions

View File

@ -19,8 +19,8 @@ import com.foxinmy.weixin4j.xml.XmlStream;
* @author jinyu(foxinmy@gmail.com) * @author jinyu(foxinmy@gmail.com)
* @date 2015年3月25日 * @date 2015年3月25日
* @since JDK 1.6 * @since JDK 1.6
* @see <a * @see <a href=
* href="https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_1">代金券</a> * "https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_1">代金券</a>
*/ */
public class CouponApi extends MchApi { public class CouponApi extends MchApi {
@ -41,12 +41,12 @@ public class CouponApi extends MchApi {
* 操作员帐号, 默认为商户号 可在商户平台配置操作员对应的api权限 可为空 * 操作员帐号, 默认为商户号 可在商户平台配置操作员对应的api权限 可为空
* @return 发放结果 * @return 发放结果
* @see com.foxinmy.weixin4j.payment.coupon.CouponResult * @see com.foxinmy.weixin4j.payment.coupon.CouponResult
* @see <a * @see <a href=
* href="https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_3">发放代金券接口</a> * "https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_3">发放代金券接口</a>
* @throws WeixinException * @throws WeixinException
*/ */
public CouponResult sendCoupon(String couponStockId, String partnerTradeNo, public CouponResult sendCoupon(String couponStockId, String partnerTradeNo, String openId, String opUserId)
String openId, String opUserId) throws WeixinException { throws WeixinException {
Map<String, String> map = createBaseRequestMap(null); Map<String, String> map = createBaseRequestMap(null);
map.put("coupon_stock_id", couponStockId); map.put("coupon_stock_id", couponStockId);
map.put("partner_trade_no", partnerTradeNo); map.put("partner_trade_no", partnerTradeNo);
@ -62,8 +62,7 @@ public class CouponApi extends MchApi {
map.put("type", "XML"); map.put("type", "XML");
map.put("sign", weixinSignature.sign(map)); map.put("sign", weixinSignature.sign(map));
String param = XmlStream.map2xml(map); String param = XmlStream.map2xml(map);
WeixinResponse response = getWeixinSSLExecutor().post( WeixinResponse response = getWeixinSSLExecutor().post(getRequestUri("coupon_send_uri"), param);
getRequestUri("coupon_send_uri"), param);
return response.getAsObject(new TypeReference<CouponResult>() { return response.getAsObject(new TypeReference<CouponResult>() {
}); });
} }
@ -75,18 +74,16 @@ public class CouponApi extends MchApi {
* 代金券批次ID * 代金券批次ID
* @return 代金券批次信息 * @return 代金券批次信息
* @see com.foxinmy.weixin4j.payment.coupon.CouponStock * @see com.foxinmy.weixin4j.payment.coupon.CouponStock
* @see <a * @see <a href=
* href="https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_4">查询代金券批次信息接口</a> * "https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_4">查询代金券批次信息接口</a>
* @throws WeixinException * @throws WeixinException
*/ */
public CouponStock queryCouponStock(String couponStockId) public CouponStock queryCouponStock(String couponStockId) throws WeixinException {
throws WeixinException {
Map<String, String> map = createBaseRequestMap(null); Map<String, String> map = createBaseRequestMap(null);
map.put("coupon_stock_id", couponStockId); map.put("coupon_stock_id", couponStockId);
map.put("sign", weixinSignature.sign(map)); map.put("sign", weixinSignature.sign(map));
String param = XmlStream.map2xml(map); String param = XmlStream.map2xml(map);
WeixinResponse response = weixinExecutor.post( WeixinResponse response = weixinExecutor.post(getRequestUri("couponstock_query_uri"), param);
getRequestUri("couponstock_query_uri"), param);
return response.getAsObject(new TypeReference<CouponStock>() { return response.getAsObject(new TypeReference<CouponStock>() {
}); });
} }
@ -94,22 +91,23 @@ public class CouponApi extends MchApi {
/** /**
* 查询代金券详细 * 查询代金券详细
* *
* @param openId
* 用户ID
* @param couponId * @param couponId
* 代金券ID * 代金券ID
* @return 代金券详细信息 * @return 代金券详细信息
* @see com.foxinmy.weixin4j.payment.coupon.CouponDetail * @see com.foxinmy.weixin4j.payment.coupon.CouponDetail
* @see <a * @see <a href=
* href="https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_5">查询代金券详细信息接口</a> * "https://pay.weixin.qq.com/wiki/doc/api/tools/sp_coupon.php?chapter=12_5">查询代金券详细信息接口</a>
* @throws WeixinException * @throws WeixinException
*/ */
public CouponDetail queryCouponDetail(String couponId) public CouponDetail queryCouponDetail(String openId, String couponId) throws WeixinException {
throws WeixinException {
Map<String, String> map = createBaseRequestMap(null); Map<String, String> map = createBaseRequestMap(null);
map.put("openid", openId);
map.put("coupon_id", couponId); map.put("coupon_id", couponId);
map.put("sign", weixinSignature.sign(map)); map.put("sign", weixinSignature.sign(map));
String param = XmlStream.map2xml(map); String param = XmlStream.map2xml(map);
WeixinResponse response = weixinExecutor.post( WeixinResponse response = weixinExecutor.post(getRequestUri("coupondetail_query_uri"), param);
getRequestUri("coupondetail_query_uri"), param);
return response.getAsObject(new TypeReference<CouponDetail>() { return response.getAsObject(new TypeReference<CouponDetail>() {
}); });
} }

View File

@ -82,8 +82,7 @@ public class WeixinPayProxy {
* 微信支付接口实现(使用weixin4j.properties配置的account商户信息) * 微信支付接口实现(使用weixin4j.properties配置的account商户信息)
*/ */
public WeixinPayProxy() { public WeixinPayProxy() {
this(JSON.parseObject(Weixin4jConfigUtil.getValue("account"), this(JSON.parseObject(Weixin4jConfigUtil.getValue("account"), WeixinPayAccount.class));
WeixinPayAccount.class));
} }
/** /**
@ -94,8 +93,7 @@ public class WeixinPayProxy {
*/ */
public WeixinPayProxy(WeixinPayAccount weixinPayAccount) { public WeixinPayProxy(WeixinPayAccount weixinPayAccount) {
if (weixinPayAccount == null) { if (weixinPayAccount == null) {
throw new IllegalArgumentException( throw new IllegalArgumentException("weixinPayAccount must not be empty");
"weixinPayAccount must not be empty");
} }
this.weixinPayAccount = weixinPayAccount; this.weixinPayAccount = weixinPayAccount;
this.payApi = new PayApi(weixinPayAccount); this.payApi = new PayApi(weixinPayAccount);
@ -156,8 +154,7 @@ public class WeixinPayProxy {
* @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString() * @see com.foxinmy.weixin4j.payment.mch.MchPayRequest#toRequestString()
* @throws WeixinException * @throws WeixinException
*/ */
public MchPayRequest createPayRequest(MchPayPackage payPackage) public MchPayRequest createPayRequest(MchPayPackage payPackage) throws WeixinException {
throws WeixinException {
return payApi.createPayRequest(payPackage); return payApi.createPayRequest(payPackage);
} }
@ -184,11 +181,9 @@ public class WeixinPayProxy {
* @return JSAPI支付对象 * @return JSAPI支付对象
* @throws WeixinException * @throws WeixinException
*/ */
public MchPayRequest createJSPayRequest(String openId, String body, public MchPayRequest createJSPayRequest(String openId, String body, String outTradeNo, double totalFee,
String outTradeNo, double totalFee, String notifyUrl, String notifyUrl, String createIp, String attach) throws WeixinException {
String createIp, String attach) throws WeixinException { return payApi.createJSPayRequest(openId, body, outTradeNo, totalFee, notifyUrl, createIp, attach);
return payApi.createJSPayRequest(openId, body, outTradeNo, totalFee,
notifyUrl, createIp, attach);
} }
/** /**
@ -196,11 +191,16 @@ public class WeixinPayProxy {
* 生成编辑地址请求 * 生成编辑地址请求
* </p> * </p>
* *
* err_msg edit_address:ok获取编辑收货地址成功</br> edit_address:fail获取编辑收货地址失败</br> * err_msg edit_address:ok获取编辑收货地址成功</br>
* userName 收货人姓名</br> telNumber 收货人电话</br> addressPostalCode 邮编</br> * edit_address:fail获取编辑收货地址失败</br>
* proviceFirstStageName 国标收货地址第一级地址</br> addressCitySecondStageName * userName 收货人姓名</br>
* 国标收货地址第二级地址</br> addressCountiesThirdStageName 国标收货地址第三级地址</br> * telNumber 收货人电话</br>
* addressDetailInfo 详细收货地址信息</br> nationalCode 收货地址国家码</br> * addressPostalCode 邮编</br>
* proviceFirstStageName 国标收货地址第一级地址</br>
* addressCitySecondStageName 国标收货地址第二级地址</br>
* addressCountiesThirdStageName 国标收货地址第三级地址</br>
* addressDetailInfo 详细收货地址信息</br>
* nationalCode 收货地址国家码</br>
* *
* @param url * @param url
* 当前访问页的URL * 当前访问页的URL
@ -262,11 +262,9 @@ public class WeixinPayProxy {
* </a> * </a>
* @throws WeixinException * @throws WeixinException
*/ */
public NativePayResponse createNativePayResponse(String productId, public NativePayResponse createNativePayResponse(String productId, String body, String outTradeNo, double totalFee,
String body, String outTradeNo, double totalFee, String notifyUrl, String notifyUrl, String createIp, String attach) throws WeixinException {
String createIp, String attach) throws WeixinException { return payApi.createNativePayResponse(productId, body, outTradeNo, totalFee, notifyUrl, createIp, attach);
return payApi.createNativePayResponse(productId, body, outTradeNo,
totalFee, notifyUrl, createIp, attach);
} }
/** /**
@ -298,11 +296,9 @@ public class WeixinPayProxy {
* </a> * </a>
* @throws WeixinException * @throws WeixinException
*/ */
public MchPayRequest createNativePayRequest(String productId, String body, public MchPayRequest createNativePayRequest(String productId, String body, String outTradeNo, double totalFee,
String outTradeNo, double totalFee, String notifyUrl, String notifyUrl, String createIp, String attach) throws WeixinException {
String createIp, String attach) throws WeixinException { return payApi.createNativePayRequest(productId, body, outTradeNo, totalFee, notifyUrl, createIp, attach);
return payApi.createNativePayRequest(productId, body, outTradeNo,
totalFee, notifyUrl, createIp, attach);
} }
/** /**
@ -329,11 +325,9 @@ public class WeixinPayProxy {
* APP支付</a> * APP支付</a>
* @throws WeixinException * @throws WeixinException
*/ */
public MchPayRequest createAppPayRequest(String body, String outTradeNo, public MchPayRequest createAppPayRequest(String body, String outTradeNo, double totalFee, String notifyUrl,
double totalFee, String notifyUrl, String createIp, String attach) String createIp, String attach) throws WeixinException {
throws WeixinException { return payApi.createAppPayRequest(body, outTradeNo, totalFee, notifyUrl, createIp, attach);
return payApi.createAppPayRequest(body, outTradeNo, totalFee,
notifyUrl, createIp, attach);
} }
/** /**
@ -360,11 +354,9 @@ public class WeixinPayProxy {
* </a> * </a>
* @throws WeixinException * @throws WeixinException
*/ */
public MchPayRequest createWapPayRequest(String body, String outTradeNo, public MchPayRequest createWapPayRequest(String body, String outTradeNo, double totalFee, String notifyUrl,
double totalFee, String notifyUrl, String createIp, String attach) String createIp, String attach) throws WeixinException {
throws WeixinException { return payApi.createWapPayRequest(body, outTradeNo, totalFee, notifyUrl, createIp, attach);
return payApi.createWapPayRequest(body, outTradeNo, totalFee,
notifyUrl, createIp, attach);
} }
/** /**
@ -392,18 +384,18 @@ public class WeixinPayProxy {
* 提交被扫支付API</a> * 提交被扫支付API</a>
* @throws WeixinException * @throws WeixinException
*/ */
public MchPayRequest createMicroPayRequest(String authCode, String body, public MchPayRequest createMicroPayRequest(String authCode, String body, String outTradeNo, double totalFee,
String outTradeNo, double totalFee, String createIp, String attach) String createIp, String attach) throws WeixinException {
throws WeixinException { return payApi.createMicroPayRequest(authCode, body, outTradeNo, totalFee, createIp, attach);
return payApi.createMicroPayRequest(authCode, body, outTradeNo,
totalFee, createIp, attach);
} }
/** /**
* 订单查询 * 订单查询
* <p> * <p>
* 当商户后台网络服务器等出现异常商户系统最终未接收到支付通知</br> 调用支付接口后返回系统错误或未知交易状态情况</br> * 当商户后台网络服务器等出现异常商户系统最终未接收到支付通知</br>
* 调用被扫支付API返回USERPAYING的状态</br> 调用关单或撤销接口API之前需确认支付状态 * 调用支付接口后返回系统错误或未知交易状态情况</br>
* 调用被扫支付API返回USERPAYING的状态</br>
* 调用关单或撤销接口API之前需确认支付状态
* </P> * </P>
* *
* @param idQuery * @param idQuery
@ -458,12 +450,10 @@ public class WeixinPayProxy {
* @since V3 * @since V3
* @throws WeixinException * @throws WeixinException
*/ */
public RefundResult applyRefund(IdQuery idQuery, String outRefundNo, public RefundResult applyRefund(IdQuery idQuery, String outRefundNo, double totalFee, double refundFee,
double totalFee, double refundFee, CurrencyType refundFeeType, CurrencyType refundFeeType, String opUserId, RefundAccountType refundAccountType) throws WeixinException {
String opUserId, RefundAccountType refundAccountType) return payApi.applyRefund(idQuery, outRefundNo, totalFee, refundFee, refundFeeType, opUserId,
throws WeixinException { refundAccountType);
return payApi.applyRefund(idQuery, outRefundNo, totalFee, refundFee,
refundFeeType, opUserId, refundAccountType);
} }
/** /**
@ -473,8 +463,7 @@ public class WeixinPayProxy {
* *
* @see {@link #applyRefund(IdQuery, String, double, double, String,CurrencyType)} * @see {@link #applyRefund(IdQuery, String, double, double, String,CurrencyType)}
*/ */
public RefundResult applyRefund(IdQuery idQuery, String outRefundNo, public RefundResult applyRefund(IdQuery idQuery, String outRefundNo, double totalFee) throws WeixinException {
double totalFee) throws WeixinException {
return payApi.applyRefund(idQuery, outRefundNo, totalFee); return payApi.applyRefund(idQuery, outRefundNo, totalFee);
} }
@ -523,16 +512,18 @@ public class WeixinPayProxy {
* 下载对账单API</a> * 下载对账单API</a>
* @throws WeixinException * @throws WeixinException
*/ */
public void downloadBill(Date billDate, BillType billType, public void downloadBill(Date billDate, BillType billType, OutputStream outputStream, TarType tarType)
OutputStream outputStream, TarType tarType) throws WeixinException { throws WeixinException {
payApi.downloadBill(billDate, billType, outputStream, tarType); payApi.downloadBill(billDate, billType, outputStream, tarType);
} }
/** /**
* 冲正订单(需要证书)</br> 当支付返回失败,或收银系统超时需要取消交易,可以调用该接口</br> 接口逻辑: * 冲正订单(需要证书)</br>
* 付失败的关单,支付成功的撤销支付</br> <font color="red">7天以内的单可撤销,其他正常支付的单 * 当支付返回失败,或收银系统超时需要取消交易,可以调用该接口</br>
* 如需实现相同功能请调用退款接口</font></br> <font * 接口逻辑: 付失败的关单,支付成功的撤销支付</br>
* color="red">调用扣款接口后请勿立即调用撤销,需要等待5秒以上先调用查单接口,如果没有确切的返回,再调用撤销</font> </br> * <font color="red">7天以内的单可撤销,其他正常支付的单 如需实现相同功能请调用退款接口</font></br>
* <font color="red">调用扣款接口后请勿立即调用撤销,需要等待5秒以上先调用查单接口,如果没有确切的返回,再调用撤销</font>
* </br>
* *
* @param idQuery * @param idQuery
* 商户系统内部的订单号, transaction_id out_trade_no 二选一,如果同时存在优先级: * 商户系统内部的订单号, transaction_id out_trade_no 二选一,如果同时存在优先级:
@ -608,11 +599,9 @@ public class WeixinPayProxy {
* 接口测试上报API</a> * 接口测试上报API</a>
* @throws WeixinException * @throws WeixinException
*/ */
public XmlResult reportInterface(String interfaceUrl, int executeTime, public XmlResult reportInterface(String interfaceUrl, int executeTime, String outTradeNo, String ip, Date time,
String outTradeNo, String ip, Date time, XmlResult returnXml) XmlResult returnXml) throws WeixinException {
throws WeixinException { return payApi.reportInterface(interfaceUrl, executeTime, outTradeNo, ip, time, returnXml);
return payApi.reportInterface(interfaceUrl, executeTime, outTradeNo,
ip, time, returnXml);
} }
/** /**
@ -634,10 +623,9 @@ public class WeixinPayProxy {
* 发放代金券接口</a> * 发放代金券接口</a>
* @throws WeixinException * @throws WeixinException
*/ */
public CouponResult sendCoupon(String couponStockId, String partnerTradeNo, public CouponResult sendCoupon(String couponStockId, String partnerTradeNo, String openId, String opUserId)
String openId, String opUserId) throws WeixinException { throws WeixinException {
return couponApi.sendCoupon(couponStockId, partnerTradeNo, openId, return couponApi.sendCoupon(couponStockId, partnerTradeNo, openId, opUserId);
opUserId);
} }
/** /**
@ -653,14 +641,15 @@ public class WeixinPayProxy {
* 查询代金券批次信息接口</a> * 查询代金券批次信息接口</a>
* @throws WeixinException * @throws WeixinException
*/ */
public CouponStock queryCouponStock(String couponStockId) public CouponStock queryCouponStock(String couponStockId) throws WeixinException {
throws WeixinException {
return couponApi.queryCouponStock(couponStockId); return couponApi.queryCouponStock(couponStockId);
} }
/** /**
* 查询代金券详细 * 查询代金券详细
* *
* @param openId
* 用户ID
* @param couponId * @param couponId
* 代金券ID * 代金券ID
* @return 代金券详细信息 * @return 代金券详细信息
@ -671,9 +660,8 @@ public class WeixinPayProxy {
* 查询代金券详细信息接口</a> * 查询代金券详细信息接口</a>
* @throws WeixinException * @throws WeixinException
*/ */
public CouponDetail queryCouponDetail(String couponId) public CouponDetail queryCouponDetail(String openId, String couponId) throws WeixinException {
throws WeixinException { return couponApi.queryCouponDetail(openId, couponId);
return couponApi.queryCouponDetail(couponId);
} }
/** /**
@ -693,8 +681,7 @@ public class WeixinPayProxy {
* 发放裂变红包接口</a> * 发放裂变红包接口</a>
* @throws WeixinException * @throws WeixinException
*/ */
public RedpacketSendResult sendRedpack(Redpacket redpacket) public RedpacketSendResult sendRedpack(Redpacket redpacket) throws WeixinException {
throws WeixinException {
return cashApi.sendRedpack(redpacket); return cashApi.sendRedpack(redpacket);
} }
@ -708,8 +695,7 @@ public class WeixinPayProxy {
* @see #sendRedpacks(Redpacket...) * @see #sendRedpacks(Redpacket...)
* @throws WeixinException * @throws WeixinException
*/ */
public List<Future<RedpacketSendResult>> sendRedpacks( public List<Future<RedpacketSendResult>> sendRedpacks(Redpacket... redpackets) {
Redpacket... redpackets) {
return cashApi.sendRedpacks(redpackets); return cashApi.sendRedpacks(redpackets);
} }
@ -729,8 +715,7 @@ public class WeixinPayProxy {
* 查询裂变红包接口</a> * 查询裂变红包接口</a>
* @throws WeixinException * @throws WeixinException
*/ */
public RedpacketRecord queryRedpack(String outTradeNo) public RedpacketRecord queryRedpack(String outTradeNo) throws WeixinException {
throws WeixinException {
return cashApi.queryRedpack(outTradeNo); return cashApi.queryRedpack(outTradeNo);
} }
@ -757,8 +742,7 @@ public class WeixinPayProxy {
* 企业付款接口</a> * 企业付款接口</a>
* @throws WeixinException * @throws WeixinException
*/ */
public CorpPaymentResult sendCorpPayment(CorpPayment payment) public CorpPaymentResult sendCorpPayment(CorpPayment payment) throws WeixinException {
throws WeixinException {
return cashApi.sendCorpPayment(payment); return cashApi.sendCorpPayment(payment);
} }
@ -775,8 +759,7 @@ public class WeixinPayProxy {
* 企业付款查询接口</a> * 企业付款查询接口</a>
* @throws WeixinException * @throws WeixinException
*/ */
public CorpPaymentRecord queryCorpPayment(String outTradeNo) public CorpPaymentRecord queryCorpPayment(String outTradeNo) throws WeixinException {
throws WeixinException {
return cashApi.queryCorpPayment(outTradeNo); return cashApi.queryCorpPayment(outTradeNo);
} }
@ -816,8 +799,8 @@ public class WeixinPayProxy {
* "https://pay.weixin.qq.com/wiki/doc/api/external/micropay.php?chapter=9_14&index=7"> * "https://pay.weixin.qq.com/wiki/doc/api/external/micropay.php?chapter=9_14&index=7">
* 查询结算资金接口</a> * 查询结算资金接口</a>
*/ */
public SettlementRecord querySettlement(boolean status, Pageable pageable, public SettlementRecord querySettlement(boolean status, Pageable pageable, Date start, Date end)
Date start, Date end) throws WeixinException { throws WeixinException {
return cashApi.querySettlement(status, pageable, start, end); return cashApi.querySettlement(status, pageable, start, end);
} }
@ -835,8 +818,7 @@ public class WeixinPayProxy {
* "https://pay.weixin.qq.com/wiki/doc/api/external/micropay.php?chapter=9_15&index=8"> * "https://pay.weixin.qq.com/wiki/doc/api/external/micropay.php?chapter=9_15&index=8">
* 查询汇率接口</a> * 查询汇率接口</a>
*/ */
public double queryExchageRate(CurrencyType currencyType, Date date) public double queryExchageRate(CurrencyType currencyType, Date date) throws WeixinException {
throws WeixinException {
return cashApi.queryExchageRate(currencyType, date); return cashApi.queryExchageRate(currencyType, date);
} }
@ -854,8 +836,7 @@ public class WeixinPayProxy {
* 附加订单信息提交接口</a> * 附加订单信息提交接口</a>
* @throws WeixinException * @throws WeixinException
*/ */
public CustomsOrderResult declareCustomsOrder(CustomsOrder customsOrder) public CustomsOrderResult declareCustomsOrder(CustomsOrder customsOrder) throws WeixinException {
throws WeixinException {
return customsApi.declareCustomsOrder(customsOrder); return customsApi.declareCustomsOrder(customsOrder);
} }
@ -874,8 +855,7 @@ public class WeixinPayProxy {
* 附加订单信息查询接口</a> * 附加订单信息查询接口</a>
* @throws WeixinException * @throws WeixinException
*/ */
public CustomsOrderRecord queryCustomsOrder(IdQuery idQuery, public CustomsOrderRecord queryCustomsOrder(IdQuery idQuery, CustomsCity customsCity) throws WeixinException {
CustomsCity customsCity) throws WeixinException {
return customsApi.queryCustomsOrder(idQuery, customsCity); return customsApi.queryCustomsOrder(idQuery, customsCity);
} }

View File

@ -225,5 +225,5 @@ public class WeixinComponentProxy {
authAppId), component(componentId).getTokenManager()); authAppId), component(componentId).getTokenManager());
} }
public final static String VERSION = "1.7.5"; public final static String VERSION = "1.7.6";
} }

View File

@ -285,5 +285,5 @@ public class WeixinSuiteProxy {
suite(suiteId).getTokenManager()); suite(suiteId).getTokenManager());
} }
public final static String VERSION = "1.7.5"; public final static String VERSION = "1.7.6";
} }