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');
		}
	}
});
本页目录
  1. 功能介绍
  2. 规范及约定
  3. 结果返回
  4. 小程序端如何请求
文档统计
浏览次数:175759次
编辑次数:210次历史版本
最近更新:2023-01-16 16:16:34

如果看不懂微擎社区版二次开发手册或者遇到问题,请联系微信: ccccyyyy4444 或者 QQ:155120699 ,如果我们有空闲时间,可以免费为您答疑解惑。