zoukankan      html  css  js  c++  java
  • 微信分享朋友 朋友圈 修改图标和内容 自定义jsskd

    分享jssdk分享主要3块   1用Jssdk类来运算加密签名等 (传给js里)     2在需要分享的html页面调用 js(微信配置的js)3在1和2里面传参数(把js需要的参数通过jssdk类给js)

    appId和appSecret是肯定需要的 

    此次用的thinkphp5

    这张图是引入jssdk3

    Jssdk3代码如下:

    <?php
    namespace fast;
    
        class Jssdk3
        {
            private $appId;
            private $appSecret;
            
    
    
     public function __construct($appId, $appSecret) {
      //参数是这里传进来的  小和QQ496631085
       $this->appId = $appId;
    
       $this->appSecret = $appSecret;
    
     }
    
      public function getSignPackage() {
    
     
    
        $jsapiTicket = $this->getJsApiTicket();
    
        $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    
        $timestamp = time();
    
        $nonceStr = $this->createNonceStr();
    
        // 这里参数的顺序要按照 key 值 ASCII 码升序排序
    
        $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
    
        $signature = sha1($string);
    
        $signPackage = array(
    
          "appId"     => $this->appId,
    
          "nonceStr"  => $nonceStr,
    
          "timestamp" => $timestamp,
    
          "url"       => $url,
    
          "signature" => $signature,
    
          "rawString" => $string
    
        );
    
        return $signPackage; 
    
      }
    
      private function createNonceStr($length = 16) {
    
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    
        $str = "";
    
        for ($i = 0; $i < $length; $i++) {
    
          $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    
        }
    
        return $str;
    
      }
    
      private function getJsApiTicket() {
    
        // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
    
          
    
        $data = json_decode($this->getCacheTicket(),true);
        // dump($data);
        if ($data['expire_time'] < time()) {
    
          $accessToken = $this->getAccessToken();
    
          $url = "http://api.weixin.qq.com/cgi-bin/ticket/getticket?type=1&access_token=$accessToken";
    
          $res = json_decode($this->httpGet($url));
    
          $ticket = $res->ticket;
    
          if ($ticket) {
    
            $data['expire_time'] = time() + 7000;
    
            $data['jsapi_ticket'] = $ticket;
    
            $this->setCacheTicket(json_encode($data));
    
          }
    
        } else {
    
          $ticket = $data['jsapi_ticket'];
    
        }
    
        return $ticket;
    
      }
    
      private function getAccessToken() {
    
        // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
    
        $data = json_decode($this->getCacheToken(),true);
    
        if ($data['expire_time'] < time()) {
    
          $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
    
          $res = json_decode($this->httpGet($url));
    
          $access_token = $res->access_token;
    
          if ($access_token) {
    
            $data['expire_time'] = time() + 7000;
    
            $data['access_token'] = $access_token;
    
            $this->setCacheToken(json_encode($data));
    
          }
    
        } else {
    
          $access_token = $data['access_token'];
    
        }
    
        return $access_token;
    
      }
    
      private function httpGet($url) {
    
        $curl = curl_init();
    
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
    
        curl_setopt($curl, CURLOPT_URL, $url);
    
        $res = curl_exec($curl);
    
        curl_close($curl);
    
        return $res;
    
      }
    
      
    
      private function getCacheToken()
    
       {
            return file_get_contents('weixin_share_token.json');
         
    
       }
    
       private function setCacheToken($token)
    
       {
            return file_put_contents('weixin_share_token.json', $token);
          // return MEM::mset("weixin_share_token",$token,7000); 
        //QQ496631085
       }
    
       
    
       private function getCacheTicket()
    
       {
    
           return file_get_contents('jsapi_ticket.json');  //缓存获取,也可自己放入数据库存储
    
       }
    
       private function setCacheTicket($ticket)
    
       {
    
          return file_put_contents('jsapi_ticket.json', $ticket);  //设置缓存
    
       }
    
    
    
    
    
    
    
        }

     然后在你需要的页面传入参数我的是在index.php  里面的public function_initialize函数里面   就是进来就执行_initialize函数里面的

         $this->jssdk = new Jssdk3($this->appId,$this->appSecret);  //这里就是传你的微信参数哈QQ496631085
            $this->getsign = $this->jssdk->getSignPackage();
            // dump($this->getsign );
            $this->view->assign('appid',$this->appId );
            $this->view->assign('wxsign',$this->getsign);
    
            $share['title'] = "一元抵一千元,三网合一、自适应型定制网站";//分享标题
            $share['sharedesc'] = "您企业网络营销的一部分QQ496631085";//分享简介
            
            $share['icourl'] = "http://xiaohe520.club/assets/img/ico.png";  //这里是你的图片
    
            $this->view->assign('share',$share);//这个就是把变量传到html里面的

    我写的是share.html 这个是公共的  那个页面用就直接调用

    <script type="text/javascript" src="https://res2.wx.qq.com/open/js/jweixin-1.4.0.js "></script>
    <script>
      wx.config({
          debug: false,//false,true
          appId: '{$appid}',
          timestamp: {$wxsign.timestamp}, // 必填,生成签名的时间戳
          nonceStr: '{$wxsign.nonceStr}',// 必填,生成签名的随机串
          signature: '{$wxsign.signature}',// 必填,签名
          jsApiList: [
            'checkJsApi',
            'onMenuShareTimeline',
            'onMenuShareAppMessage',
            'onMenuShareQQ',
            'onMenuShareWeibo',
            'onMenuShareQZone',
            'hideMenuItems',
            'showMenuItems',
            // 'hideAllNonBaseMenuItem',
            // 'showAllNonBaseMenuItem',
            // 'translateVoice',
            // 'startRecord',
            // 'stopRecord',
            // 'onVoiceRecordEnd',
            // 'playVoice',
            // 'onVoicePlayEnd',
            // 'pauseVoice',
            // 'stopVoice',
            // 'uploadVoice',
            // 'downloadVoice',
            // 'chooseImage',
            // 'previewImage',
            // 'uploadImage',
            // 'downloadImage',
            // 'getNetworkType',
            // 'openLocation',
            // 'getLocation',
            // 'hideOptionMenu',
            // 'showOptionMenu',
            // 'closeWindow',
            // 'scanQRCode',
            // 'chooseWXPay',
            // 'openProductSpecificView',
            // 'addCard',
            // 'chooseCard',
            'openCard'
          ]
      });
    </script>
    
            <!--  <script type="text/javascript" src="__XIAOHE__/js/demo.js"></script>  -->
            <script type="text/javascript">
            var shareTitle = '{$share.title}',
            sharelink = '{$share.sharelink}',//这里就是分享的连接   下面是简介  上面是标题等 QQ496631085
            sharedesc = '{$share.sharedesc}',
            myimgUrl = '{$share.icourl}';
                wx.ready(function () {
            wx.onMenuShareAppMessage({
                title: shareTitle, // 分享标题
                desc: sharedesc, // 分享描述
                link: sharelink, // 分享链接
                imgUrl: myimgUrl, // 分享图标
                success: function (res) {
                    alert('已分享');
                },
                cancel: function (res) {
                    alert('这么好的活动,确定不要分享吗?');
                }
            });
            wx.onMenuShareTimeline({
                title: shareTitle, // 分享标题
                desc: sharedesc, // 分享描述
                link: sharelink, // 分享链接
                imgUrl: myimgUrl, // 分享图标
                success: function (res) {
    
                },
                cancel: function (res) {
                }
            });
            wx.onMenuShareQQ({
                title: shareTitle, // 分享标题
                desc: sharedesc, // 分享描述
                link: sharelink, // 分享链接
                imgUrl: myimgUrl, // 分享图标
                success: function (res) {
                     alert('谢谢您的分享');
                },
                cancel: function (res) {
                }
            });
            wx.onMenuShareQZone({
                title: shareTitle, // 分享标题
                desc: sharedesc, // 分享描述
                link: sharelink, // 分享链接
                imgUrl: myimgUrl, // 分享图标
                success: function (res) {
                },
                cancel: function (res) {
                }
            });
        });
        wx.error(function (res) {
            var resss = JSON.stringify(res);
            layer.open({
                content: resss,
                skin: 'mag',
                time: 2
            });
        });
            
      // wx.ready(function(){
            //   // 1 判断当前版本是否支持指定 JS 接口,支持批量判断
            //   // document.querySelector('#checkJsApi').onclick = function () {
            //   //   wx.checkJsApi({
            //   //     jsApiList: [
            //   //       'getNetworkType',
            //   //       'previewImage'
            //   //     ],
            //   //     success: function (res) {
            //   //       alert(JSON.stringify(res));
            //   //     }
            //   //   });
            //   // };
    
            //   // 2. 分享接口
            //   // 2.1 监听“分享给朋友”,按钮点击、自定义分享内容及分享结果接口
            //   document.querySelector('#onMenuShareAppMessage').onclick = function () {
            //     wx.onMenuShareAppMessage({
            //       title: '互联网之子',
            //       desc: '在长大的过程中,我才慢慢发现,我身边的所有事,别人跟我说的所有事,那些所谓本来如此,注定如此的事,它们其实没有非得如此,事情是可以改变的。更重要的是,有些事既然错了,那就该做出改变。',
            //       link: 'http://website.wxjoi.com/index/index/xqy.html?id=5',
            //       imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg',
            //       trigger: function (res) {
            //         // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
            //         alert('用户点击发送给朋友');
            //       },
            //       success: function (res) {
            //         alert('已分享');
            //       },
            //       cancel: function (res) {
            //         alert('已取消');
            //       },
            //       fail: function (res) {
            //         alert(JSON.stringify(res));
            //       }
            //     });
            //     alert('已注册获取“发送给朋友”状态事件');
            //   };
    
            //   // 2.2 监听“分享到朋友圈”按钮点击、自定义分享内容及分享结果接口
            //   document.querySelector('#onMenuShareTimeline').onclick = function () {
            //     wx.onMenuShareTimeline({
            //       title: '互联网之子',
            //       link: 'http://website.wxjoi.com/index/index/xqy.html?id=5',
            //       imgUrl: 'http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg',
            //       trigger: function (res) {
            //         // 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
            //         alert('用户点击分享到朋友圈');
            //       },
            //       success: function (res) {
            //         alert('已分享');
            //       },
            //       cancel: function (res) {
            //         alert('已取消');
            //       },
            //       fail: function (res) {
            //         alert(JSON.stringify(res));
            //       }
            //     });
            //     alert('已注册获取“分享到朋友圈”状态事件');
            //   };
    
            // });
        </script>

    在显示的页面

    直接调用公共的

    {include file="./index/public/share" /}  是tp里面调用html的一个语句

    <script type="text/javascript" src="__XIAOHE__/js/jquery.min.js"></script>
            {include file="./index/public/share" /}

     不懂的可以提问

  • 相关阅读:
    http://www.cnblogs.com/zhengyun_ustc/p/55solution2.html
    http://www.cnblogs.com/carekee/articles/1854674.html
    http://www.blogjava.net/xylz/archive/2010/07/08/325587.html
    http://honda418.iteye.com/blog/337052/
    解决myeclipse每次启动注册码过期输入注册码
    JavaScript只能为汉字
    解决 不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接
    websphere变成英文了怎么变回中文
    【技术贴】解决MySql连接不上 ip远程连接Host is not allowed to conn
    【技术贴】解决bug mantisbt APPLICATION ERROR #1502 没有找到类别
  • 原文地址:https://www.cnblogs.com/xiaohe520/p/12090490.html
Copyright © 2011-2022 走看看