ecmall 移動端 微信分享

/* 用戶判斷是否在微信端 */
		$this->assign('isWeixin', isWeixin());  //isWeixin() 在系統核心基礎類的ecmall.php裏定義好了 是微信端則返回值是ture    phpcms裏也有一個判斷是不是微信的方法,叫什麼來着 是 from_weixin()
		/*start@author:hans@date:20160718*/
		//引入微信受權
		if( isWeixin() ){   
			import('weixinsdk');    //引入微信的js-sdk文件 import()在系統核心基礎類的ecmall.php裏定義好了
			$weixin_config = require_once('data/weixin_config.php');   //引入微信的配置文件 包含appid等必要東西
			$jssdk = new JSSDK($weixin_config['appId'], $weixin_config['appSecret']);   //實例化
			$signPackage = $jssdk->GetSignPackage();    //  調用獲取access_token的方法  注意獲取微信簽名的時候 返回的$signPackage裏的url必定要和當前地址欄的url同樣才能成功
			$this->assign('wxsignPackage',$signPackage);
		}
		/*end@author:hans@date:20160718*/

注意獲取微信簽名的時候 返回的$signPackage裏的url必定要和當前地址欄的url同樣,纔會顯示成功。也就是說 js-ssdk裏面的 GetSignPackage()這個方法有可能本身要修改javascript

這段代碼寫在了frontend.base.php文件中 也就是 前臺控制器基礎類 FrontendApp 類的 display 方法裏 (引入模版就要用到display)--致敬大腿,寫在了display裏,膩害了,要是個人話估計哪裏用才寫 = =||php

 

在控制器對應的方法(例如是index)裏須要配置SEO信息java

        /* 配置seo信息 */
        $this->_config_seo($this->_get_seo_info($store));//這個_get_seo_info()並非必須的,他只是爲了處理參數,其實能夠直接給_config_seo()傳一個數組,做爲參數,數組裏包含想分享的內容

配置SEO的方法(_config_seo)在includes/ecapp.base.php中 , 用於分享的連接,標題等等的顯示數組

 function _get_seo_info($data)
    {
        $seo_info = $keywords = array();
        $seo_info['title'] = format_js($data['store_name'] . ' - ' . Conf::get('site_title'), false);        
        $keywords = array(
            str_replace("\t", ' ', $data['region_name']),
            $data['store_name'],
        );
        //$seo_info['keywords'] = implode(',', array_merge($keywords, $data['tags']));
        $seo_info['keywords'] = implode(',', $keywords);
        $seo_info['description'] = format_js(sub_str(strip_tags($data['description']), 100, true), false);
        $seo_info['imgUrl'] = SITE_URL . '/' .$data['store_logo'];
        $seo_info['link'] =  SITE_URL . '/' . str_replace(array('&isappinstalled=0','&from=timeline'),array('',''),str_replace('&', '&', url($_SERVER['QUERY_STRING'])));//分享連接不能轉義
    	//debug
		//$handler = init_phpconsole();
		//$handler->debug($seo_info, 'share');
        return $seo_info;
    }

 

 而後在上述方法(index)裏引入的模版頁面加入分享的js,這裏是寫了一個公共模版文件,在index方法引入模版的最下方引入該分享模版微信

 

<div class="ui-actionsheet">  
  <div class="ui-actionsheet-cnt">
	<h4>分享到</h4>
    <button id="weixinfriend">微信</button>  
    <button id="weixintimeline">微信朋友圈</button>
    <button id="tweibo">騰訊微博</button>
    <button id="qzone">QQ空間</button>
    <button id="cancelShare">取消</button> 
  </div>         
</div>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
function share_pop(){
  $('.ui-actionsheet').addClass('show');
}

$(function(){
    Zepto("#cancelShare").tap(function(){
		$('.ui-actionsheet').removeClass('show');  
    });
	/* {if $isWeixin} */
	wx.config({
		debug: false,
		appId: '{$wxsignPackage.appId}',
		timestamp: '{$wxsignPackage.timestamp}',
		nonceStr: '{$wxsignPackage.nonceStr}',
		signature: '{$wxsignPackage.signature}',
		jsApiList: [
		  //分享到朋友圈
		  'onMenuShareTimeline',
		  //分享給朋友
		  'onMenuShareAppMessage',
		  //分享到QQ空間
		  'onMenuShareQZone',
		  //分享到騰訊微博
		  'onMenuShareWeibo'
		]
	});
	wx.ready(function () {
		//分享給朋友
		wx.onMenuShareAppMessage({
			title: '{$_seo_info.title}', // 分享標題
			desc: '{$_seo_info.description}', // 分享描述
			link: '{$_seo_info.link}', // 分享連接
			imgUrl: '{$_seo_info.imgUrl}' // 分享圖標
		});
		//分享到朋友圈
		wx.onMenuShareTimeline({
			title: '{$_seo_info.title}', // 分享標題
			link: '{$_seo_info.link}', // 分享連接
			imgUrl: '{$_seo_info.imgUrl}' // 分享圖標
		});
		//分享到QQ
		wx.onMenuShareQZone({
			title: '{$_seo_info.title}', // 分享標題
			desc: '{$_seo_info.description}', // 分享描述
			link: '{$_seo_info.link}', // 分享連接
			imgUrl: '{$_seo_info.imgUrl}' // 分享圖標
		});
		//分享到微博
		wx.onMenuShareWeibo({
			title: '{$_seo_info.title}', // 分享標題
			desc: '{$_seo_info.description}', // 分享描述
			link: '{$_seo_info.link}', // 分享連接
			imgUrl: '{$_seo_info.imgUrl}' // 分享圖標
		});
	});
	/* {/if} */
});

</script>

 上面的display方法裏 不是傳過來 isWeixin這個變量了嗎,在這裏進行判斷, 若是是微信端 那麼app

經過config接口注入權限驗證配置frontend

全部須要使用JS-SDK的頁面必須先注入配置信息,不然將沒法調用。ui

配置的參考文檔:https://mp.weixin.qq.com/wikithis

微信網頁開發/微信JS-SDK說明文檔url

經過了權限驗證 那麼就會執行wx。ready(function(){ })

到這裏就結束了。

相關文章
相關標籤/搜索