前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >微擎框架模块开发7-根据通讯录发送消息

微擎框架模块开发7-根据通讯录发送消息

原创
作者头像
快乐的小白
修改2025-01-10 17:34:39
修改2025-01-10 17:34:39
690
举报
文章被收录于专栏:微擎微擎

之前的文章可以进入专栏进行查看和学习,后面的文章就不再一一的去粘贴上一篇文章链接了,新的小伙伴直接去专栏就行,如果感兴趣的可以尝试订阅一下专栏,当然也欢迎大神加入专栏来分享。

https://cloud.tencent.com/developer/column/102120

这篇文章是在补前天的文章的后续,因为时间原因所以放在今天了。

一,通讯录发送消息开发

1.根据上次的部门接口获取到的数据,然后创建一个部门表,用于存储部门数据。

代码语言:txt
复制
CREATE TABLE `ims_test_qywx_departments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `weid` int(11) NOT NULL,
  `department_id` int(11) NOT NULL,
  `parentid` int(11) NOT NULL,
  `order` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE KEY `department_id` (`department_id`) -- Ensure department_id is unique
) ENGINE=InnoDB AUTO_INCREMENT=3672 DEFAULT CHARSET=utf8;

2.再根据获取部门成员接口,创建成员表。

代码语言:txt
复制
CREATE TABLE `ims_test_qywx_department_members` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `weid` int(11) NOT NULL,
  `userid` varchar(255) NOT NULL UNIQUE,
  `name` varchar(255) DEFAULT NULL,
  `department_id` int(11) NOT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  FOREIGN KEY (`department_id`) REFERENCES `ims_test_qywx_departments`(`department_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

3.执行完上面的两个sql和升级应用后,就可以开始创建后台和处理代码了。

3.1 执行上面两个sql到数据库。

3.2 编辑 增加一个菜单,然后修改一下版本,去后台点击升级应用。

代码语言:txt
复制
<entry title="通讯录" do="contact_list"  direct="false"/>

4.首先创建部门的的后台页面,contact_list.html。

代码语言:txt
复制
{template 'common/header'}
<ul class="nav nav-tabs">
    <li {if $operation=='display' } class="active" {/if}> <a
        href="{php echo $this->createWebUrl('contact_list', array('op' => 'display'))}">部门列表</a>
    </li>
</ul>
{if $operation == 'display'}
<div class="main">
    <form action="" method="post" class="form-horizontal form" id="form">
        <div class="panel panel-default">
            <div class="panel-heading">
                部门列表
            </div>
            <div class="panel-body">
                <div class="table-responsive panel-body">
                    <table class="table table-hover" style="min-width: 300px;">
                        <tbody>
                        {loop $list $key $item}
                        <tr>
                            <td class="text-left">
                                {$item['department_id']}
                            </td>
                            <td class="text-left">
                                {$item['name']}
                            </td>
                            <td class="text-left">
                                <a class="btn btn-primary" href="{php echo $this->createWebUrl('contact_list', array('op' => 'get_department_members', 'department_id' => $item['department_id']))}">获取部门成员</a>
                            </td>
                        </tr>
                        {/loop}
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </form>
</div>
{/if}
{template 'common/footer'}

5.然后根据表的内容,写一下部门列表的后端处理,写完后就如下图所示了,还是在site.php里写一个方法。

代码语言:txt
复制
    public function doWebContact_list() {
        global $_W, $_GPC;
        $weid = $_W['uniacid'];
        $operation = !empty($_GPC['op']) ? $_GPC['op'] : 'display';
        if ($operation == 'display') {
            $pageindex = max(1, intval($_GPC['page']));
            $pagesize = 15;
            $list = pdo_getslice('test_qywx_departments', array(), array($pageindex, $pagesize), $total, array(), 'id', 'id desc');
            $pager = pagination($total, $pageindex, $pagesize);
        }
        include $this->template('contact_list');
    }

6.再就是根据之前的部门获取接口写法,在后台页面上写一个按钮用来获取部门数据

代码语言:txt
复制
<a href="{php echo $this->createWebUrl('contact_list', array('op' => ''contact_list_update''))}" class="btn btn-primary">更新部门数据</a>

7.同样后端也需要处理,在contact_list方法增加一个获取部门数据的方法。

代码语言:txt
复制
 elseif ($operation == 'contact_list_update') {
            global $_W, $_GPC;
            $config = [
                'corp_id' => '1',
                'agent_id' => 1,
                'secret'   => '1',
            ];
            $contacts = Factory::work($config);
            $departments = $contacts->department->list();
            $departments = $departments['department'];
            foreach ($departments as $department) {
                $data = array('weid' => $_W['uniacid'], 'name' => $department['name'], 'parentid' => $department['parentid'], 'order' => $department['order'],'department_id'=> $department['id']);
                pdo_insert('test_qywx_departments', $data);
            }
            message('更新成功!', $this->createWebUrl('contact_list', array('op' => 'display')),'success');
        }

8.完成了后,就可以在前端点击“更新部门数据”这个按钮,就可以拉取企业那边的部门了。

9.拉取成功后,就可以看到部门的id和部门名称了。

10. 然后再继续写一个获取部门成员的方法,用来拉取部门成员的数据。

代码语言:txt
复制
 elseif ($operation == 'get_department_members') {
            global $_W, $_GPC;
            $department_id = $_GPC['department_id'];
            $config = [
                'corp_id' => '1',
                'agent_id' => 2,
                'secret'   => '3',
            ];
            $contacts = Factory::work($config);
            $departments = $contacts->department->list();
            $all_users = $contacts->user->getDepartmentUsers($department_id);
            $all_users = $all_users['userlist'];
            foreach ($all_users as $user) {
                $data = array('weid' => $_W['uniacid'], 'department_id' => $department_id, 'userid' => $user['userid'], 'name' => $user['name']);
                pdo_insert('test_qywx_department_members', $data);
            }
            message('更新成功!', $this->createWebUrl('contact_list', array('op' => 'display')),'success');
        }

11.后台页面需要增加一个按钮,用来获取部门的成员。

代码语言:txt
复制
<td class="text-left">
    <a class="btn btn-primary" href="{php echo $this->createWebUrl('contact_list', array('op' => 'get_department_members', 'department_id' => $item['department_id']))}">获取部门成员</a>
</td>

12.刷新一下后台页面就可以看到每个部门后面就多了一个按钮了。

13.先别点击获取,我们给部门成员做一个页面后,再来获取,继续在contact_list.html进行编辑,增加一个部门成员的列表。

代码语言:txt
复制
    <li {if $operation=='department_members' } class="active" {/if}> <a
        href="{php echo $this->createWebUrl('contact_list', array('op' => 'department_members'))}">部门成员</a>
    </li>
    
    <div class="main">
    <form action="" method="post" class="form-horizontal form" id="form">
        <div class="panel panel-default">
            <div class="panel-heading">
                部门成员列表
            </div>
            <div class="panel-body">
                <div class="table-responsive panel-body">
                    <table class="table table-hover" style="min-width: 300px;">
                        <tbody>
                        {loop $list $key $item}
                        <tr>
                            <td class="text-left">
                                {$item['userid']}
                            </td>
                            <td class="text-left">
                                {$item['name']}
                            </td>
 
                        </tr>
                        {/loop}
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </form>
</div>

14.创建后,就可以点去部门列表的获取部门成员的按钮了,更新后就会在部门成员这里有显示。

15.成功的获取到部门和成员后,我们就可以在部门成员这里增加一个按钮了,用于消息发送。

代码语言:txt
复制
 <td class="text-left">
       <a class="btn btn-primary" href="{php echo $this->createWebUrl('contact_list', array('op' => 'send_notification_announcement', 'userid' => $item['userid']))}">发送通知</a>
  </td>

16.再创建一个消息编辑的页面和发送消息的后端处理代码。

代码语言:txt
复制
<div class="main">
    <form action="" method="post" class="form-horizontal form" enctype="multipart/form-data" id="form1">
        <div class="panel panel-default">
            <div class="panel-heading">发送通知公告</div>
            <div class="panel-body">
                <div class="form-group">
                    <label class="col-sm-2 control-label">内容</label>
                    <div class="col-sm-10">
                        <input type="text" name="content" class="form-control" value="">
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-2 control-label">用户ID</label>
                    <div class="col-sm-10">
                        <input type="text" name="userid" class="form-control" value="{$_GPC['userid']}" readonly>
                    </div>
                </div>
            </div>
        </div>
        <div class="form-group col-sm-12">
            <input type="submit" name="submit" value="提交" class="btn btn-primary col-lg-1" />
            <input type="hidden" name="token" value="{$_W['token']}" />
        </div>
    </form>
</div>
代码语言:txt
复制
            if (checksubmit('submit')) {
                $userid = $_GPC['userid'];
                $content = $_GPC['content'];
                $config = [
                    'corp_id' => '1',
                    'agent_id' => 1,
                    'secret'   => '1',
                ];
                    $app = Factory::work($config);
                    $messenger = $app->messenger;
                    $result = $messenger->toUser($userid)->send($content);
                if ($result['errcode'] == 0) {
                    message('发送成功!', $this->createWebUrl('contact_list', array('op' => 'department_members')), 'success');
                } else {
                    message('发送失败!', $this->createWebUrl('contact_list', array('op' => 'department_members')), 'error');
                }
            }

17.整个做完后,就可以点击按钮发送消息。

18.整个的通讯录加发送消息的开发就完成了,最后整体粘贴一下今天写到的代码。

代码语言:txt
复制
public function doWebContact_list() {
        global $_W, $_GPC;
        $weid = $_W['uniacid'];
        $operation = !empty($_GPC['op']) ? $_GPC['op'] : 'display';
        if ($operation == 'display') {
            $pageindex = max(1, intval($_GPC['page']));
            $pagesize = 15;
            $list = pdo_getslice('test_qywx_departments', array(), array($pageindex, $pagesize), $total, array(), 'id', 'id desc');
            $pager = pagination($total, $pageindex, $pagesize);
        } elseif ($operation == 'contact_list_update') {
            $config = [
                'corp_id' => '1',
                'agent_id' => 1,
                'secret'   => '1',
            ];
            $contacts = Factory::work($config);
            $departments = $contacts->department->list();
            $departments = $departments['department'];
            foreach ($departments as $department) {
                $data = array('weid' => $_W['uniacid'], 'name' => $department['name'], 'parentid' => $department['parentid'], 'order' => $department['order'],'department_id'=> $department['id']);
                pdo_insert('test_qywx_departments', $data);
            }
            message('更新成功!', $this->createWebUrl('contact_list', array('op' => 'display')),'success');
        } elseif ($operation == 'department_members') {
            $pageindex = max(1, intval($_GPC['page']));
            $pagesize = 15;
            $list = pdo_getslice('test_qywx_department_members', array(), array($pageindex, $pagesize), $total, array(), 'id', 'id desc');
            $pager = pagination($total, $pageindex, $pagesize);
        } elseif ($operation == 'get_department_members') {
            global $_W, $_GPC;
            $department_id = $_GPC['department_id'];
            $config = [
                'corp_id' => '1',
                'agent_id' => 1,
                'secret'   => '1',
            ];
            $contacts = Factory::work($config);
            $departments = $contacts->department->list();
            $all_users = $contacts->user->getDepartmentUsers($department_id);
            $all_users = $all_users['userlist'];
            foreach ($all_users as $user) {
                $data = array('weid' => $_W['uniacid'], 'department_id' => $department_id, 'userid' => $user['userid'], 'name' => $user['name']);
                pdo_insert('test_qywx_department_members', $data);
            }
            message('更新成功!', $this->createWebUrl('contact_list', array('op' => 'display')),'success');
        } elseif ($operation == 'send_notification_announcement') {
            if (checksubmit('submit')) {
                $userid = $_GPC['userid'];
                $content = $_GPC['content'];
                $config = [
                'corp_id' => '1',
                'agent_id' => 1,
                'secret'   => '1',
                ];
                    $app = Factory::work($config);
                    $messenger = $app->messenger;
                    $result = $messenger->toUser($userid)->send($content);
                if ($result['errcode'] == 0) {
                    message('发送成功!', $this->createWebUrl('contact_list', array('op' => 'department_members')), 'success');
                } else {
                    message('发送失败!', $this->createWebUrl('contact_list', array('op' => 'department_members')), 'error');
                }
            }
        }
        include $this->template('contact_list');
    }
代码语言:txt
复制
{template 'common/header'}
<ul class="nav nav-tabs">
    <li {if $operation=='display' } class="active" {/if}> <a
        href="{php echo $this->createWebUrl('contact_list', array('op' => 'display'))}">部门列表</a>
    </li>
    <li {if $operation=='department_members' } class="active" {/if}> <a
        href="{php echo $this->createWebUrl('contact_list', array('op' => 'department_members'))}">部门成员</a>
    </li>
</ul>
{if $operation == 'display'}
<div class="main">
    <form action="" method="post" class="form-horizontal form" id="form">
        <div class="panel panel-default">
            <div class="panel-heading">
                部门列表
                <a href="{php echo $this->createWebUrl('contact_list', array('op' => 'contact_list_update'))}" class="btn btn-primary">更新部门数据</a>
            </div>
            <div class="panel-body">
                <div class="table-responsive panel-body">
                    <table class="table table-hover" style="min-width: 300px;">
                        <tbody>
                        {loop $list $key $item}
                        <tr>
                            <td class="text-left">
                                {$item['department_id']}
                            </td>
                            <td class="text-left">
                                {$item['name']}
                            </td>
<!--                            获取部门成员-->
                            <td class="text-left">
                                <a class="btn btn-primary" href="{php echo $this->createWebUrl('contact_list', array('op' => 'get_department_members', 'department_id' => $item['department_id']))}">获取部门成员</a>
                            </td>
                        </tr>
                        {/loop}
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </form>
</div>
{elseif $operation == 'department_members'}
<div class="main">
    <form action="" method="post" class="form-horizontal form" id="form">
        <div class="panel panel-default">
            <div class="panel-heading">
                部门成员列表
            </div>
            <div class="panel-body">
                <div class="table-responsive panel-body">
                    <table class="table table-hover" style="min-width: 300px;">
                        <tbody>
                        {loop $list $key $item}
                        <tr>
                            <td class="text-left">
                                {$item['userid']}
                            </td>
                            <td class="text-left">
                                {$item['name']}
                            </td>
                            <td class="text-left">
                                <a class="btn btn-primary" href="{php echo $this->createWebUrl('contact_list', array('op' => 'send_notification_announcement', 'userid' => $item['userid']))}">发送通知</a>
                            </td>
                        </tr>
                        {/loop}
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </form>
</div>
{elseif $operation == 'send_notification_announcement'}
<div class="main">
    <form action="" method="post" class="form-horizontal form" enctype="multipart/form-data" id="form1">
        <div class="panel panel-default">
            <div class="panel-heading">发送通知公告</div>
            <div class="panel-body">
                <div class="form-group">
                    <label class="col-sm-2 control-label">内容</label>
                    <div class="col-sm-10">
                        <input type="text" name="content" class="form-control" value="">
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-sm-2 control-label">用户ID</label>
                    <div class="col-sm-10">
                        <input type="text" name="userid" class="form-control" value="{$_GPC['userid']}" readonly>
                    </div>
                </div>
            </div>
        </div>
        <div class="form-group col-sm-12">
            <input type="submit" name="submit" value="提交" class="btn btn-primary col-lg-1" />
            <input type="hidden" name="token" value="{$_W['token']}" />
        </div>
    </form>
</div>
{/if}
{template 'common/footer'}

二,结语

1.有轮子的开发并不是特别难,写多了,很多地方只需要复制粘贴,修修改改就行了。

2.感谢造轮子的前辈们。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一,通讯录发送消息开发
  • 二,结语
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档