先ajax 调用 到 生成signpackage的 jssdk.PHP(需要修改动态获取 url函数 )函数 ,参数是当前url ; 然后使用共享 微信共享 配置 js
function get_broswer_info(){ var ua = navigator.userAgent.toLowerCase(); if(ua.match(/weibo/i) == "weibo"){ return 1; }else if(ua.indexOf('qq/')!= -1){ return 2; }else if(ua.match(/MicroMessenger/i)=="micromessenger"){ var v_weixin = ua.split('micromessenger')[1]; v_weixin = v_weixin.substring(1,6); v_weixin = v_weixin.split(' ')[0]; if(v_weixin.split('.').length == 2){ v_weixin = v_weixin + '.0'; } if(v_weixin < '6.0.2'){ return 3; }else{ return 4; } }else{ return 0; } } function reset_weixin_share(){ wx.ready(function () { wx.onMenuShareTimeline({ // 分享到朋友圈 title: window.ShareData.TimelineTitle,// 分享标题 link: window.ShareData.link,// 分享链接 imgUrl: window.ShareData.img,// 分享图标 success: function () { // 用户确认分享后执行的回调函数 window.ShareData.TimelineSuccess(); },cancel: function () { // 用户取消分享后执行的回调函数 } }); wx.onMenuShareAppMessage({ // 分享给朋友 title: window.ShareData.FriendTitle,// 分享标题 desc: window.ShareData.FriendDesc,// 分享描述 link: window.ShareData.link,// 分享图标 type: '',// 分享类型,music、video或link,不填默认为link dataUrl: '',// 如果type是music或video,则要提供数据链接,默认为空 success: function () { // 用户确认分享后执行的回调函数 window.ShareData.NormalSuccess(); },cancel: function () { // 用户取消分享后执行的回调函数 } }); /*wx.onMenuShareQQ({ // 分享到QQ title: window.ShareData.QQTitle,// 分享标题 desc: window.ShareData.QQDesc,// 分享图标 success: function () { // 用户确认分享后执行的回调函数 window.ShareData.NormalSuccess(); },cancel: function () { // 用户取消分享后执行的回调函数 } }); wx.onMenuShareWeibo({ // 分享到腾讯微博 title: window.ShareData.WeiboTitle,// 分享标题 desc: window.ShareData.WeiboDesc,cancel: function () { // 用户取消分享后执行的回调函数 } });*/ // wx.hideOptionMenu(); // 隐藏右上角菜单接口 wx.showOptionMenu(); // 显示右上角菜单接口 }); } function set_weixin_share(){ if(broswer == 3){ function onBridgeReady(){ WeixinJSBridge.call('showOptionMenu'); // 显示右上角菜单 // WeixinJSBridge.call('hideOptionMenu'); // 隐藏右上角菜单 } if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady',onBridgeReady,false); }else if (document.attachEvent){ document.attachEvent('WeixinJSBridgeReady',onBridgeReady); document.attachEvent('onWeixinJSBridgeReady',onBridgeReady); } }else{ onBridgeReady(); } document.addEventListener('WeixinJSBridgeReady',function onBridgeReady() { WeixinJSBridge.on('menu:share:appmessage',function(argv) { // 分享给朋友 WeixinJSBridge.invoke('sendAppMessage',{ "img_url": window.ShareData.img,"link": window.ShareData.link,"desc": window.ShareData.FriendDesc,"title": window.ShareData.FriendTitle },function(res) { window.ShareData.NormalSuccess(); }) }); WeixinJSBridge.on('menu:share:timeline',function(argv) { // 分享到朋友圈 WeixinJSBridge.invoke('shareTimeline',"desc": window.ShareData.TimelineTitle,"title": window.ShareData.TimelineTitle },function(res) { window.ShareData.TimelineSuccess(); }); }); /*WeixinJSBridge.on('menu:share:weibo',function(argv) { // 分享到腾讯微博 WeixinJSBridge.invoke('shareWeibo',{ "content": window.ShareData.WeiboDesc,"url": window.ShareData.link },function(res) { window.ShareData.NormalSuccess(); }); });*/ },false); }else if(broswer == 4){ wx.config({ debug: false,// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: config_info.appId,// 必填,公众号的唯一标识 timestamp: config_info.timestamp,// 必填,生成签名的时间戳 nonceStr: config_info.nonceStr,// 必填,生成签名的随机串 signature: config_info.signature,// 必填,签名,见附录1 jsApiList: [ // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 // 所有要调用的 API 都要加到这个列表中 'onMenuShareTimeline','onMenuShareAppMessage',/*'onMenuShareQQ','onMenuShareWeibo',*/ 'hideOptionMenu','showOptionMenu' ] }); reset_weixin_share(); } } logo_URL = imgURL + "logo.jpg"; function unimall_start_weixin(){ jQuery.getJSON( hostURL+"?c=weixin&a=showWxConfig&url="+encodeURIComponent(window.location.href),function( config_info ) { //console.info(config_info); window.config_info = config_info; window.broswer = get_broswer_info(); set_weixin_share(); }); } /* 调用示例 window.ShareData = { "img": "<?PHP echo logo_URL;?>","link": 'api.PHP?c=weixin&a=share&state={$shopId}x{$projectId}x{$staffId}',//分享到朋友圈 "TimelineTitle":"会员回馈活动,上百万的豪礼不拿白不拿!","TimelineSuccess":function(){ },//分享到朋友 "FriendTitle": "有好事我第一个想到你!","FriendDesc": "会员回馈活动!","NormalSuccess":function(){ } }; unimall_start_weixin(); */
public function getSignPackage($url='') { $jsapiTicket = $this->getJsApiTicket(); // 注意 URL 一定要动态获取,不能 hardcode.; 如果传递了url参数,则优先使用 $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $url = $url?$url:("$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"); $getlist = $_GET; $timestamp = time(); $nonceStr = $this->createNonceStr(); // 这里参数的顺序要按照 key 值 ASCII 码升序排序 $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; //echo $string; error_log( "\n". date('Y-m-d H:i:s') . ":" . $string,3,APP_PATH.'log/jssdk'); $signature = sha1($string); $signPackage = array( "appId" => $this->appId,"nonceStr" => $nonceStr,"timestamp" => $timestamp,"url" => $url,"signature" => $signature,"rawString" => $string ); return $signPackage; }
参考 :
1 http://blog.csdn.net/snow_finland/article/details/43228839