PHP實現微信網頁授權開發教程_php執行個體

來源:互聯網
上載者:User

微信網頁授權是服務號才有的進階功能,開發人員可以通過授權後擷取使用者的基本資料;在此之前,想要擷取訊息資訊只能在使用者和公眾號互動時根據openid擷取使用者資訊;而微信網頁授權可在不需要訊息互動,也不需要關注的情況下擷取使用者的基本資料。

微信網頁授權時通過OAuth2.0完成的,整個過程分為三步:

  • 使用者授權,擷取code;
  • 根據code擷取access_token【可通過refresh_token重新整理擷取較長有效期間】
  • 通過access_token和openid擷取使用者資訊

對微信網頁授權過程做了簡單封裝:

 <?php /** * 微信授權相關介面 */ class Wechat {    //進階功能-》開發人員模式-》擷取  private $app_id = 'xxx';  private $app_secret = 'xxxxxxx';    /**   * 擷取微信授權連結   *    * @param string $redirect_uri 跳轉地址   * @param mixed $state 參數   */  public function get_authorize_url($redirect_uri = '', $state = '')  {    $redirect_uri = urlencode($redirect_uri);    return "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$this->app_id}&redirect_uri={$redirect_uri}&response_type=code&scope=snsapi_userinfo&state={$state}#wechat_redirect";  }    /**   * 擷取授權token   *    * @param string $code 通過get_authorize_url擷取到的code   */  public function get_access_token($app_id = '', $app_secret = '', $code = '')  {    $token_url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$this->app_id}&secret={$this->app_secret}&code={$code}&grant_type=authorization_code";    $token_data = $this->http($token_url);        if($token_data[0] == 200)    {      return json_decode($token_data[1], TRUE);    }        return FALSE;  }    /**   * 擷取授權後的微信使用者資訊   *    * @param string $access_token   * @param string $open_id   */  public function get_user_info($access_token = '', $open_id = '')  {    if($access_token && $open_id)    {      $info_url = "https://api.weixin.qq.com/sns/userinfo?access_token={$access_token}&openid={$open_id}&lang=zh_CN";      $info_data = $this->http($info_url);            if($info_data[0] == 200)      {        return json_decode($info_data[1], TRUE);      }    }        return FALSE;  }    public function http($url, $method, $postfields = null, $headers = array(), $debug = false)  {    $ci = curl_init();    /* Curl settings */    curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);    curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);    curl_setopt($ci, CURLOPT_TIMEOUT, 30);    curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);     switch ($method) {      case 'POST':        curl_setopt($ci, CURLOPT_POST, true);        if (!empty($postfields)) {          curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);          $this->postdata = $postfields;        }        break;    }    curl_setopt($ci, CURLOPT_URL, $url);    curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);    curl_setopt($ci, CURLINFO_HEADER_OUT, true);     $response = curl_exec($ci);    $http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);     if ($debug) {      echo "=====post data======\r\n";      var_dump($postfields);       echo '=====info=====' . "\r\n";      print_r(curl_getinfo($ci));       echo '=====$response=====' . "\r\n";      print_r($response);    }    curl_close($ci);    return array($http_code, $response);  } }

以上就是本文的全部內容,希望對大家的學習有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.