微信开发 ajax获取 signpackage 且共享

来源:互联网 发布:王国祥白先勇 知乎 编辑:程序博客网 时间:2024/05/08 07:05

先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, // 分享链接imgUrl: window.ShareData.img, // 分享图标type: '', // 分享类型,music、video或link,不填默认为linkdataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空success: function () { // 用户确认分享后执行的回调函数window.ShareData.NormalSuccess();},cancel: function () { // 用户取消分享后执行的回调函数}});/*wx.onMenuShareQQ({ // 分享到QQtitle: window.ShareData.QQTitle, // 分享标题desc: window.ShareData.QQDesc, // 分享描述link: window.ShareData.link, // 分享链接imgUrl: window.ShareData.img, // 分享图标success: function () {    // 用户确认分享后执行的回调函数   window.ShareData.NormalSuccess();},cancel: function () {    // 用户取消分享后执行的回调函数}});wx.onMenuShareWeibo({ // 分享到腾讯微博title: window.ShareData.WeiboTitle, // 分享标题desc: window.ShareData.WeiboDesc, // 分享描述link: window.ShareData.link, // 分享链接imgUrl: window.ShareData.img, // 分享图标success: function () {    // 用户确认分享后执行的回调函数   window.ShareData.NormalSuccess();},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', {"img_url": window.ShareData.img,"link": window.ShareData.link,"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,// 必填,签名,见附录1jsApiList: [// 必填,需要使用的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

0 0