微信公共号网页开发基础知识2

现在我们正式的进行微信端开发,我们微信公共号测试号都有了,但是我们要再手机上打开,或者在微信开发者工具上打开,所有我们要把代码放在线上才能使用

  • 首先我们要有一个服务器,我用的是新浪云服务器,下面简单的介绍一下使用方法与步骤
    1、注册登陆新浪云
    2、在用户中心找到控制台中的云应用SAE点击进去

    3、创建新应用
    ECBF58B2-4F79-4E73-8DAF-36A3214777B3.png

    4、点击域名进去找到应用中的代码管理 ,编辑代码
    5、现在就可以编辑代码了
    前面的基础步骤已完成,现在我们要做的就是重中之重了代码的编辑
  • 微信网页授权
    1、第一步:用户同意授权,获取code
    2、第二步:通过code换取网页授权access_token
    3、第三步:刷新access_token(如果需要)
    在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认拥有scope参数中的snsapi_base和snsapi_userinfo),尤其注意:由于授权操作安全等级较高,所以在发起授权请求时,微信会对授权链接做正则强匹配校验,如果链接的参数顺序不对,授权页面将无法正常访问
    首先我们需要一个公共的PHP来进行函数处理

    <?php
    //连接数据的函数;
    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;
    }
    }
    //操作数据库的添加函数;
    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;
        //设置编码格式
        mysqli_query($link, "set names utf8");
        $res = mysqli_query($link, $sql);
        //添加数据的id值 ;
        $num = mysqli_insert_id($link);
        if($res && mysqli_affected_rows($link)){
            return $num;
        }else{
            return false;
        }
    }
    //操作数据库的更新操作;
    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;
        }
    }
    //删除数据;
    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;
        }
    }
    //获取多条数据
    function getlist($table,$link=null,$where=null){
        $where = $where==null?"":" WHERE ".$where;
        $sql = "SELECT * FROM {$table}".$where;
        //设置编码格式
        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;
        }
    }
    //获取一条数据;
    function getone($table,$link=null,$where=null){
        //var_dump($link);
        $where = $where==null?"":" WHERE ".$where;
        $sql = "SELECT * FROM {$table}".$where;
        //设置编码格式
        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请求方式
    //1.初始化curl
    //2.设置curl
    //3.执行curl
    //4.关闭curl
    function httpGet($url) {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_TIMEOUT, 500);
        // 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
        // 如果在部署过程中代码在此处验证失败,请到       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里面请求post接口的函数
    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;
        }
    ?>
    

上面是封装的系统,现在对数据进行操作

  include "common.php";
  //用户获取code
  $code = $_GET['code'];
  //通过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时的授权页面:

0.jpg

4、第四步:拉取用户信息(需scope为 snsapi_userinfo)
如果网页授权作用域为snsapi_userinfo,则此时开发者可以通过access_token和openid拉取用户信息了。
http:GET(请使用https协议) https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
openid 用户的唯一标识
lang 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语
下面是通过代码执行可以得到以上参数

  $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'];
  //随机数
  $score = mt_rand(1, 100);

下面进行对数据库进行设置
首先找到数据与缓存服务,如果不想花太多钱的话就选择共享型MySQL进行数据库操作
//连接数据库
//用户名  : SAE_MYSQL_USER
//密  码 : SAE_MYSQL_PASS
//主库域名 : SAE_MYSQL_HOST_M
//从库域名 : SAE_MYSQL_HOST_S
//端  口 : SAE_MYSQL_PORT
//数据库名 : 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;
  //判断数据库里面有没有相关数据
  $result = getone("users", $link, "openid='{$openid}'");
  if ($result) {
      //已经存了 更新分数
      $uparr["score"] = $score;
      $re = update($uparr, $link, "users", "openid='{$openid}'");
      if ($re) {
          echo "更新成功";
      } else {
          echo "更新失败";
      }
  } else {
      //没有存
      $res = add($addArr, $link, "users");
      if ($res) {
          echo "添加成功";
      } else {
          echo "添加失败";
      }
  }

运行结果如下


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

数据库资源如下
99180E0D-BDED-4D86-9814-49ED3201D948.png

现在把数据展现在页面上

  <!DOCTYPE html>
  <html>
      <head>
          <title></title>
      </head>
      <body>
          <table border="" >
              <tr>
                  <th>昵称</th>
                  <th>头像</th>
                  <th>分数</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>

运行结果如下


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

以上只是简单地操作,后面要继续进行深究

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • cURL是一个利用URL语法规定来传输文件和数据的工具,支持很多协议和选项,如HTTP、FTP、TELNET等,能...
    司马东阳阅读 1,430评论 0 6
  • 原文地址:PHPcURL库函数抓取页面内容(转)作者:巴克 cURL是一个利用URL语法规定来传输文件和数据的工具...
    司马东阳阅读 1,169评论 0 3
  • 手写的时空:第3章 07 断裂情感逐一离去。 五年的萸,数月的拭歆,时间不等,可都带来伤痛,还有那些破坏我纯粹美好...
    茆茆2B阅读 313评论 1 5
  • 注意水果温度 不空腹吃酸涩味的水果 不要吃饱后立即吃水果 根据自身体质选择水果吃 均衡吃水果
    努力奋斗的一种阅读 162评论 0 0
  • 佛说,前生的五百次回眸,才换来今生的一次擦肩而过。 或早或晚,在人海茫茫中遇到一个心意相通的人。从此看星星看月亮看...
    安夏茉阅读 1,442评论 56 49