可视化编辑器,alt+1到9键,切换到工具区,tab键,选择按钮,esc键,返回编辑 工具类代码在底部
第一步:获得access_token代码如下(由于token每日有请求上限,建议放到memcache/redis)
Map<String,String> map = new HashMap<String,String>();
map.put("grant_type","client_credential");
map.put("appid","7654321");
map.put("secret","1234567");
String returnStr = HttpUtil.doGet("https://api.weixin.qq.com/cgi-bin/token",map);
JSONObject json = JSONObject.fromObject(returnStr);
String accessToken = json.getString("token");
第二步:根据token获得js临时票据(有效时间7200秒,可以放到memcache)
Map<String,String> map = new HashMap<String,String>();<pre class="java" name="code"> map.put("access_token","7654321");
map.put("type","jsapi");
String returnStr = HttpUtil.doGet("https://api.weixin.qq.com/cgi-bin/ticket/getticket",map);<pre class="java" name="code"> JSONObject json = JSONObject.fromObject(returnStr);
String ticket= json.getString("ticket");
第三步:对密钥进行sha1加密
long time = System.currentTimeMillis()/1000;
String randomStr = StringUtils.right(String.valueOf(System.currentTimeMillis()), 10);
//特别注意的是调用微信js,url必须是当前页面(转发的不行)
String str = "jsapi_ticket="+ticket+"&noncestr="+randomStr+"×tamp="+time+"&url=http://www.baidu.com";
String signature = EncryptUtil.sha1Encrypt(str);
第四步:进行配置(页面)
<script type="text/javascript" src="<a target=_blank href="http://res.wx.qq.com/open/js/jweixin-1.0.0.js'></script>//">http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>//引入js</a>-sdk
<script type="text/javascript">
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: '', // 必填,公众号的唯一标识
timestamp: <%=time%>, // 必填,生成签名的时间戳
nonceStr: '<%=randomStr%>', // 必填,生成签名的随机串
signature: '<%=signature%>',// 必填,签名,见附录1
jsApiList: ['onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
wx.ready(function(){
wx.onMenuShareAppMessage({
title: '年终免费抽奖来袭!离iPhone只有一步之遥!', // 分享标题
desc: '通话时长--免费!景点门票---免费!打车券--免费!iPhone--当然免费!', // 分享描述
link: 'http://www.baidu.com', // 分享链接
imgUrl: '', // 分享图标
type: 'link', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
// 用户确认分享后执行的回调函数
alert("分享成功");
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
});
</script>
HttpUtil
public static String doGet(String url,Map<String,String> params){
HttpClient client = new HttpClient();
StringBuilder sb = new StringBuilder(url);
StringBuilder responseBody = new StringBuilder(url);
InputStream ins = null;
if(params.size() > 0)
sb.append("?");
for (Entry<String, String> map: params.entrySet()) {
String pramName = map.getKey();
String values = map.getValue();
sb.append(pramName+"="+values);
sb.append("&");
}
try {
GetMethod method = new GetMethod(sb.toString().substring(0, sb.length()));
int statusCode = client.executeMethod(method);
if (statusCode == HttpStatus.SC_OK) {
ins = method.getResponseBodyAsStream();
byte[] b = new byte[1024];
int r_len = 0;
while ((r_len = ins.read(b)) > 0) {
responseBody.append(new String(b, 0, r_len, method
.getResponseCharSet()));
}
}
} catch (HttpException e) {
logger.error(e.toString());
} catch (IOException e) {
logger.error(e.toString());
}
return responseBody.toString();
}
EncryptUtil
<pre class="java" name="code">public static String sha1Encrypt(String str){
StringBuffer sb = new StringBuffer();
try {
MessageDigest messageDigest = MessageDigest.getInstance("sha1");
messageDigest.update(str.getBytes());
char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
byte[] bytes= messageDigest.digest();
int len = bytes.length;
StringBuilder buf = new StringBuilder(len * 2);
for (int j = 0; j < len; j++) {
buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return sb.toString();
}
注:必须要绑定域名
方法:先登录<a target=_blank class="external text" href="http://mp.weixin.qq.com/" target="_blank" rel="nofollow">微信公众平台</a>进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
备注:登录后可在“开发者中心”查看对应的接口权限。