tp5实现微信分享

2 篇文章 0 订阅

转载自

https://blog.csdn.net/zhangweiguangsunjiao/article/details/95622411

https://blog.csdn.net/weixin_30748995/article/details/98294137

tp3.2中

<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script src="__PUBLIC__/activity/js/jquery-1.11.3.js"></script>
<script src="__PUBLIC__/activity/js/common.js"></script>
<script src="__PUBLIC__/activity/js/jquery.SuperSlide.2.1.1.js">


<section class="fix-bottom"> 

   <a href="{:U('Community/Menzhen/ecode')}" data-id="663439" id="J_addfav" title="关注我们"><i class="icon-gongzhonghao iconfont"></i><br>关注我们</a>

   <a href="javascript:void(0);" data-wzid="{$id}" data-title="{$title}"data-suoshu="zj" id="shoucang" title="收藏"><i class="icon-shoucang iconfont"></i><br />收藏</a> 

   <a href="{:U('Report/Index/index',array('id'=>$id,'suoshu'=>tz))}"><i class="icon-jubao iconfont"></i><br />举报</a> 

   <a href="#"><i class="icon-fenxiang1 iconfont"></i><div class="-mob-share-ui-button -mob-share-open" style="display: block;padding:0;text-align:center;cursor:pointer;background:  #fff;color:#333333;font-weight:100;">分享</div></a>
   <!--MOB SHARE BEGIN-->
   <!-- <div class="-mob-share-ui-button -mob-share-open">分享</div> -->
   <div class="-mob-share-ui" style="display: none">
        <ul class="-mob-share-list">
            <li class="-mob-share-weixin fenxiang"><p>微信</p></li>
            <li class="-mob-share-weibo fenxiang" ><p>新浪微博</p></li>
            <li class="-mob-share-qzone fenxiang" ><p>QQ空间</p></li>
        </ul>
        <div class="-mob-share-close">取消</div>
    </div>
    <div class="-mob-share-ui-bg"></div>
    <script id="-mob-share" src="http://f1.webshare.mob.com/code/mob-share.js?appkey=1eacbb2cc64e7"></script>
    <!--MOB SHARE END-->
  </section>



 <script>
        /*
         * 注意:
         * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
         * 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
         * 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
         *
         * 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
         * 邮箱地址:weixin-open@qq.com
         * 邮件主题:【微信JS-SDK反馈】具体问题
         * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
         */
        wx.config({
            debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
            appId: '{$appid}', // 必填,公众号的唯一标识
            timestamp: '{$timestamp}', // 必填,生成签名的时间戳
            nonceStr: '{$noncestr}', // 必填,生成签名的随机串
            signature: '{$signature}',// 必填,签名,见附录1
            jsApiList: [
                'onMenuShareTimeline',
                'onMenuShareAppMessage',
                'onMenuShareQQ',
                'onMenuShareQZone',
                'chooseImage',
                'startRecord',
                'scanQRCode'
            ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        });

        wx.ready(function(){
            // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,
            // config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。
            // 对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
            var tk='{$appid}';
            //分享至朋友圈
            wx.onMenuShareTimeline({
                title: '{$title}', // 分享标题
                link: '{$url}', // 分享链接
                imgUrl: 'https://www.hswhcy.com/public/images/logo.png', // 分享图标
                success: function () {

                    // 用户确认分享后执行的回调函数
                    $.post("{:U('User/Public/share')}",{token:tk,},function(result){
                                    swal({
                    title: "分享成功",
                    text: "1秒后自动关闭。",
                    timer: 1500,
                    showConfirmButton: false
                  });
            });
                },
                cancel: function () {
                  
                    // 用户取消分享后执行的回调函数
                                 swal({
                    title: "您已取消分享",
                    text: "1秒后自动关闭。",
                    timer: 1500,
                    showConfirmButton: false
                  });
                }
            });

            wx.onMenuShareAppMessage({
                title: '{$title}', // 分享标题
                desc: '{$miaoshu}', // 分享描述
                link: '{$url}', // 分享链接
                imgUrl: 'http://www.hswhcy.com/public/images/logo.png', // 分享图标
                type: 'link', // 分享类型,music、video或link,不填默认为link
                dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
                success: function () {
                    // 用户确认分享后执行的回调函数
                    $.post("{:U('User/Public/share')}",{token:tk,},function(result){
                  swal({
                    title: "分享成功",
                    text: "1秒后自动关闭。",
                    timer: 1500,
                    showConfirmButton: false
                  });
              });
                    
                },
                cancel: function () {
                    // 用户取消分享后执行的回调函数
                  swal({
                    title: "您已取消分享",
                    text: "1秒后自动关闭。",
                    timer: 1500,
                    showConfirmButton: false
                  });
                }
            });
            //分享到QQ好友
            wx.onMenuShareQQ({
                title: '{$title}', // 分享标题
                desc: '{$miaoshu}', // 分享描述
                link: '{$url}', // 分享链接
                imgUrl: 'http://www.hswhcy.com/public/images/logo.png', // 分享图标
                success: function () {
                $.post("{:U('User/Public/share')}",{token:tk,},function(result){
                                    swal({
                    title: "分享成功",
                    text: "1秒后自动关闭。",
                    timer: 1500,
                    showConfirmButton: false
                          });
                    });
                },
                cancel: function () {
                 swal({
                    title: "您已取消分享",
                    text: "1秒后自动关闭。",
                    timer: 1500,
                    showConfirmButton: false
                  });
                }
            });
            //分享到QQ空间
            wx.onMenuShareQZone({
                title: '{$title}', // 分享标题
                desc: '{$miaoshu}', // 分享描述
                link: '{$url}', // 分享链接
                imgUrl: 'http://www.hswhcy.com/public/images/logo.png', // 分享图标
                success: function () {
                  $.post("{:U('User/Public/share')}",{token:tk,},function(result){
                                swal({
                    title: "分享成功",
                    text: "1秒后自动关闭。",
                    timer: 1500,
                    showConfirmButton: false
                  });
              });
                    // 用户确认分享后执行的回调函数
                },
                cancel: function () {
                    // 用户取消分享后执行的回调函数
                  swal({
                    title: "您已取消分享",
                    text: "1秒后自动关闭。",
                    timer: 1500,
                    showConfirmButton: false
                  });
                }
            });
        });
        //拍照或从手机相册中选图接口
        function show()
        {
            wx.chooseImage({
                count: 1, // 默认9
                sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
                sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
                success: function (res) {
                    var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
                    alert(localIds);
                }
            });
        }
        //开始录音
        function startRecord(){
            wx.startRecord();
        };
        //扫码
        function scan()
        {
            wx.scanQRCode({
                needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
                scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
                success: function (res) {
                    var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
                }
            });
        }
        wx.error(function(res){
            // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。

        });
        
</script>

控制器中

public function index() {

	$keyword=I('request.keyword');
	$shaixuan=I('get.shaixuan');
	
	$share = new \Common\Controller\BaseController;
    $share->shareWx();
 
	$this->assign('post',$data);
	$this->assign("formget",array_merge($_GET,$_POST));
	$this -> display();
	
}


下面是调用的方法

public function shareWx()
{
    //1、获取jsapi_ticket票据
    $appid='wx......';
    $jsapi_ticket = $this -> getJsApiTicket();
    //2、获取timestamp
    $timestamp = time();
    //3、获取noncestr
    $noncestr = $this -> getNoncestr();
    // 注意 URL 一定要动态获取,不能 hardcode.
    $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

    //3、获取signature 并sha1加密
    $signature = "jsapi_ticket=".$jsapi_ticket."&noncestr=".$noncestr."&timestamp=".$timestamp."&url=".$url;
    $signature = sha1($signature);
    $this -> assign('appid',$appid);
    $this -> assign('url',$url);
    $this -> assign('timestamp',$timestamp);
    $this -> assign('noncestr',$noncestr);
    $this -> assign('signature',$signature);
    // $this -> display('share');
}

下面是上面方法调用的方法

//获取jsapi_ticket全局票据
private function getJsApiTicket()
{
     //将jsapi_ticket存于memcache/session/cookie中
     
     $jsapi_ticket = session('jsapi_ticket');
     $ticket_expire_time = session('ticket_expire_time');
     
     if($jsapi_ticket && $ticket_expire_time > time())
     {
         //如果jsapi_ticket存在,并且没有过期
         return $jsapi_ticket;
     } else
     {
         //如果jsapi_ticket不存在或者过期,重新获取jsapi_ticket
         
         $access_token = $this ->getWxAccessToken();
         $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi";
         $res = $this -> http_curl($url, 'get', 'json');
         $jsapi_ticket = $res['ticket'];
         
         //将新的access_token存储到session中
         
         session('jsapi_ticket',$jsapi_ticket);
         session('ticket_expire_time',time() + 7000);
         return $jsapi_ticket;
     }
 }


//获取16位随机字符串

private function getNoncestr($num = 16)
{
    $array = array('1','2','3','4','5','6','7','8','9','0','q','w','e','r','t','y','u',
    'i','o','p','a','s','d','f','g','h','h','j','k','l','z','x','c','v','b','n','m',
    'Q','W','E','R', 'T','Y','U','I','O','P','A','S','D','F','G','H','J','K','L','Z',
    'X','C','V','B', 'N','M');
    $tmpstr = "";
    $max = count($array);
    for($i = 1; $i <= $num; $i ++)
    {
        $key = rand(0,$max - 1);
        $tmpstr .= $array[$key];
    }
    return $tmpstr;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值