溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

微信開發(fā)之用戶組

發(fā)布時間:2020-08-05 22:03:09 來源:網絡 閱讀:781 作者:canmengqian 欄目:移動開發(fā)

2016年06月18日 (圖片無法上傳,只能通過上傳附件)

1:創(chuàng)建用戶組

   微信跟QQ一樣可以創(chuàng)建組名,刪除組名,修改組名,查詢組名,這些操作都是一系列的接口,只需要調用相關的接口,并以curl的形式進行發(fā)送,便可以獲得相關的結果

創(chuàng)建分組

一個公眾賬號,最多支持創(chuàng)建100個分組。

接口調用請求說明

http請求方式: POST(請使用https協議)https://api.weixin.qq.com/cgi-bin/groups/create?access_token=ACCESS_TOKEN

POST數據格式:json

POST數據例子:{"group":{"name":"test"}}

參數說明

參數 說明

access_token 調用接口憑證

name 分組名字(30個字符以內)

返回說明 正常時的返回JSON數據包示例:

{

    "group": {

        "id": 107, 

        "name": "test"

    }

}

         

   下面是相關代碼的實現

我們需要通過curl的形式將數據包發(fā)送過去,返回的結果是一個StdClass形式的json數據,我們需要將stdClass進行轉換為數組形式,所以我們創(chuàng)建一個func.php文件,后面的組的相關操作都基于這些函數

<?php 

       //設定appID 和secret

  define ("APPID","wx70fe852945a945b6",true);

  define ("SECRET",'d05c2fc161d71c8317331a39044a7d93',true);

  $APPID="wx70fe852945a945b6";

  $SECRET="d05c2fc161d71c8317331a39044a7d93";

      function curl($url,$data=null)

 {

  //初始化

  $curl=curl_init();

  curl_setopt($curl, CURLOPT_URL, $url);//設置傳輸鏈接

           curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);//設置SSL憑證

           curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false );

           curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//是否顯示在瀏覽器上

  if(!empty($data))

  {

  //進行post數據

  curl_setopt($curl,CURLOPT_POST,1);

  curl_setopt($curl,CURLOPT_POSTFIELDS,$data);

  }

$result=curl_exec($curl);//執(zhí)行curl

curl_close($curl);//關閉curl

return $result;

 }

  function transition ($data)

 {

   if(is_object($data))

{

 $data=(array)$data;

}

if(is_array($data))

{

foreach($data as $key=>$value)

{

  $data[$key]=transition($value);

}

}

return $data;

 }

 //將多維數組轉成字符串

  function recount($result)

{

   if(is_array($result))

{

  foreach($result as $key=>$value)

  {    

 recount($value); 

 return $value;

  }

 

}

}

 //access_token鏈接地址

 $access_token_url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$APPID&secret=$SECRET";

//獲取access_token.將返回的json格式轉成數組,返回一個數組形式的access_token

$access_token=(array)json_decode(curl($access_token_url));

$access_token=$access_token['access_token'];

?>

利用上面的access_token我們便可以做我們想做的任何事了

首先我們進行組的創(chuàng)建,我們將文件命名為creategroup.php

     1  界面展示

       

看起來很簡單的HTML的代碼,相信有HTML基礎的都能寫出

 那么如何創(chuàng)建組呢?很簡單,我們只需將創(chuàng)建組的API鏈接提交過去就可以了

相關的代碼

   <?php  echo '<meta http-equiv="content-type" content="text/html; charset=utf-8">'; 

?>

<!doctype html>

<html>

<head>

<title>無標題文檔</title>

</head>


<body>

      <form action="#" method="post">

         <p>新建分組</p>

         <input type="text" name="tag" placeholder="新建一個分組">

         <input type="submit" name="-1" id="sub" value="提交">

         

      </form>

      <?php 

    //如果提交成功,那么進行組的創(chuàng)建

        if(isset($_POST[-1]))

 {

         

    function create_group()

{    require "func.php";

$create_url="https://api.weixin.qq.com/cgi-bin/tags/create?access_token=$access_token";

        $tag=$_POST['tag'];//獲取組名

$poststr="

         {

 \"tag\":

     {

 \"name\":\"$tag\";

 }

 }

";

if($result=curl($create_url,$poststr))

{

echo "<script type=\"text/javascript\">alert('執(zhí)行成功,三秒之后將自動跳回主頁')</script>";

//設置跳轉回主頁

 echo "<script type=\"text/javascript\">setTimeout(window.navigate(\"getgroup.php\"),3000)</script>";

}

else

{echo "<script type=\"text/javascript\">alert('執(zhí)行失敗')</script>";}

}

create_group();

 }

 

 ?>

</body>

</html>

2:接下來是展示所有的組名,我們先看看微信官方的文檔

   查詢所有分組

接口調用請求說明

http請求方式: GET(請使用https協議)https://api.weixin.qq.com/cgi-bin/groups/get?access_token=ACCESS_TOKEN

參數說明

參數 說明

access_token 調用接口憑證

返回說明 正常時的返回JSON數據包示例:

{

    "groups": [

        {

            "id": 0, 

            "name": "未分組", 

            "count": 72596

        }, 

        {

            "id": 1, 

            "name": "黑名單", 

            "count": 36

        }, 

        {

            "id": 2, 

            "name": "星標組", 

            "count": 8

        }, 

        {

            "id": 104, 

            "name": "華東媒", 

            "count": 4

        }, 

        {

            "id": 106, 

            "name": "★不測試組★", 

            "count": 1

        }

    ]

}

參數說明

參數 說明

groups 公眾平臺分組信息列表

id 分組id,由微信分配

name 分組名字,UTF8編碼

count 分組內用戶數量

錯誤時的JSON數據包示例(該示例為AppID無效錯誤):

    官方文檔對于返回的json數據已經很明了了,一個組名里邊包含了基本的信息,組id,組名以及組內的用戶數量。我們無法直接將返回的json數據直接顯示到頁面上,那么我們如何解析json呢?微信給我們返回的是一個stdclass類型的json,所以第一步我們需要將json轉為數組,php中有一個json_decode()函數,此函數能夠將json數據轉為stdclass的數組,stdclass并不等于數組,所以我們還要講stdclass轉化為array形式,在func.php中transition()函數就有這樣的功能。

我們先看看頁面顯示樣子,看看我們通過curl從騰訊上獲取的數據是什么樣的


上圖我們創(chuàng)建了一個表,第一行是一個創(chuàng)建新組的功能,在以下的行中,我們能夠看到組編號,組名,以及組內人數。那么這個是如何做到的呢?很簡單,當我們已經獲取到返回回來的json數據之后,我們對json進行數據包裝,把json做成數組形式。那么如何實現數據包裝呢?也很簡單,我們不斷的調用解析函數,將它最終變?yōu)閿到M的形式,然后遍歷這個數組就行了。

展示源代碼:getGroup.php

 <body>

     <div id="box">

    <div id="group">

<?php 

      require "func.php";

 $groupurl="https://api.weixin.qq.com/cgi-bin/groups/get?access_token={$access_token}";

 $result=json_decode(curl($groupurl));//獲取包裝之后的數據,以數組的形式存儲

 //$result=curl($groupurl);

  //將STDclass類型轉為數組類型

 function G_transition ($data)

 {

   if(is_object($data))

{

 $data=(array)$data;

}

if(is_array($data))

{

foreach($data as $key=>$value)

{

  $data[$key]=G_transition($value);

}

}

return $data;

 }

 $result=G_transition($result);  

 function G_recount($result)

{

   if(is_array($result))

{

  foreach($result as $key=>$value)

  {    

 G_recount($value); 

 return $value;

  }

 

}

}

$resultG=G_recount($result);

echo "<table border=\"1px dashed\" bordercolor=\"#FF3333\">";

    echo "<tr><th colspan=\"3\"><a href=\"createGroup.php\">創(chuàng)建一個新組</a></th></tr>";

echo "<th>編號</th><th>組名</th><th>人數</th>";

for($i=0;$i<count($resultG);$i++)

     

{

 echo "<tr>";

 

foreach ($resultG[$i] as $key=>$value)

  { 

    

 if($key=='id')

 {

 

 echo "<td  align=\"center\"title=\"\">[$value]<a href=\"delete.php?num=$value\">刪除</a><a href=\"modify.php?num=$value\">修改</a></td>";

 }

 else 

 {

       echo "<td> $value</td>";

 }

  

}

echo "</tr>";

}

echo "</table>";

?>

      </div>

      <hr/>  

       <div>

          <hr/>


  3:我們如何修改分組名

     修改分組名

接口調用請求說明

http請求方式: POST(請使用https協議)https://api.weixin.qq.com/cgi-bin/groups/update?access_token=ACCESS_TOKEN

POST數據格式:json

POST數據例子:{"group":{"id":108,"name":"test2_modify2"}}

參數說明

參數 說明

access_token 調用接口憑證

id 分組id,由微信分配

name 分組名字(30個字符以內)

返回說明 正常時的返回JSON數據包示例:

{"errcode": 0, "errmsg": "ok"}

錯誤時的JSON數據包示例(該示例為AppID無效錯誤):

  官方文檔提供了修改分組名的接口,所以我們可以做一個修改的鏈接和一個修改組的modify.php文件

   根據官方文檔,我們需要通過組id才能進行修改,根據我們在創(chuàng)建組的時候傳輸過來的json數據中我們可以獲取到組id,所有我們可以通過創(chuàng)建鏈接的方式,當點擊鏈接的時候,會把組id以get的方式傳送到modify文件中,而modify.php可以通過$_GET的形式接收組id.

   我們先寫好這個傳送組id的鏈接,

      for($i=0;$i<count($resultG);$i++)

     

{

 echo "<tr>";

 

foreach ($resultG[$i] as $key=>$value)

  { 

    

 if($key=='id')

 {

 

 echo "<td  align=\"center\"title=\"\">[$value]<a href=\"delete.php?num=$value\">刪除</a><a href=\"modify.php?num=$value\">修改</a></td>";

 }

 else 

 {

       echo "<td> $value</td>";

 }

  

}

echo "</tr>";

}

代碼中,我們對返回的數組進行遍歷,如果發(fā)現key值是id,那么我們將值獲取過來并且加入到鏈接尾部,注意get方式的寫法

      echo "<td  align=\"center\"title=\"\">[$value]<a href=\"delete.php?num=$value\">刪除</a><a href=\"modify.php?num=$value\">修改</a></td>";

跳轉到modify.php頁面后,我們進行相關的處理,在該頁面上,我們仍然有一個HTML輸入框


代碼如下:

    <form action="#" method="post">

      <p>更新組名</p>

      <input type="hidden" name="num" value="<?php echo $_GET['num']?>">

      <input  type="text"id="modify" name="name">

      <input type="submit" value="修改" name="-1">

  </form>

<?php 

    //此程序用于修改標簽組

 

function modify()

{     $num=$_POST['num'];

     $name=$_POST['name'];

 require "func.php";

 $modify_url="https://api.weixin.qq.com/cgi-bin/tags/update?access_token=$access_token";

 //post過去的數據

 $poststr="

        {

  \"tag\":

        {

 \"id\":\"$num\",

 \"name\":\"$name\"

}

}

 

 ";

 $result=(array)json_decode(curl($modify_url,$poststr));

 $result=$result['errmsg'];

 if($result=='ok')

 {

    echo "<script type=\"text/javascript\">

        alert(\"$result\");

     </script>";

//進行頁面跳轉

echo "<script type=\"text/javascript\">

            setTimeout(window.location.href=\"getgroup.php\",3000);

   </script>";

 }

else

{

echo "<script type=\"text/javascript\">

        alert('wrong');

     </script>";

}

 

}

if(isset($_POST['-1']))

{

modify();

}

?>

如果執(zhí)行成功,那么會進行彈出提醒框,等待五秒后自動跳轉回getGroup.php頁面

4:刪除組

   組名一般不允許刪除,但是微信平臺仍然給出了相關的刪除接口

   注意本接口是刪除一個用戶分組,刪除分組后,所有該分組內的用戶自動進入默認分組。 接口調用請求說明

http請求方式: POST(請使用https協議)https://api.weixin.qq.com/cgi-bin/groups/delete?access_token=ACCESS_TOKEN

POST數據格式:json

POST數據例子:{"group":{"id":108}}

參數說明

參數 說明

access_token 調用接口憑證

group 分組

id 分組的id

返回說明 正常時的返回JSON數據包示例:


通過傳遞的json數據,我們只需要將組id進行傳遞到delete.php頁面并進行相關的刪除操作即可

 代碼顯示:

    <?php 

    //該段程序用來刪除組標簽,成功之后會給予提示,并且跳轉回getgroup.php頁面

function delete()

{

$num=$_GET['num'];//接收來自getgroup頁面的編號

require "func.php";

$delete_url="https://api.weixin.qq.com/cgi-bin/tags/delete?access_token=$access_token";

$data=json_encode(array("tag"=>array("id"=>$num)));

//如果curl函數執(zhí)行成功,那么會返回一個狀態(tài)值

if($result=curl($delete_url,$data))

{

echo "<script type=\"text/javascript\">alert('執(zhí)行成功,三秒之后將自動跳回主頁')</script>";

//設置跳轉回主頁

 echo "<script type=\"text/javascript\">setTimeout(window.history.back(-1),8000)</script>";

}

else

{echo "<script type=\"text/javascript\">alert('執(zhí)行失敗')</script>";}

}

delete();

?>

5:對組成員進行批量移動

   有時候我們需要對組內的成員進行移動到其他的組里面,在這點上,微信平臺也給出了相應的接口我們先看官方的文檔說明

    批量移動用戶分組

接口調用請求說明

http請求方式: POST(請使用https協議)https://api.weixin.qq.com/cgi-bin/groups/members/batchupdate?access_token=ACCESS_TOKEN

POST數據格式:json

POST數據例子:{"openid_list":["oDF3iYx0ro3_7jD4HFRDfrjdCM58","oDF3iY9FG×××Hom3B-0w5j4jlEyY"],"to_groupid":108}

參數說明

參數 說明

access_token 調用接口憑證

openid_list 用戶唯一標識符openid的列表(size不能超過50)

to_groupid 分組id

返回說明 正常時的返回JSON數據包示例:

{"errcode": 0, "errmsg": "ok"}


 從傳遞的json數據可以看到,具有一個open_list和一個to_groupid,分別表示要移動的組成員的openid和將要移動的組id.那么我們如何開始移動呢?現在已基本清楚了,只需要把openid傳遞到open_list,將組id傳遞到to_groupid中,然后將包裝好的json數據通過curl函數post過去.在批量分組之前,我們還要知道一件事,如何獲取用戶的相關信息,這個信息指的是用戶微信上設置的性別,省份,國家,語言,所屬組等等的相關信息,同樣,微信提供了獲取用戶信息的接口,參照上述解決方法就可以獲取到用戶的相關的信息

以下是獲取到的用戶表

  

通過第一列的選擇之后,在選擇要分的組,點擊移動就可以將用戶移動到想要的組里面,下圖是移動后的展示




所屬組編號發(fā)生了變化


源代碼展示

<form action="move.php" method="post">

          <table border="1px">

               <th>選擇移動</th>

               <th>昵稱</th>

               <th>性別</th>

               <th>語言</th>

               <th>所在城市</th>

               <th>省份</th>

               <th>國家</th>

               <th>頭像</th>

               <th>加入時間</th>

               <th>備注名</th>

               <th>所屬組</th>

               <th rowspan="10">

                     <?php 

                        

   echo " <select name=\"group\">";

$count=count($resultG);

foreach($resultG as $key)//遍歷包裝好的json數據,已經轉成了多維數組

{

echo "<option value=\"$key[id]\" >$key[name] </option>";                  $count--;  //獲取組ID

}

echo "</select>"; 

echo "<input type=\"submit\" name=\"-1\" value=\"移動\">";

?>

               </th>

              <?php 

      foreach($list['data'] as $key)

  {

     //$list['data']是已經包裝好的json數據,將原來的stdclass轉為了多維數組

    // $result=count($key);

     //var_dump($result);

   foreach($key as $value)

{

echo "<tr>";

  $info_url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$value&lang=zh_CN";

  $info=transition(json_decode(curl($info_url)));                              //var_dump($info);

  //echo "<hr>";

 //  global $userinfo;

//$userinfo=$info;

//var_dump($userinfo);

  foreach($info as $key=>$value)

  {

  

  //對表格進行相關的修飾,進行相關的判斷

   switch($key)

 //如果是id,那么做成一個復選框

case "openid":

    echo "<td align=\"center\">

<input type=\"checkbox\" value=\"$value\"name=\"openid[]\"/>

     </td>";

    case "subscribe"://忽略相關的描述,不對這個字段生成列

break;

//如果是性別,性別值1代表男,0代表女,2代表并未填寫

case "sex":

     if($value==1)

 {

echo "<td>男</td>"; }

 else if($value==0)

 {

echo "<td>女</td>";  }

else

  {

  echo "<td>暫未填寫</td>"; }

 break;

//如果是頭像鏈接,那么生成一個50*50像素的圖片

case "headimgurl";

echo "<td>

     <img src=\"$value\" height=\"50px\" width=\"\50px\">

      </td>";

break;

//以下是默認列

case "nickname":

case "language":

case "city":

case "province":

case "country":

case "subscribe_time":

echo "<td>$value</td>";

break;

//如果remark的值為空,那么備注名是空值

case "remark":

 if(empty($value))

 {

  echo "<td>暫無</td>";

 }

else

{

echo "<td>$value</td>";

}

break;

case "groupid":

     echo"<td>$value</td>";

 break;

}

  }

echo "</tr>";

}

  }

  

 ?>

          </table>

        </form>

       </div>

       <hr / color=\"#9900CCd\">

     

        

   </div>

</body>

move.php的代碼 

  <?php  

    //此程序用于移動分組

 $member=array();

$member=$_POST['openid'];//獲取選中的openid

$groupid=$_POST['group'];//獲取組id

require "func.php";

$move_url="https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token=$access_token";

 

   for($i=0;$i<count($member);$i++)

{

 $poststr="{\"openid\":\"$member[$i]\",\"to_groupid\":$groupid}";

  $result=curl($move_url,$poststr);

}

$result=(array)json_decode($result);

if($result['errmsg']=='ok')

{

echo "

  <script type=\"text/javascript\">window.alert('移動成功')</script>

  <script type=\"text/javascript\">

   setTimeout(\"window.location.href='getgroup.php'\",5000);

  </script>

  

";

}

  

?>


   

   


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI