微信开发之用户组的介绍
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文件,后面的组的相关操作都基于这些函数 <?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);//执行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我们便可以做我们想做的任何事了 首先我们进行组的创建,我们将文件命名为creategroup.php 1 界面展示 看起来很简单的HTML的代码,相信有HTML基础的都能写出 那么如何创建组呢?很简单,我们只需将创建组的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 //如果提交成功,那么进行组的创建 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('执行成功,三秒之后将自动跳回主页')</script>"; //设置跳转回主页 echo "<script type=/"text/javascript/">setTimeout(window.navigate(/"getgroup.php/"),3000)</script>"; } else {echo "<script type=/"text/javascript/">alert('执行失败')</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从腾讯上获取的数据是什么样的 上图我们创建了一个表,第一行是一个创建新组的功能,在以下的行中,我们能够看到组编号,组名,以及组内人数。那么这个是如何做到的呢?很简单,当我们已经获取到返回回来的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 "<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();}?> 如果执行成功,那么会进行弹出提醒框,等待五秒后自动跳转回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'];//获取组idrequire "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中文网其它相关文章! |
- 上一篇:详解微信个性化菜单开发模式
- 下一篇:详解微信JS