share.php页面
<?php //公众号设置一下 JS接口安全域名,不要http,www的一级域名,比如http://www.baidu.com域名下的某个路径要分享,js安全域名中只需填上 baidu.com 即可 //关于分享地址,有两种情况 //第一种由后端固定分享地址,但是因为微信分享出去后的地址结尾带有from和isappinstalled参数。分享后再分享就会失效,所以前端判断获取这两参数,给后端动态添加到分享地址后面 $urlend = ''; if(!empty($_POST['from']) && ($_POST['from'] == 'timeline' || $_POST['from'] == 'singlemessage')){ $urlend = "?from=".$_POST['from'] . "&isappinstalled=".$_POST['isappinstalled']; } $shareurl = 'http://www.baidu.com/test/index.html'.$urlend; //第二种,由前端 window.location.href 获取当前页,传给后端 if(!empty($_POST['shareurl'])){ $shareurl = $_POST['shareurl']; } $data['ticket'] = 'bxLdikRXVbTPdHSM05e5u7AnbMMI4rNIxqVt3BVCv-JyYcjsM0DdvwuHhd69qZ3-EzyQnuaEawwfTUdJMumb6A';//假设已获取到ticket,具体获取方法格外查询 $data['timestamp'] = time();//当前时间戳 $data['noncestr'] = 'suijiwenzi';//自定义随机字符串 $data['url'] = $shareurl;//分享地址,url路径后面详细到文件扩展名时结尾不需要加/,否则详细到文件夹名则需要加/ //包括一些特殊路径比如 'http://www.baidu.com/test/index.php?s=home/index/test2' 其中有文件扩展名,则结尾也不需要加/ //说白了就是必须和当前浏览器路径完全一致 $data['appId'] = 'wxb71ed5a23a86e594'; $data['imgUrl'] = 'http://www.baidu.com/test/shareImg.jpg'; //生成签名 $string1 = "jsapi_ticket=".$data['ticket']."&noncestr=".$data['noncestr']."×tamp=".$data['timestamp']."&url=".$data['url']; $data['signature'] = sha1($string1); // 显示获得的数据 echo json_encode($data); exit; ?>
test_share.html页面
<!DOCTYPE html> <html> <head> <title>测试html</title> </head> <body> <!-- 以下jquery文件应换成实际js文件路径,否则报错 --> <!-- <script type="text/javascript" src="js/jquery.min.js"></script> --> <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <script type="text/javascript"> //var from = GetQueryStringS("from"); //var isappinstalled = GetQueryStringS("isappinstalled"); var shareurl = window.location.href; $.post('share.php', { //如果前端能直接获取当前页地址并传给后端,则 from 与 isappinstalled 可以不传 //'from' : from, //'isappinstalled' : isappinstalled, 'shareurl' : shareurl }, function(data) { console.log(data); var appId = data['appId']; var timestamp = data['timestamp']; var noncestr = data['noncestr']; var signature = data['signature']; var url = data['url']; var imgUrl = 'http://www.fotile.com/Video/html/img/shareImg1.jpg'; wx.config({ debug : true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId : appId, // 必填,公众号的唯一标识 timestamp : timestamp, // 必填,生成签名的时间戳 nonceStr : noncestr, // 必填,生成签名的随机串 signature : signature,// 必填,签名,见附录1 jsApiList : [ 'onMenuShareTimeline', 'onMenuShareAppMessage' ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function() { wx.onMenuShareTimeline({ title : '你敢信么?家里烟龄最长的竟是妈妈!', // 分享标题 desc : '最怕你被烟伤害的人,却是被烟伤害最久的人', // 分享描述 link : url, // 分享链接 imgUrl : imgUrl, // 分享图标 success : function() { //alert('分享成功'); }, cancel : function() { // 用户取消分享后执行的回调函数 } }); // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 wx.onMenuShareAppMessage({ title : '你敢信么?家里烟龄最长的竟是妈妈!', // 分享标题 desc : '最怕你被烟伤害的人,却是被烟伤害最久的人', // 分享描述 link : url, // 分享链接 imgUrl : imgUrl, // 分享图标 type : 'link', // 分享类型,music、video或link,不填默认为link dataUrl : '', // 如果type是music或video,则要提供数据链接,默认为空 success : function() { // 用户确认分享后执行的回调函数 }, cancel : function() { // 用户取消分享后执行的回调函数 } }); }); }, "json") function GetQueryStringS(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; } </script> </body> </html>