
发表日期: 2021-04-26 15:39:32 浏览次数:85
如东网站制作【如东网站优化】如东建网站、如东微信公众号运营、如东网页设计、如东微信小程序商城
如东县,江苏省南通市下辖县 [1] ,位于江苏省东南部、长江三角洲北翼。县境南与通州区为邻,西与如皋市接壤,西北与海安市毗连,东面和北面濒临黄海。截至2020年末,全县下辖3个街道、12个乡镇 [2] ,陆域面积1872平方千米,海域面积4758平方千米 [3] ,常住人口97.71万人,实现地区生产总值1053.42亿元 [4] 。
如东是江海盐垦文化的代表。秦汉以前县境为长江口沙洲,故称扶海洲。长江、黄淮冲积成陆后,如东盐业兴起,亭场林立,至明清繁盛一时。民国之后,沿海逐步废灶兴垦,现代农渔业得到发展。 [5] 1988年对外开放后,如东沿海进一步开发,建成南黄海优良深水港口洋口港。 [6]
2019年7月,被列为国家知识产权强县工程示范县(区) [7] 。2019年10月8日,被评为2019年度全国综合实力百强县市、2019年度全国投资潜力百强县市、2019年度全国绿色发展百强县市、2019全国营商环境百强县 [8-9] 。2020年7月29日,入选2019年重新确认国家卫生乡镇(县城)名单。 [10] 2020年12月,社科院百强县榜单中如东排名第45 [11] 。
当客户端需要调用接口服务时,可以将PhalApi封装的SDK提供给客户端开发工程师。目前客户端SDK包已支持的开发语言有:
JAVA
Objective-C
PHP
C#
Javascript
Go
Ruby
Python
客户端也可以根据自己的实际情况,封装专属的接口服务请求类。
在与客户端联调的过程中,往往会发现一些有趣的问题。例如字符编码问题,返回字段的类型问题,部分接口服务的签名验证等。简而言之,实践出真知。
WeTime项目的一个特色是它的管理后台的全部数据,也是通过接口服务来获取或操作的。这与以往的管理后台的实现方式不一样,传统方式是管理后台直接操作数据库,但对于存在多个客户端的架构中,直接操作数据库不能保证业务规则的一致性。因此,尽早考虑打造项目的接口中间层,统一业务规则,业务项目可以从中获益。
提供给管理后台的接口服务,与提供给移动App的接口服务没有明显的差异,但存在微妙的区别。首先,是访问接口服务模块的划分。因为在管理后台往往需要一些更高级别、能操纵核心业务数据的功能,因此把管理后台的接口服务与移动App业务的接口服务划分在不同的模块,有助于保护接口服务的受限访问。另外,管理后台通常是提供给内部人员使用的,是针对内部的客户端,而移动App是提供给最终用户使用的,即针对市场的客户端。对于这些内部的操作流程,很多时候都需要对每次操作进行详细的纪录,以便进行业务上的复核与审计。即相比于提供给最终用户的接口服务,提供给内部人员的接口服务,在实现时更需要加强权限管理,操作纪录。
WeTime的管理后台,是基于Yii框架开发的,前端则使用了Bootsrap和jQuery进行页面布局和交互。下面是在管理后台最终查看订阅号的运行效果局部截图。

图5-10 管理后台查看订阅号页面
对于此管理后台,可以使用PhalApi提供的PHP版SDK包,也可以自行封装对接口服务的请求。假设已封装在PhalApiClient类,在实现类似图5-10的展示类功能时,与以往实现方式不同的是,现在需要通过PhalApiClient类从远程的接口服务获取用户的信息,而不再是直接数据库中获取。其实现的代码片段是:
public function actionUserManagerShow()
{
$this->pageCurPosition['订阅号管理'] = '?r=DailyOperations/userManager';
$this->pageCurPosition[] = '订阅号查看';
// 更多页面设置 ... ...
$userId = isset($_REQUEST['userId']) ? intval($_REQUEST['userId']) : 0;
if ($userId <= 0) {
$this->redirect('?r=DailyOperations/userManager');
return;
}
$tip = '<br/>';
$status = null;
$dataProvider = null;
$totalUserCount = 0;
$userInfo = array();
$model = new UserForm();
$model->userId = $userId;
$apiClient = new PhalApiClient();
$apiClient->request('User.Info', array('otherUserId' => $userId));
$tip .= $apiClient->getMsg();
$status = $apiClient->getRet();
if ($apiClient->getRet() == PhalApiClient::STATUS_OK) {
$data = $apiClient->getData();
$userInfo = $data['user'];
$model->attributes = $userInfo;
$model->userId = $userId;
// 更多对返回字段的处理 ... ...
}
// 页面渲染
if (empty($userInfo)) {
$this->render('confirm',
array(
'title' => '用户不存在或者已被删除',
'msg' => $apiClient->getMsg(),
'jumpUrl' => '?r=DailyOperations/userManager',
'backUrl' => '?r=DailyOperations/userManager')
);
return;
}
$this->render('userManagerShow', array('tip' => $tip, 'status' => $status, 'model' => $model, 'userInfo' => $userInfo));
}复制代码上面这段代码有点长,但不难理解。先是对页面左侧菜单、页面标题的页面设置,接着是准备和初始化页面数据,以便请求远程接口服务User.Info获取指定用户的信息。随后是对接口返回的结果进行处理,以及对页面的渲染处理。
对应的模板页面的代码为:
<h3>基本信息</h3><table class="table table-hover"> <thead> <tr> <th width="140px">用户ID</th> <th><?php echo $model->userId; ?></th> </tr> </thead> <tbody> <tr width="140px"> <td>头像</td> <td><img id="show_UserForm_file" class="img-thumbnail" src="<?php echo !empty($model->avatar) ? $model->avatar : '/images/WeTim_Logo_128.png'; ?>" style="width:100px;"></td> </tr> <tr> <td>用户名/登录账号</td> <td><?php echo $model->username; ?></td> </tr> <tr> <td>昵称</td> <td><?php echo $model->nickname; ?></td> </tr> <tr> <td>用户类型</td> <td><?php echo $model->userType == 1 ? '<font color="red">自媒体</font>' : '<font color="blue">普通用户</font>'; ?></td> </tr> <tr> <td>来源的头像Url</td> <td><?php echo $model->comePic; ?></td> </tr> <tr> <td>来源的Url</td> <td><a href="<?php echo $model->comeUrl; ?>" target="_blank"><?php echo $model->comeUrl; ?></a></td> </tr> <tr> <td>来源的名称</td> <td><?php echo $model->comeName; ?></td> </tr> <tr> <td>粉丝数量</td> <td><?php echo $model->fans; ?></td> </tr> </tbody></table>复制代码
又如我们熟悉的日历事件发布,在管理后台最终发布日历事件的运行效果局部截图,请见5-7。

图5-11 管理后台发布日历事件页面
可以看到,这里也同样有图片上传功能,也需要进行事件发布,因此可以很好地重用已有的接口服务,而不再需要在管理后台系统重复实现。对于此日历事件发布,在管理后台对应的实现代码片段是:
public function actionEventAdd()
{
$this->pageCurPosition[] = '事件添加';
$this->setPageTitle($this->headerTitle . ' - ' . Yii::app()->name);
$this->pageLeftBarPos = 12;
$tip = '';
$status = null;
$model = new EventForm();
$model->time = date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']);
if (isset($_POST['EventForm'])) {
$model->attributes = $_POST['EventForm'];
if($model->validate()){
$tip .= '<br/>';
$model->pics = isset($_POST['pics']) && is_array($_POST['pics']) ? $_POST['pics'] : array();
// 调用接口服务发布日历事件
$apiClient = PhalApiClient::getInstance();
$apiClient->request('Event.Post', $model->toArray());
if ($apiClient->getRet() == PhalApiClient::STATUS_OK) {
$apiData = $apiClient->getData();
if ($apiData['code'] == 0) {
$tip .= sprintf('已经为用户:<strong>%s</strong>,成功添加事件:<strong>%s</strong>', $model->userId, $model->title);
$status = PhalApiClient::STATUS_OK;
} else {
$tip .= sprintf('<font color="red">添加失败,code = %s </font>', $apiData['code']);
$status = PhalApiClient::STATUS_WRONG;
}
} else {
$tip .= sprintf('<font color="red">添加失败,错误信息:%s </font>', $apiClient->getMsg());
$status = PhalApiClient::STATUS_ERROR;
}
}
}
$this->render('eventAdd', array('tip' => $tip, 'status' => $status, 'model' => $model));
}
服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878