成都网站建设设计

将想法与焦点和您一起共享

微信开发之用户组

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文件,后面的组的相关操作都基于这些函数

       //设定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链接提交过去就可以了

相关的代码

   '; 

?>

无标题文档

     

         

新建分组

         

         

         

     

     

    //如果提交成功,那么进行组的创建

        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 "";

//设置跳转回主页

 echo "";

}

else

{echo "";}

}

create_group();

 }

 

 ?>

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

 

     

   

      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 "

";

    echo "

";

echo "

";

for($i=0;$i

     

{

 echo "

";

 

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

  { 

    

 if($key=='id')

 {

 

 echo "

";

 }

 else 

 {

       echo "

";

 }

  

}

echo "

";

}

echo "

创建一个新组
编号组名人数
[$value]删除修改 $value
";

?>

     

     


 

       

         


  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

     

{

 echo "";

 

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

  { 

    

 if($key=='id')

 {

 

 echo "[$value]删除修改";

 }

 else 

 {

       echo " $value";

 }

  

}

echo "";

}

代码中,我们对返回的数组进行遍历,如果发现key值是id,那么我们将值获取过来并且加入到链接尾部,注意get方式的写法

      echo "[$value]删除修改";

跳转到modify.php页面后,我们进行相关的处理,在该页面上,我们仍然有一个HTML输入框

代码如下:

   

     

更新组名

     

     

     

 

    //此程序用于修改标签组

 

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 "";

//进行页面跳转

echo "";

 }

else

{

echo "";

}

 

}

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页面并进行相关的删除操作即可

 代码显示:

   

    //该段程序用来删除组标签,成功之后会给予提示,并且跳转回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 "";

//设置跳转回主页

 echo "";

}

else

{echo "";}

}

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过去.在批量分组之前,我们还要知道一件事,如何获取用户的相关信息,这个信息指的是用户微信上设置的性别,省份,国家,语言,所属组等等的相关信息,同样,微信提供了获取用户信息的接口,参照上述解决方法就可以获取到用户的相关的信息

以下是获取到的用户表

  

通过第一列的选择之后,在选择要分的组,点击移动就可以将用户移动到想要的组里面,下图是移动后的展示

所属组编号发生了变化

源代码展示

         

               

               

               

               

               

               

               

               

               

               

               

               

             

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

  {

     //$list['data']是已经包装好的json数据,将原来的stdclass转为了多维数组

    // $result=count($key);

     //var_dump($result);

   foreach($key as $value)

{

echo "

";

  $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 "


";

 //  global $userinfo;

//$userinfo=$info;

//var_dump($userinfo);

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

  {

  

  //对表格进行相关的修饰,进行相关的判断

   switch($key)

 //如果是id,那么做成一个复选框

case "openid":

    echo "

";

    case "subscribe"://忽略相关的描述,不对这个字段生成列

break;

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

case "sex":

     if($value==1)

 {

echo "

"; }

 else if($value==0)

 {

echo "

";  }

else

  {

  echo "

"; }

 break;

//如果是头像链接,那么生成一个50*50像素的图片

case "headimgurl";

echo "

";

break;

//以下是默认列

case "nickname":

case "language":

case "city":

case "province":

case "country":

case "subscribe_time":

echo "

";

break;

//如果remark的值为空,那么备注名是空值

case "remark":

 if(empty($value))

 {

  echo "

";

 }

else

{

echo "

";

}

break;

case "groupid":

     echo"

";

 break;

}

  }

echo "

";

}

  }

  

 ?>

         

选择移动昵称性别语言所在城市省份国家头像加入时间备注名所属组

                     

                        

   echo " "; 

echo "";

?>

               

     

暂未填写

     

     

$value暂无$value$value

       

       

       


     

        

   

move.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

{

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

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

}

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

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

{

echo "

 

 

  

";

}

  

?>

   

   


文章标题:微信开发之用户组
转载来源:http://chengdu.cdxwcx.cn/article/ggdecp.html