• 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()这个方法有可能自己要修改

    这段代码写在了frontend.base.php文件中 也就是 前台控制器基础类 FrontendApp 类的 display 方法里 (引入模版就要用到display)--致敬大腿,写在了display里,腻害了,要是我的话估计哪里用才写 = =||

     

    在控制器对应的方法(例如是index)里需要配置SEO信息

            /* 配置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("	", ' ', $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这个变量了吗,在这里进行判断, 如果是微信端 那么

    通过config接口注入权限验证配置

    所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用。

    配置的参考文档:https://mp.weixin.qq.com/wiki

    微信网页开发/微信JS-SDK说明文档

    通过了权限验证 那么就会执行wx。ready(function(){ })

    到这里就结束了。

  • 相关阅读:
    进程 线程 协程
    TCP的滑动窗口和网络拥塞控制
    Golang中函数结构体,将函数转换为接口
    go的调度 与 go 的GC
    未来程序员这个工种会如何进化与“35岁之殇”的思考
    golang 实现 LRU
    golang 单例模式实现
    内存泄露及内存溢出,解决方案
    Jvm调优参数
    HttpUtil
  • 原文地址:https://www.cnblogs.com/benpaodelulu/p/7007807.html
Copyright © 2020-2023  润新知