JAVA公众号分享朋友圈大概步骤
第一步:绑定域名
第一张是正式号的,第二张是测试号用户的设置好。测试号的域名(你可以去弄个花生壳内网穿透 )
第二步:引入JS文件
http://res.wx.qq.com/open/js/jweixin-1.6.0.js
如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:
http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)。
备注:支持使用 AMD/CMD 标准模块加载方法加载
步骤三:通过config接口注入权限验证配置 写自己的页面的代码
<script th:inline="javascript">
$(function() {
//要分享的标题
var title = $("#projectNameFront").text();
//要分享的详情
var desc = $("#detail").text();
//要分享的图片
var imgUrl = "填一个图片的地址,获取页面的也可以";
//这个我设置的是当前页面 这个window.location.href的就是获取当前页面你的地址
var path = window.location.href;
//这个我设置的是当前页面
var url = window.location.href;
//获取随机串
var createNonceStr = function() {
return Math.random().toString(36).substr(2, 15);
};
// timestamp
var createTimeStamp = function() {
return parseInt(new Date().getTime() / 1000) + '';
};
var signature, timestamp, noncestr, appid;
/*微信分享*/
$.ajax({
url : "/wx/getWxConfig",
type : 'POST',
data : {
url : url,//把这个地址传回后台
timestamp : createTimeStamp,
nonce_str : createNonceStr
},
success : function(data) {
signature = data.signature;//处理后的signature
timestamp = data.timestamp;//时间戳
noncestr = data.nonceStr;//
appid = data.appId;//appid
wx.config({
debug : false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId : appid, // 必填,公众号的唯一标识
timestamp : timestamp, // 必填,生成签名的时间戳
nonceStr : noncestr, // 必填,生成签名的随机串
signature : signature,// 必填,签名
jsApiList : [ 'onMenuShareTimeline' ]// 必填,需要使用的JS接口列表,这个是分享朋友圈的
});
wx.ready(function() {
//分享给朋友圈
wx.onMenuShareTimeline({
title : title, // 分享标题 上面拿下来的
desc : desc, // 分享描述上面拿下来的
link : path, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl : imgUrl, // 分享图标
success : function() {
// 用户确认分享后执行的回调函数
},
});
});
},
error : function(error) {
console.log(error);
}
});
})
</script>
第四步、写后台的代码 — 也就是代码中的这个方法(url : “/wx/getWxConfig”)。
/**
* 分享朋友圈功能
* @param request
* @param response
* @return
*/
@RequestMapping(value = "/getWxConfig",method=RequestMethod.POST)
@ResponseBody
public Map<String, String> getWxConfig(HttpServletRequest request, HttpServletResponse response) {
Map<String, String> ret = new HashMap<>();
//前台传回来的值
String timestamp = request.getParameter("timestamp");
String noncestr = request.getParameter("nonce_str");
String url = request.getParameter("url");
//获取凭证(这个有点关键)
JSONObject jsapi_ticket = WxUtil.getTeket();
String ticket = jsapi_ticket.getString("ticket");
//获取签名(这个有点关键)
String signature = CheckUtil.checkSignature1( ticket,noncestr,timestamp, url);
ret.put("appId", "你自己的APPID");
ret.put("nonceStr", noncestr);
ret.put("timestamp", timestamp);
ret.put("signature", signature);
return ret;
}
---- JSONObject jsapi_ticket = WxUtil.getTeket(); getTeket()具体在下面代码中 大概看看吧
-----String signature = CheckUtil.checkSignature1( ticket,noncestr,timestamp, url);具体在下下面代码中 大概看看吧
public class WxUtil{
public static final String APPID = "123";
public static final String APPSECRET = "123";
public static final String ACCESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
public static final String SEND_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";
public static final String CREATE_MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN";
// 获取用户信息的接口
public static final String GET_USERINFO_URL = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
// 获取网页授权accessToken的接口
public static final String GET_WEB_ACCESSTOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
//获取GET_TICKET 的接口
public static final String GET_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";
public static String accessToken;
public static long expiresTime;
/**
* 获取网页授权的AccessToken凭据
*
* @return
*/
public JSONObject getWebAccessToken(String code) {
JSONObject result = HttpUtils.doGetstr(
GET_WEB_ACCESSTOKEN_URL.replace("APPID", APPID).replace("SECRET", APPSECRET).replace("CODE", code));
return result;
}
/**
*/
public static String getAccessToken() {
if (accessToken == null || new Date().getTime() > expiresTime) {
JSONObject result = HttpUtils
.doGetstr(ACCESS_TOKEN_URL.replace("APPID", APPID).replace("APPSECRET", APPSECRET));
accessToken = result.getString("access_token");
Long expires_in = result.getLong("expires_in");
expiresTime = new Date().getTime() + ((expires_in - 60) * 1000);
}
return accessToken;
}
/**
* 获取jssdk的Teket
* @param mean
*/
public static JSONObject getTeket() {
return HttpUtils.doGetstr(GET_TICKET_URL.replace("ACCESS_TOKEN", getAccessToken()));
}
}
上面代码中 获取AccessToken 具体怎么实现 我就不说了 。
public static String checkSignature1(String ticket,String noncestr,String timestamp,String url){
//拼接字符串
StringBuffer buffer = new StringBuffer();
buffer.append("jsapi_ticket="+ticket+"&");
buffer.append("noncestr="+noncestr+"&");
buffer.append("timestamp="+timestamp+"&");
buffer.append("url="+url);
//进行sha1加密
String temp = SHA1.encode(buffer.toString());
return temp;
}
这个我简洁的写的 (因为我也是小白,只是刚好完成了这个功能 记录下 也看有大佬帮我改进下,功能是实现了的)
官方的步骤官方的步骤