wxapp.php
本文整理于网络,仅供阅读参考,如有不妥之处,敬请批评指正!如果您想加入微擎社区版技术大牛微信群和QQ群,请联系微信: ccccyyyy4444 或者 QQ:155120699
功能介绍
wxapp.php 是定义小程序获取数据或是操作数据的接口文件。小程序中一切与后端交流的数据都是通过API来实现。
规范及约定
- Rcdonkey_signup为模块标识,类名的定义遵循“模块标识ModuleWxapp”规则
- 此类必须继承 WeModuleWxapp 类
- 所有对外(小程序)公布的接口函数,必须是以 doPage 开头
这个文件就是小程序的后端文件。其结构大概如下:
<?php
/**
* 接龙报名模块小程序接口定义
*
* @author 米粥
* @url
*/
defined('IN_IA') or exit('Access Denied');
class Rcdonkey_signupModuleWxapp extends WeModuleWxapp {
private function checkLogin() {
global $_W;
if (empty($_W['fans'])) {
return error(1, '请先登录');
}
return true;
}
/**
* 添加活动
*/
public function doPagePostActivity() {
//新增一个活动
global $_W, $_GPC;
$id = intval($_GPC['id']);
$login_success = $this->checkLogin();
if (is_error($login_success)) {
return $this->result($login_success['errno'], $login_success['message']);
}
if (empty($_GPC['title']) || empty($_GPC['description']) || empty($_GPC['joindeadline'])) {
return $this->result(2, '请填写完整活动内容');
}
$join_deadline = strtotime($_GPC['joindeadline']);
if (empty($join_deadline)) {
$join_deadline = strtotime("+7 day");
}
$require = explode(',', $_GPC['require']);
if (in_array('mobile', $require)) {
$require_mobile = 1;
}
if (in_array('realname', $require)) {
$require_realname = 1;
}
$data = array(
'title' => trim($_GPC['title']),
'description' => trim($_GPC['description']),
'join_deadline' => $join_deadline,
'join_total' => 0,
'organizer_openid' => $_W['fans']['openid'],
'organizer_nickname' => $_W['fans']['nickname'],
'organizer_avatar' => $_W['fans']['avatar'],
'longitude' => $_GPC['longitude'],
'latitude' => $_GPC['latitude'],
'status' => 1,
'createtime' => TIMESTAMP,
'require_realname' => $require_realname,
'require_mobile' => $require_mobile,
'fee' => floatval($_GPC['fee']),
);
if (empty($id)) {
if (pdo_insert('rcdonkey_activity', $data)) {
$id = pdo_insertid();
$code = $this->makeActivityCode($id);
if (!is_error($code)) {
pdo_update('rcdonkey_activity', array('code' => $code), array('id' => $id));
}
return $this->result(0, '发布成功', array('id' => $id));
}
} else {
$activity = $this->getActivity($id);
if ($_W['openid'] != $activity['organizer_openid']) {
return $this->result(2, '您没有权限修改该活动');
}
$data = array(
'title' => trim($_GPC['title']),
'description' => trim($_GPC['description']),
'join_deadline' => $join_deadline,
);
pdo_update('rcdonkey_activity', $data, array('id' => $id));
return $this->result(0, '修改成功', array('id' => $id));
}
return $this->result(3, '发布失败,请重试');
}
public function doPageDetail() {
global $_W, $_GPC;
$id = intval($_GPC['id']);
if (empty($id)) {
$this->result(1, '活动不存在或是已经被删除');
}
$activity = $this->getActivity($id);
$join_user = pdo_get('rcdonkey_join_list', array('openid' => $_W['openid'], 'activity_id' => $id));
$activity['already_join'] = !empty($join_user) ? true : false;
$this->result(0, '', $activity);
}
private function getActivity($id) {
global $_W;
if (empty($id)) {
return array();
}
$activity = pdo_get('rcdonkey_activity', array('id' => $id));
if (empty($activity)) {
return error(1, '活动不存在或是已经被删除');
}
$activity['description'] = emoji_unicode_decode($activity['description']);
if (empty($activity['code'])) {
$code = $this->makeActivityCode($id);
if (!is_error($code)) {
pdo_update('rcdonkey_activity', array('code' => $code), array('id' => $id));
}
$activity['code'] = $code;
} else {
$activity['code'] = tomedia($activity['code']);
}
if ($activity['status'] == 3) {
$activity['join_deadline'] = TIMESTAMP - 38400;
}
$activity['join_deadline_date'] = date('Y-m-d H:i', $activity['join_deadline']);
$activity['join_list'] = pdo_getall('rcdonkey_join_list', array('activity_id' => $id), array(), 'openid', 'id DESC');
if (!empty($activity['join_list'])) {
foreach ($activity['join_list'] as $i => &$join_user) {
$join_user['join_date'] = date('Y-m-d H:i', $join_user['createtime']);
}
}
if ($_W['openid'] == $activity['organizer_openid']) {
$activity['is_manager'] = true;
}
if ($activity['join_deadline'] < TIMESTAMP) {
pdo_update('rcdonkey_activity', array('status' => 3), array('id' => $id));
$activity['status'] = 3;
}
return $activity;
}
}
结果返回
由于小程序中沟通数据是采用API的形式,所以数据都是以JSON的形式进行返回,在这里可以直接调用 $this->result() 来返回结果。函数说明如下:
result()
说明
result($errno, $message, $data = '')
以JSON的形式返回接口数据
参数
- $errno 错误代码,通常0表示没有错误,非0数值表示错误
- $message 错误信息或是成功信息
- $data 要返回的数据,可以是数组,字符串,数值等
返回值
JSON数据格式
{"errno":0,"message":"活动添加成功","data":{"title":"活动名称","id":1}}
示例
public function doPageDetail() {
global $_W, $_GPC;
$id = intval($_GPC['id']);
if (empty($id)) {
$this->result(1, '活动不存在或是已经被删除');
}
$activity = $this->getActivity($id);
$this->result(0, '获取活动详情成功', $activity);
}
小程序端如何请求
所有对外(小程序)公布的接口函数,必须是以 doPage 开头,比如下方实例中 doPagePostActivity(),表示新增一个活动,在小程序中直接使用 app.util.request() 函数来请求。代码如下,其它函数引用同理。
app.util.request({
url: 'entry/wxapp/postactivity',
data: {
m: 'rcdonkey_signup',
title : form.title,
/*省略部分代码*/
},
method : 'post',
success: function (response) {
/*省略部分代码*/
},
fail : function(response) {
if (response.data.message) {
app.util.message(response.data.message, '', 'error');
}
}
});
如果看不懂微擎社区版二次开发手册或者遇到问题,请联系微信: ccccyyyy4444 或者 QQ:155120699 ,如果我们有空闲时间,可以免费为您答疑解惑。