%--
注意:所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
使用方法:
需要调用的地方加入下面的内容
//-----------------------------------------------------------------------------//
//下面为配置的覆盖,应该考虑更优的参数覆盖方式
//-----------------------------------------------------------------------------//
--%>
<%@page import="com.jfinal.kit.PropKit"%>
<%@page import="com.jfinal.weixin.sdk.api.ApiConfigKit"%>
<%@page import="com.jfinal.weixin.sdk.api.ApiConfig"%>
<%@page import="com.jfinal.kit.HashKit"%>
<%@page import="java.util.Map.Entry"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.UUID"%>
<%@page import="java.util.TreeMap"%>
<%@page import="com.jfinal.weixin.sdk.api.JsTicket"%>
<%@page import="com.jfinal.weixin.sdk.api.JsTicketApi.JsApiType"%>
<%@page import="com.jfinal.weixin.sdk.api.JsTicketApi"%>
<%@page import="com.jfinal.kit.StrKit"%>
<%@ page language="java" contentType="application/x-javascript; charset=utf-8" isELIgnored="false"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%--微信环境内展示 --%>
<%
// 1.拼接url(当前网页的URL,不包含#及其后面部分)
String _wxShareUrl = request.getHeader("Referer");
if (StrKit.notBlank(_wxShareUrl)) {
_wxShareUrl = _wxShareUrl.split("#")[0];
} else {
return;
}
// 先从参数中获取,获取不到时从配置文件中找
String appId = request.getParameter("appId");
if (StrKit.isBlank(appId)) {
appId = PropKit.get("appId");
}
// 方便测试 1.9添加参数&test=true
String isTest = request.getParameter("test");
if (null == isTest || !isTest.equals("true")) {
isTest = "false";
}
ApiConfigKit.setThreadLocalAppId(appId);
String _wxJsApiTicket = "";
try {
JsTicket jsTicket = JsTicketApi.getTicket(JsApiType.jsapi);
_wxJsApiTicket = jsTicket.getTicket();
} finally {
ApiConfigKit.removeThreadLocalAppId();
}
Map _wxMap = new TreeMap();
//noncestr
String _wxNoncestr = UUID.randomUUID().toString().replace("-", "");
//timestamp
String _wxTimestamp = (System.currentTimeMillis() / 1000) + "";
//参数封装
_wxMap.put("noncestr", _wxNoncestr);
_wxMap.put("timestamp", _wxTimestamp );
_wxMap.put("jsapi_ticket", _wxJsApiTicket);
_wxMap.put("url", _wxShareUrl);
// 加密获取signature
StringBuilder _wxBaseString = new StringBuilder();
for (Entry param : _wxMap.entrySet()) {
_wxBaseString.append(param.getKey()).append("=").append(param.getValue()).append("&");
}
String _wxSignString = _wxBaseString.substring(0, _wxBaseString.length() - 1);
// signature
String _wxSignature = HashKit.sha1(_wxSignString);
%>
<%--兼容新老版本 --%>
wx.config({
debug: <%=isTest %>,
appId: '<%=appId %>',
timestamp: '<%=_wxTimestamp %>',
nonceStr: '<%=_wxNoncestr %>',
signature: '<%=_wxSignature %>',
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo',
'hideMenuItems',
'showMenuItems',
'hideAllNonBaseMenuItem',
'showAllNonBaseMenuItem',
'translateVoice',
'startRecord',
'stopRecord',
'onRecordEnd',
'playVoice',
'pauseVoice',
'stopVoice',
'uploadVoice',
'downloadVoice',
'chooseImage',
'previewImage',
'uploadImage',
'downloadImage',
'getNetworkType',
'openLocation',
'getLocation',
'hideOptionMenu',
'showOptionMenu',
'closeWindow',
'scanQRCode',
'chooseWXPay',
'openProductSpecificView',
'addCard',
'chooseCard',
'openCard'
]
});
<%
// 测试模式
if (isTest.equals("true")) {
%>
wx.error(function (res) {
alert(res.errMsg);
});
<%
}
%>
<%-- 默认分享数据 --%>
var shareData = typeof(shareData) === 'undefined' ? {
title: '微信JS-SDK Demo测试',
desc: '微信JS-SDK,帮助第三方为用户提供更优质的移动web服务',
link: 'http://www.jfinal.com/',
imgUrl: 'http://www.jfinal.com/img/weixin_142X142.jpg'
} : shareData;
<%--新版微信--%>
wx.ready(function () {
wx.onMenuShareAppMessage(shareData);
wx.onMenuShareTimeline(shareData);
wx.onMenuShareWeibo(shareData);
wx.onMenuShareQQ(shareData);
});