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

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

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

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

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

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

到这里就结束了。

ecmall 移动端 微信分享的更多相关文章

  1. ionic2+Angular web端 实现微信分享以及如何跳转回分享出去的页面

    微信分享,首先参考微信JS-SDK开发文档. step1:在启动文件index.html中引入微信js文件: <script src="http://res.wx.qq.com/ope ...

  2. 移动端H5微信分享

    移动端H5微信分享功能,可以使项目更好地传播. 微信官方教程文档:  微信JS-SDK说明文档 步骤一:绑定域名 先登录微信公众平台进入"公众号设置"的"功能设置&quo ...

  3. H5 页面在微信端的分享

    微信分享,咋一看好像很复杂,实则非常简单.只需要调用微信官方出的微信jssdk,加上些许配置,就可以实现h5页面在微信上的分享,官方文档地址为: https://mp.weixin.qq.com/wi ...

  4. H5页面在微信端的分享

    微信分享,咋一看好像很复杂,实则非常简单.只需要调用微信官方出的微信jssdk,加上些许配置,就可以实现h5页面在微信上的分享,官方文档地址为:https://mp.weixin.qq.com/wik ...

  5. H5页面微信分享和手Q分享设置

    RT: 一. 手Q分享: 如下代码所示:设置好 description,name,image,即可,唯一注意的是image最好是200*200,要不然过小不美观,过大加载太慢 <head> ...

  6. PHP 微信分享

    share.php <?php //公众号设置一下 JS接口安全域名,不要http,www的一级域名,比如http://www.baidu.com域名下的某个路径要分享,js安全域名中只需填上 ...

  7. android微信分享要注意的地方

    最近在做android端分享的功能,在微信开放平台查看了下官网上的开发文档,一步一步的按文档上的步骤来: 1.申请你的AppID 2.下载开发工具包 3.搭建开发环境,引入libammsdk.jar文 ...

  8. .net 微信分享功能

    微信在国内目前无疑是最火的社交软件,智能手机装机必备. 微信api有java,php,Python语言的demo, 为毛没有C#的范例?兄长今天给各位带来一个.不叫哥(割)了,A股今天又暴跌[3912 ...

  9. 微信分享接口SDK简介使用

    很久没做移动端活动了,想不少人都参与过微信里面的活动,既然活动就少不了分享.那我就行一个前端的角度说说如何实现微信分享的吧. 对应微信分享,现在已有公共接口,微信的开发者文档SDK:https://m ...

随机推荐

  1. nginx配置优化 第二章

    一:常用功能优化: 1:网络连接的优化: 只能在events模块设置,用于防止在同一一个时刻只有一个请求的情况下,出现多个睡眠进程会被唤醒但只能有一个进程可获得请求的尴尬,如果不优化,在多进程的ngi ...

  2. Golang实现杨辉三角

    杨辉三角,也算是一个经典的题目了.就简单的说说. 写代码之前,先分析要做的东西的特点,找到规律,再把这个规律描述一下. 然后把这个描述翻译成编程语言,就可以说是编程了. 那么杨辉三角有什么特点? 首先 ...

  3. bool的值分别为0,1;那哪个代表true哪个代表false?

    0为false,1为true. bool表示布尔型变量,也就是逻辑型变量的定义符,以英国数学家.布尔代数的奠基人乔治·布尔(George Boole)命名. 布尔型变量bool的取值只有false和t ...

  4. C#中get和set

    释一: 属性的访问器包含与获取(读取或计算)或设置(写)属性有关的可执行语句.访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含.声明采用下列形式之一: get {} set {} ...

  5. 使用flask搭建服务端

    ---恢复内容开始--- 本文默认采用python3 一.虚拟环境 创建环境 mkdir myproject cd myproject python3 -m venv venv //Windows平台 ...

  6. windows(xshell)免密码登录

    windows(xshell)免密码登录 第一步生成密钥文件 打开xshell 选个工具栏的工具如下图 选择密钥类型和长度,如下图 密钥会自动生成,如下图,点击下一步即可 设置给密钥加密的密码也可以不 ...

  7. 《温故而知新》JAVA基础四

    类的封装 定义:将类的一些信息隐藏起来,不允许外部的程序直接的访问,而是通过该类提供的一些方法来获取 好处:只能通过特定的法方法访问数据,保护了数据, 实现封装的步骤: 修改属性的可见性:(一般类属性 ...

  8. Vue 兼容 IE9 全功能正常使用的全面解决方案

    https://blog.csdn.net/VhWfR2u02Q/article/details/80863626

  9. java笔记 -- GregorianCalendar和DateFormateSymbols 类方法

    java.util.GregorianCalendar new GregorianCalendar() 构造一个日历对象, 用于表示默认地区,默认时区的当前时间. new GregorianCalen ...

  10. C# 实现邮件收取发送功能

    .Net调用QQ邮箱发送邮件   话说网上发送邮件的代码很多,但是我由于不细心,导致拿别人的代码发送邮件老是失败,今天就说说几个要注意的地方吧!!! ? 1 2 3 4 5 6 7 8 9 10 11 ...