微信公共號(hào)網(wǎng)頁(yè)開發(fā)基礎(chǔ)知識(shí)2

現(xiàn)在我們正式的進(jìn)行微信端開發(fā),我們微信公共號(hào)測(cè)試號(hào)都有了,但是我們要再手機(jī)上打開,或者在微信開發(fā)者工具上打開,所有我們要把代碼放在線上才能使用

  • 首先我們要有一個(gè)服務(wù)器,我用的是新浪云服務(wù)器,下面簡(jiǎn)單的介紹一下使用方法與步驟
    1、注冊(cè)登陸新浪云
    2、在用戶中心找到控制臺(tái)中的云應(yīng)用SAE點(diǎn)擊進(jìn)去

    3、創(chuàng)建新應(yīng)用
    ECBF58B2-4F79-4E73-8DAF-36A3214777B3.png

    4、點(diǎn)擊域名進(jìn)去找到應(yīng)用中的代碼管理 ,編輯代碼
    5、現(xiàn)在就可以編輯代碼了
    前面的基礎(chǔ)步驟已完成,現(xiàn)在我們要做的就是重中之重了代碼的編輯
  • 微信網(wǎng)頁(yè)授權(quán)
    1、第一步:用戶同意授權(quán),獲取code
    2、第二步:通過(guò)code換取網(wǎng)頁(yè)授權(quán)access_token
    3、第三步:刷新access_token(如果需要)
    在確保微信公眾賬號(hào)擁有授權(quán)作用域(scope參數(shù))的權(quán)限的前提下(服務(wù)號(hào)獲得高級(jí)接口后,默認(rèn)擁有scope參數(shù)中的snsapi_base和snsapi_userinfo),尤其注意:由于授權(quán)操作安全等級(jí)較高,所以在發(fā)起授權(quán)請(qǐng)求時(shí),微信會(huì)對(duì)授權(quán)鏈接做正則強(qiáng)匹配校驗(yàn),如果鏈接的參數(shù)順序不對(duì),授權(quán)頁(yè)面將無(wú)法正常訪問(wèn)
    首先我們需要一個(gè)公共的PHP來(lái)進(jìn)行函數(shù)處理

    <?php
    //連接數(shù)據(jù)的函數(shù);
    function connect($arr){
    $link = mysqli_connect($arr['DB_HOST'], $arr['DB_USER'],       $arr['DB_PWD'], $arr['DB_NAME'],$arr['DB_PORT']);
    if(mysqli_errno($link)){
      //echo mysqli_error($link);
     }else{
      return $link;
    }
    }
    //操作數(shù)據(jù)庫(kù)的添加函數(shù);
    function add($arr,$link=null,$table=null){
      $keys = "";
      $value = "";
        foreach($arr as $k=>$v){
          $keys.=$k.",";
          if(is_string($v)){
              $v = "'".$v."'";
          }
          $value.=$v.",";
        }
      $keys = substr($keys, 0,strlen($keys)-1);
        $value = substr($value, 0,strlen($value)-1);
    //    echo $keys."<hr>".$value;
        $sql = "INSERT INTO {$table} ({$keys}) VALUES ({$value})";
        //echo $sql;die;
        //設(shè)置編碼格式
        mysqli_query($link, "set names utf8");
        $res = mysqli_query($link, $sql);
        //添加數(shù)據(jù)的id值 ;
        $num = mysqli_insert_id($link);
        if($res && mysqli_affected_rows($link)){
            return $num;
        }else{
            return false;
        }
    }
    //操作數(shù)據(jù)庫(kù)的更新操作;
    function update($arr,$link=null,$table=null,$where=NULL){
        $where = $where==NULL?"":" WHERE ".$where;
        $str = "";
        foreach($arr as $k=>$v){
            if(is_string($v)){
                $v = "'".$v."'";
          }
      $str .= $k."=".$v.",";
        }
        $str =  substr($str, 0,strlen($str)-1);
        $sql = "UPDATE {$table} SET {$str}".$where;
        mysqli_query($link, "set names utf8");
        $res = mysqli_query($link, $sql);
        if($res && mysqli_affected_rows($link)){
            return true;
        }else{
            return false;
        }
    }
    //刪除數(shù)據(jù);
    function delete($table,$link=null,$where=null){
        $where = $where==null?"":" WHERE ".$where;
        $sql = "DELETE FROM {$table}".$where;
        $res = mysqli_query($link, $sql);
        if($res && mysqli_affected_rows($link)){
            return true;
        }else{
            return false;
        }
    }
    //獲取多條數(shù)據(jù)
    function getlist($table,$link=null,$where=null){
        $where = $where==null?"":" WHERE ".$where;
        $sql = "SELECT * FROM {$table}".$where;
        //設(shè)置編碼格式
        mysqli_query($link, "set names utf8");
        $res = mysqli_query($link, $sql);
        while($data = mysqli_fetch_assoc($res)){
            $arr[] = $data;
        }
        if($res && mysqli_num_rows($res)){
            return $arr;
        }else{
            return false;
        }
    }
    //獲取一條數(shù)據(jù);
    function getone($table,$link=null,$where=null){
        //var_dump($link);
        $where = $where==null?"":" WHERE ".$where;
        $sql = "SELECT * FROM {$table}".$where;
        //設(shè)置編碼格式
        mysqli_query($link, "set names utf8");
        $res = mysqli_query($link, $sql);
        if($res && mysqli_num_rows($res)){
            $data = mysqli_fetch_assoc($res);
            return $data;
        }else{
            return false;
        }
    }
    //get請(qǐng)求方式
    //1.初始化curl
    //2.設(shè)置curl
    //3.執(zhí)行curl
    //4.關(guān)閉curl
    function httpGet($url) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
        // 為保證第三方服務(wù)器與微信服務(wù)器之間數(shù)據(jù)傳輸?shù)陌踩裕形⑿沤涌诓捎胔ttps方式調(diào)用,必須使用下面2行代碼打開ssl安全校驗(yàn)。
        // 如果在部署過(guò)程中代碼在此處驗(yàn)證失敗,請(qǐng)到       http://curl.haxx.se/ca/cacert.pem 下載新的證書判別文件。
       // curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
       // curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
        curl_setopt($curl, CURLOPT_URL, $url);
        $res = curl_exec($curl);
        curl_close($curl);
        return $res;
      }
    //php里面請(qǐng)求post接口的函數(shù)
    function httpPost($data,$url){
             $ch = curl_init();
             curl_setopt($ch, CURLOPT_URL, $url);
             curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
             curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
             curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
             curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
             curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
             curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
             curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
             curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
             $tmpInfo = curl_exec($ch);
             if (curl_errno($ch)) {
              return curl_error($ch);
            }
            curl_close($ch);
            return $tmpInfo;
        }
    ?>
    

上面是封裝的系統(tǒng),現(xiàn)在對(duì)數(shù)據(jù)進(jìn)行操作

  include "common.php";
  //用戶獲取code
  $code = $_GET['code'];
  //通過(guò)code獲取access_token;
  $url = "https://api.weixin.qq.com/sns/oauth2    /access_token?appid=wxdb15cc03e3b842f0&      secret=d2e266f71b96ee4bc92e0ed65bb8655e&code=$code&      grant_type=authorization_code";
  $res = httpGet($url);
  $data = json_decode($res, true);
  $token = $data['access_token'];
  $openid = $data['openid'];

下圖為scope等于snsapi_userinfo時(shí)的授權(quán)頁(yè)面:

0.jpg

4、第四步:拉取用戶信息(需scope為 snsapi_userinfo)
如果網(wǎng)頁(yè)授權(quán)作用域?yàn)閟nsapi_userinfo,則此時(shí)開發(fā)者可以通過(guò)access_token和openid拉取用戶信息了。
http:GET(請(qǐng)使用https協(xié)議) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
access_token 網(wǎng)頁(yè)授權(quán)接口調(diào)用憑證,注意:此access_token與基礎(chǔ)支持的access_token不同
openid 用戶的唯一標(biāo)識(shí)
lang 返回國(guó)家地區(qū)語(yǔ)言版本,zh_CN 簡(jiǎn)體,zh_TW 繁體,en 英語(yǔ)
下面是通過(guò)代碼執(zhí)行可以得到以上參數(shù)

  $url2 = "https://api.weixin.qq.com/sns/userinfo?access_token=$token&openid=$openid&lang=zh_CN";
  $res2 = httpGet($url2);
  $userinfo = json_decode($res2, true);
  $nickname = $userinfo['nickname'];
  $headurl = $userinfo['headimgurl'];
  $openid = $userinfo['openid'];
  //隨機(jī)數(shù)
  $score = mt_rand(1, 100);

下面進(jìn)行對(duì)數(shù)據(jù)庫(kù)進(jìn)行設(shè)置
首先找到數(shù)據(jù)與緩存服務(wù),如果不想花太多錢的話就選擇共享型MySQL進(jìn)行數(shù)據(jù)庫(kù)操作
//連接數(shù)據(jù)庫(kù)
//用戶名  : SAE_MYSQL_USER
//密  碼 : SAE_MYSQL_PASS
//主庫(kù)域名 : SAE_MYSQL_HOST_M
//從庫(kù)域名 : SAE_MYSQL_HOST_S
//端  口 : SAE_MYSQL_PORT
//數(shù)據(jù)庫(kù)名 : SAE_MYSQL_DB

  $arr['DB_HOST'] = SAE_MYSQL_HOST_M;
  $arr['DB_USER'] = SAE_MYSQL_USER;
  $arr['DB_PWD'] = SAE_MYSQL_PASS;
  $arr['DB_NAME'] = SAE_MYSQL_DB;
  $arr['DB_PORT'] = SAE_MYSQL_PORT;
  $link = connect($arr);
  //var_dump($link);
  $addArr['nickname'] = $nickname;
  $addArr['headurl'] = $headurl;
  $addArr['openid'] = $openid;
  $addArr['score'] = $score;
  //判斷數(shù)據(jù)庫(kù)里面有沒(méi)有相關(guān)數(shù)據(jù)
  $result = getone("users", $link, "openid='{$openid}'");
  if ($result) {
      //已經(jīng)存了 更新分?jǐn)?shù)
      $uparr["score"] = $score;
      $re = update($uparr, $link, "users", "openid='{$openid}'");
      if ($re) {
          echo "更新成功";
      } else {
          echo "更新失敗";
      }
  } else {
      //沒(méi)有存
      $res = add($addArr, $link, "users");
      if ($res) {
          echo "添加成功";
      } else {
          echo "添加失敗";
      }
  }

運(yùn)行結(jié)果如下


B9413A75-6958-4DC9-8C61-DD567E12AC68.png

數(shù)據(jù)庫(kù)資源如下
99180E0D-BDED-4D86-9814-49ED3201D948.png

現(xiàn)在把數(shù)據(jù)展現(xiàn)在頁(yè)面上

  <!DOCTYPE html>
  <html>
      <head>
          <title></title>
      </head>
      <body>
          <table border="" >
              <tr>
                  <th>昵稱</th>
                  <th>頭像</th>
                  <th>分?jǐn)?shù)</th>
              </tr>
              <?php foreach($list as $key =>$val){?>            
              <tr>
                  <td><?php echo $val['nickname'] ?></td>
                  <td><img src="<?php echo $val['headurl'] ?>"/></td>
                  <td><?php echo $val['score'] ?></td>
              </tr>
              <?php } ?>
          </table>
      </body>
  </html>

運(yùn)行結(jié)果如下


C9E778F1-7D0C-4A40-B106-0903AD90C7FF.png

以上只是簡(jiǎn)單地操作,后面要繼續(xù)進(jìn)行深究

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • cURL是一個(gè)利用URL語(yǔ)法規(guī)定來(lái)傳輸文件和數(shù)據(jù)的工具,支持很多協(xié)議和選項(xiàng),如HTTP、FTP、TELNET等,能...
    司馬東陽(yáng)閱讀 1,519評(píng)論 0 6
  • 原文地址:PHPcURL庫(kù)函數(shù)抓取頁(yè)面內(nèi)容(轉(zhuǎn))作者:巴克 cURL是一個(gè)利用URL語(yǔ)法規(guī)定來(lái)傳輸文件和數(shù)據(jù)的工具...
    司馬東陽(yáng)閱讀 1,267評(píng)論 0 3
  • 手寫的時(shí)空:第3章 07 斷裂情感逐一離去。 五年的萸,數(shù)月的拭歆,時(shí)間不等,可都帶來(lái)傷痛,還有那些破壞我純粹美好...
    茆茆2B閱讀 372評(píng)論 1 5
  • 注意水果溫度 不空腹吃酸澀味的水果 不要吃飽后立即吃水果 根據(jù)自身體質(zhì)選擇水果吃 均衡吃水果
    努力奮斗的一種閱讀 189評(píng)論 0 0
  • 佛說(shuō),前生的五百次回眸,才換來(lái)今生的一次擦肩而過(guò)。 或早或晚,在人海茫茫中遇到一個(gè)心意相通的人。從此看星星看月亮看...
    安夏茉閱讀 1,608評(píng)論 56 49

友情鏈接更多精彩內(nèi)容