微信开发之用户组

2016年06月18日 (图片无法上传,只能通过上传附件)

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‘];//获取组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>

";

}

?>

时间: 2024-11-02 17:46:01

微信开发之用户组的相关文章

【微信开发】网页授权多域名解决方案

在做微信开发的时候,会遇到这样的场景:一个公众号,会有多个业务:官网.论坛.商城等等 网页授权是只能一个域名,那么问题来了?这怎么搞? 答案就是: 做一个中转服务! 域名1: www.test.com 域名2: bbs.test.com 这时候,再解析一个二级域名:code.test.com 作为中转授权域名 并在微信公众平台后台网页授权域名地方填写这个 中转域名 www.test.com   授权代码改为: header("location:http://code.test.com/code.

Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)

注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先设置一下授权回调域.这里瞬间想到之前做JSSDK的时候,也设置过一个域名.二者本质上都是设置可信域名. 当用户授权完毕之后,请求将重定向到此域名(或者子域名)下的执行者(jsp页面或者servlet等).如何设置授权回调域,请见第二节. 1.2 获取Code https://open.weixin.

夺命雷公狗---微信开发23----客服消息接口基础和推送文本

我们这边课程里面一共用到了三个文件,分别是WeChat.class.php和common.php以及index.php 我们在写这个功能之前也要学会查手册,手册我们可以在微信开发这里找到,如下所示: 点击进去后我们将会看到客服接口,我们可以点击下进去看看里面有什么动动 这里有一个发送文本消息的,我们点击进去看下 这里很明显就看到文本消息是通过一个json数据来进行实现的,废话不多说,开工 这里我们先来写一个WeChat.php的文件,这里作用主要适用于封装一个CURL上传类的,代码如下所示: <

微信开发学习总结(一)—微信开发环境搭建

目前移动App开发领域主要分为以下几种类型: 一.微信开发环境搭建 1.要有一个用来测试的公众号. 2.用来调式代码的开发环境 1.1.注册测试公众号 微信公众号分为服务号.订阅号.企业号,订阅号可以个人申请,服务号和企业号要有企业资质才可以. 我们所说的微信公众号开发指的是订阅号和服务号. 关于订阅号和服务号的区别,官方是这样解释的 服务号:主要偏向于服务交互(功能类似12315,114,银行,提供绑定信息,服务交互),每月可群发4条消息:服务号适用人群:媒体.企业.政府或其他组织. 订阅号:

微信开发之如何使用开发工具--weixin-java-tools

一.前沿 微信公众平台由于没有提供针对语言的开发包,只公布了一个基于Http协议的接口和加解密的算法sdk,这样给微信公众号的开发者带来很多工作量,除了实现业务逻辑外,还需要自己处理底层的接口协议细节,因此选择一个良好的sdk能够节省这样的工作量,而目前已经有不少的开源sdk可供使用,java语言的微信公众号sdk也有不少,那么作为java开发者我们应该如何选择呢?我将带着各位对java开源的一些微信公众号的sdk进行各方面的对比分析,为读者选择适合自己的sdk包提供一些帮助. 二.为什么要用w

Java企业微信开发_03_通讯录同步

一.本节要点 1.获取通讯录密钥 获取方式: 登录企业微信—>管理工具—>通讯录同步助手—>开启“API接口同步”  ; 开启后,即可看到通讯录密钥,也可设置通讯录API的权限:读取或者编辑通讯录. 获取通讯录密钥的目的: 通过企业ID(CorpId)和 通讯录密钥可以获取通讯录相关接口的使用凭证(AccessToken).有了AccessToken,就可以使用通讯录相关接口了. 凭证的获取方式有两种(此处暂时存疑,以待勘误): 通讯录AccessToken:CorpId+通讯录密钥 其

微信开发束缚了你的思想

最近通过在新浪云上建立了自己的应用,进行了微信的开发.渐渐对微信开发由开始的好奇变成了一种轻视的态度(当然此处不乏装逼的嫌疑.)下面谈谈自己对微信开发的一点理解,希望对即将进行微信开发的人员有一点帮助. 微信开发的关键就是有一个可以线上调试的域名.空间.之前,在网上搜索各种免费的域名.空间啊,然后就是各种注册,最后还是没得到.有的获得了域名.空间,但是速度那是相当的慢啊.恰巧公司同事有在做微信开发的,下班的时候就询问了一下,如何获得域名.空间啊.然后就知道了新浪云,可以以较少的费用获取新浪云,当

微信开发系列----01.开发者的资格

利用第三方的SDK[Senparc.Weixin.MP]来开发属于自己的微信公众号. 此项目的GitHub地址:https://github.com/Andyahui/xgyxsh_WeiXin 这个系列是自己做的一个dome,主要想通过这个练习理清微信开发的基本流程和网站开发的思路,学会在项目实战中学习知识,使自己朝大牛的路上更近一步. 废话不多说--进入主题. 一:开发工具大礼包 微信公众平台开发者API: 微信公众号平台接口调试工具: Senparc.Weixin.MP的github地址:

微信开发学习笔记之五(CI框架 常用封装)

<?php /** * 微信开发 大体框架及 常用函数 */ class yougame extends CI_controller{ $this->_debug = true; /*这个部分开启 则使用常量 代替所有ajax的提交 便于在浏览器端打开*/ $this->_debug_openid = '' ; //测试账号的openid $this->_appid = '' ; //你的appid $this->_sercet = ''; //你的sercet $this-