• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例

    本文实例讲述了thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能。分享给大家供大家参考,具体如下:

    php代码

    function curlHtml($url){
      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_HEADER, 0);
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
      $output = curl_exec($ch);
      //释放curl句柄
      curl_close($ch);
      return $output;
    }
    class Wechat
    {
      public $errmsg;
      //微信登录获取用户信息
      public function getUserInfo() {
        //1.准备scope为snsapi_base网页授权页面
        $redirect_url = config('system.site_url') . $_SERVER["REQUEST_URI"];
        $baseurl = urlencode($redirect_url);
        $snsapi_base_url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . config('system.appid') . 'redirect_uri=' . $baseurl . 'response_type=codescope=snsapi_basestate=STATE#wechat_redirect';
        //2.静默授权,获取code
        //页面跳转至redirect_uri/?code=CODEstate=STATE
        $code = input('code');
        if (!isset($code) || empty($code)) {
          header('Location:' . $snsapi_base_url);exit(0);
        }
        //3.通过code换取网页授权access_token和openID
        $curl = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . config('system.appid') . 'secret=' . config('system.appsecret') . 'code=' . $code . 'grant_type=authorization_code';
        $content = curlHtml($curl);
        $result = json_decode($content, true);
        if(!isset($result['openid'])) {
          $this->errmsg = $result['errmsg'];return false;
        }
        $openid = $result['openid'];
        $userinfo = $this->getUserByOpenid($openid);
        return $userinfo;
      }
      private function getUserByOpenid($openid) {
        //获取access_token
        $token_info  = $this->curlGetWxAccessToken();
        $access_token = $token_info['value'];
        //通过OpenID来获取用户基本信息
        $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."openid=".$openid."lang=zh_CN";
        $content = curlHtml($url);
        $result = json_decode($content, true);
        return $result;
      }
      /**
       * [wxShare 微信分享]
       * @param [type] $url [description]
       * @return [type]   [description]
       */
      public function wxShare()
      {
        $noncestr = uniqid();
        $timestamp = time();
        $url = config('system.site_url') . $_SERVER["REQUEST_URI"];
        // $redis   = new \Redis;
        // $ticket_key = 'wx_ticket';
        // $ticket   = $redis->get($ticket_key);
        // if (!$ticket) {
        //   $ticket = $this->getJsapiTicket();
        //   $redis->set($ticket_key, $ticket);
        //   $redis->expire($ticket_key, 7200);
        // }
        $ticket = $this->getJsapiTicket();
        if ($ticket) {
          $str     = 'jsapi_ticket=' . $ticket . 'noncestr=' . $noncestr . 'timestamp=' . $timestamp . 'url=' . $url;
          $signature  = sha1($str);
          $return_data = [
            'noncestr' => $noncestr,
            'timestamp' => $timestamp,
            'signature' => $signature,
            'appid'   => config('system.appid'),
            'link'   => $url,
          ];
          return $return_data;
        }
      }
      private function getJsapiTicket()
      {
        $map['keyname'] = 'Ticket';
        $map['modifytime'] = array('GT', time() - 7200);
        $return       = WxTokenModel::getOne('*', $map);
        if ($return) {
          return $return['value'];
        } else {
          $token_info  = $this->curlGetWxAccessToken();
          $access_token = $token_info['value'];
          $url     = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' . $access_token . 'type=jsapi';
          $output    = curlHtml($url);
          $data     = json_decode($output, true);
          if (isset($data['errcode'])  $data['errcode'] == 0) {
            $condition['keyname'] = 'Ticket';
            $update_data['modifytime'] = time();
            $update_data['value']   = $data['ticket'];
            $up_result      = WxTokenModel::updateData($condition, $update_data);
            if ($up_result !== false) {
              return $data['ticket'];
            }
          }
        }
        return false;
      }
      private function curlGetWxAccessToken()
      {
        $map['keyname'] = 'AccessToken';
        $map['modifytime'] = array('GT', time() - 7200);
        $return = WxTokenModel::getOne('*', $map);
        if ($return) {
          return $return;
        } else {
          $url  = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credentialappid=' . config('system.appid') . 'secret=' . config('system.appsecret');
          $output = curlHtml($url);
          $data = json_decode($output, true);
          if ($data  isset($data['access_token'])) {
            $condition['keyname'] = 'AccessToken';
            $update_data['modifytime'] = time();
            $update_data['value'] = $data['access_token'];
            $up_result      = WxTokenModel::updateData($condition, $update_data);
            if ($up_result !== false) {
              return $update_data;
            }
          }
        }
        return false;
      }
    }
    
    

    html代码

    script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js">/script>
    script>
    wx.config({
       debug: false,
       appId: '{$appid}', // 必填,公众号的唯一标识
       timestamp: '{$timestamp}', // 必填,生成签名的时间戳
       nonceStr: '{$noncestr}', // 必填,生成签名的随机串
       signature: '{$signature}',// 必填,签名,见附录1
       jsApiList: ['onMenuShareTimeline'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    });
    wx.ready(function () {
      // 分享到朋友圈
      wx.onMenuShareTimeline({
       title: '', // 名
       link: '{$link}', // 地址
       imgUrl: '', // 分享的图标
       success: function () {
       // 用户确认分享后执行的回调函数
       },
       cancel: function () {
        // 用户取消分享后执行的回调函数
      }
      });
    });
    /script>
    
    

    更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

    希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • PHP实现网站应用微信登录功能详解
    • php的laravel框架快速集成微信登录的方法
    • php微信授权登录实例讲解
    上一篇:php实现的表单验证类完整示例
    下一篇:thinkphp3.2框架中where条件查询用法总结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例 thinkphp5,框架,结合,mysql,