1:創建用戶組
微信跟QQ一樣可以創建組名,刪除組名,修改組名,查詢組名,這些操作都是一系列的接口,只需要調用相關的接口,並以curl的形式進行發送,便可以獲得相關的結果
創建分組
一個公眾帳號,最多支持創建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的形式將封包傳送過去,傳回的結果是一個StdClass形式的json數據,我們需要將stdClass進行轉換為陣列形式,所以我們創建一個func.php文件,後面的組的相關操作都基於這些函數
ede26bad2add626a19c2211f61ee56bf$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我們便可以做我們想做的任何事了
首先我們進行群組的創建,我們將檔案命名為creategroup.php
1 介面展示
看起來很簡單的HTML的程式碼,相信有HTML基礎的都能寫出
那麼如何創建群組呢?很簡單,我們只需將創建群組的API連結提交過去就可以了
相關的程式碼
b33931ffcad76ab5a6e272ab5c0c4054'; ?> ffd43448117c1013fbeeed3f564491ad 100db36a723c770d327fc0aef2ce13b1 93f0f5c25f18dab9d176bd4f6de5d30e b2386ffb911b14667cb8f0f91ea547a7无标题文档6e916e0f7d1e588d4f442bf645aedb2f 9c3bca370b5104690d9ef395f2c5f8d1 6c04bd5ca3fcae76e30b72ad730ca86d 6a7d1053252a905467ae2da05defc569 e388a4556c0f65e1904146cc1a846bee新建分组94b3e26ee717c64999d7867364b1b4a3 46595d76856168922793755f4e0edd48 ba043d2d5235e94318351a1bc38d7ce9 f5a47148e367a6035fd7a2faa965022e b1e78631ba3e818b19851d4bea9b7adfalert('执行成功,三秒之后将自动跳回主页')2cacc6d41bbb37262a98f745aa00fbf0"; //设置跳转回主页 echo "2289668670aff8cbbd03c2c8405cc451setTimeout(window.navigate(\"getgroup.php\"),3000)2cacc6d41bbb37262a98f745aa00fbf0"; } else {echo "2289668670aff8cbbd03c2c8405cc451alert('执行失败')2cacc6d41bbb37262a98f745aa00fbf0";} } create_group(); } ?> 36cc49f0c466276486e50c850b7e4956 73a6ac4ed44ffec12cee46588e518a5e
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從騰訊上取得的資料是什麼樣的上圖我們建立了一個表,第一行是一個建立新組的功能,在以下的行中,我們能夠看到組編號,組名,以及組內人數。那麼這個是如何做到的呢?很簡單,當我們已經取得到返回回來的json資料之後,我們對json進行資料包裝,把json做成陣列形式。那麼如何實現數據包裝呢?也很簡單,我們不斷的呼叫解析函數,將它最終變成數組的形式,然後遍歷這個數組就行了。 展示原始碼: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\">创建一个新组</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才能进行修改,根据我们在创建组的时候传输过来的json数据中我们可以获取到组id,所有我们可以通过创建链接的方式,当点击链接的时候,会把组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>"; }
代码中,我们对返回的数组进行遍历,如果发现key值是id,那么我们将值获取过来并且加入到链接尾部,注意get方式的写法
echo "64cf4fb7bf475c6c58de2127e728f060[$value]c82c04bec5187d5fc05c0bfa31a7aa07删除5db79b134e9f6b82c0b36e0489ee08ed6b75e4ab755d336ebe31e1a37d05c544修改5db79b134e9f6b82c0b36e0489ee08edb90dd5946f0946207856a8a37f441edf";
跳转到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(); } ?>
如果执行成功,那么会进行弹出提醒框,等待五秒后自动跳转回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函数执行成功,那么会返回一个状态值 if($result=curl($delete_url,$data)) { echo "<script type=\"text/javascript\">alert('执行成功,三秒之后将自动跳回主页')</script>"; //设置跳转回主页 echo "<script type=\"text/javascript\">setTimeout(window.history.back(-1),8000)</script>"; } else {echo "<script type=\"text/javascript\">alert('执行失败')</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","oDF3iY9FGSSRHom3B-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过去.在批量分组之前,我们还要知道一件事,如何获取用户的相关信息,这个信息指的是用户微信上设置的性别,省份,国家,语言,所属组等等的相关信息,同样,微信提供了获取用户信息的接口,参照上述解决方法就可以获取到用户的相关的信息
以下是获取到的用户表
通过第一列的选择之后,在选择要分的组,点击移动就可以将用户移动到想要的组里面,下图是移动后的展示
所属组编号发生了变化
源代码展示
<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> "; } ?>
以上是微信開發用戶群的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!