这里基于微信的都是需要用到
- 参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):../15/54ce45d8d30b6bf6758f68d2e95bc627.html
1服务器绑定域名,
2.引入js( https://res.wx.qq.com/open/js/jweixin-1.0.0.js)
3.通过config接口注入权限验证配置
(注意这里签名返回值放在前台ajax是因为二次分享的时候url会改变所以这样不然直接把签名的值放在request值里面会导致二次分享失败)
function getConfigData(){
var url =window.location.href;
url = encodeURIComponent(url);
var data ="url="+url;
$.ajax({
type:'post',
url:'后台验签url',
data:data,
asyc:true,
success:function(data){
if(data){
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: data.appId, // 必填,公众号的唯一标识
timestamp:data.timestamp, // 必填,生成签名的时间戳
nonceStr: data.nonceStr, // 必填,生成签名的随机串
signature: data.signature,// 必填,签名,见附录1
jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
}
wxReady();
},
error:function(){
alert("系统繁忙请稍后再试");
}
})
}
wx.ready(function(){
wx.onMenuShareTimeline({
title: share_title, // 分享标题
link:share_url, // 分享链接
imgUrl: act_image_url, // 分享图标
success: function () {
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
wx.onMenuShareAppMessage({
title: share_title, // 分享标题
desc: act_message, // 分享描述
link: share_url, // 分享链接
imgUrl: act_image_url, // 分享图标
type: 'link', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
},
cancel: function () {
// 用户取消分享后执行的回调函数
}
});
});
后台代码
生成签名
@RequestMapping(value="/getConfigData",method = RequestMethod.POST)
@ResponseBody
public Map<String,String> getConfigData(HttpServletRequest request){
String id =request.getParameter("id");
String url = request.getParameter("url");
String path = request.getContextPath();
String basePath ="xiangm"
String shareUrl =basePath+"/act/toActView/"+id+".html";
Map<String,String> map =Snippet.sign(url);
map.put("shareUrl", shareUrl);
map.put("appId",Snippet.getAppid());
return map;
}
public static Map<String, String> sign(String url) {
Map<String, String> ret = new HashMap<String, String>();
String nonce_str = create_nonce_str();
String timestamp = create_timestamp();
String jsapi_ticket="";
try {
jsapi_ticket = getJsapiTicket();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String string1;
String signature = "";
//注意这里参数名必须全部小写,且必须有序
string1 = "jsapi_ticket=" + jsapi_ticket +
"&noncestr=" + nonce_str +
"×tamp=" + timestamp +"&url="+url;
try
{
MessageDigest crypt = MessageDigest.getInstance("SHA-1");
crypt.reset();
crypt.update(string1.getBytes("UTF-8"));
signature = byteToHex(crypt.digest());
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
ret.put("jsapi_ticket", jsapi_ticket);
ret.put("nonceStr", nonce_str);
ret.put("timestamp", timestamp);
ret.put("signature", signature);
return ret;
}