佳木斯湛栽影视文化发展公司

主頁 > 知識(shí)庫(kù) > thinkphp5框架結(jié)合mysql實(shí)現(xiàn)微信登錄和自定義分享鏈接與圖文功能示例

thinkphp5框架結(jié)合mysql實(shí)現(xiàn)微信登錄和自定義分享鏈接與圖文功能示例

熱門標(biāo)簽:銀行業(yè)務(wù) Mysql連接數(shù)設(shè)置 團(tuán)購(gòu)網(wǎng)站 Linux服務(wù)器 科大訊飛語音識(shí)別系統(tǒng) 阿里云 電子圍欄 服務(wù)器配置

本文實(shí)例講述了thinkphp5框架結(jié)合mysql實(shí)現(xiàn)微信登錄和自定義分享鏈接與圖文功能。分享給大家供大家參考,具體如下:

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.準(zhǔn)備scope為snsapi_base網(wǎng)頁授權(quán)頁面
    $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.靜默授權(quán),獲取code
    //頁面跳轉(zhuǎn)至redirect_uri/?code=CODEstate=STATE
    $code = input('code');
    if (!isset($code) || empty($code)) {
      header('Location:' . $snsapi_base_url);exit(0);
    }
    //3.通過code換取網(wǎng)頁授權(quán)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}', // 必填,公眾號(hào)的唯一標(biāo)識(shí)
   timestamp: '{$timestamp}', // 必填,生成簽名的時(shí)間戳
   nonceStr: '{$noncestr}', // 必填,生成簽名的隨機(jī)串
   signature: '{$signature}',// 必填,簽名,見附錄1
   jsApiList: ['onMenuShareTimeline'] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2
});
wx.ready(function () {
  // 分享到朋友圈
  wx.onMenuShareTimeline({
   title: '', // 名
   link: '{$link}', // 地址
   imgUrl: '', // 分享的圖標(biāo)
   success: function () {
   // 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
   },
   cancel: function () {
    // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
  }
  });
});
/script>

更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。

希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • PHP實(shí)現(xiàn)網(wǎng)站應(yīng)用微信登錄功能詳解
  • php的laravel框架快速集成微信登錄的方法
  • php微信授權(quán)登錄實(shí)例講解

標(biāo)簽:廣元 蚌埠 江蘇 萍鄉(xiāng) 衢州 棗莊 大理 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《thinkphp5框架結(jié)合mysql實(shí)現(xiàn)微信登錄和自定義分享鏈接與圖文功能示例》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    南康市| 新竹市| 辽宁省| 原阳县| 临澧县| 新邵县| 丹棱县| 岳阳县| 杭锦后旗| 桐梓县| 柞水县| 栾川县| 从江县| 社旗县| 禄劝| 文登市| 盘锦市| 华容县| 米林县| 多伦县| 岳西县| 会理县| 和顺县| 海安县| 新绛县| 轮台县| 东安县| 抚松县| 常熟市| 噶尔县| 大渡口区| 额尔古纳市| 浑源县| 吉隆县| 通许县| 疏附县| 确山县| 华池县| 泽普县| 霸州市| 棋牌|