ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### 功能介绍 **wxapp.php**是定义小程序获取数据或是操作数据的接口文件。小程序中一切与后端交流的数据都是通过API来实现。 #### 规范及约定 * Rcdonkey\_signup为模块标识,类名的定义遵循“模块标识ModuleWxapp”规则 * 此类必须继承 WeModuleWxapp 类 * 所有对外(小程序)公布的接口函数,必须是以**doPage**开头 这个文件就是小程序的后端文件。其结构大概如下: 1. `<?php` 2. `/**` 3. `* 接龙报名模块小程序接口定义` 4. `*` 5. `* @author 米粥` 6. `* @url` 7. `*/` 8. `defined('IN_IA') or exit('Access Denied');` 10. `class Rcdonkey_signupModuleWxapp extends WeModuleWxapp {` 11. `private function checkLogin() {` 12. `global $_W;` 13. `if (empty($_W['fans'])) {` 14. `return error(1, '请先登录');` 15. `}` 16. `return true;` 17. `}` 19. `/**` 20. `* 添加活动` 21. `*/` 22. `public function doPagePostActivity() {` 23. `//新增一个活动` 24. `global $_W, $_GPC;` 25. `$id = intval($_GPC['id']);` 26. `$login_success = $this->checkLogin();` 27. `if (is_error($login_success)) {` 28. `return $this->result($login_success['errno'], $login_success['message']);` 29. `}` 30. `if (empty($_GPC['title']) || empty($_GPC['description']) || empty($_GPC['joindeadline'])) {` 31. `return $this->result(2, '请填写完整活动内容');` 32. `}` 33. `$join_deadline = strtotime($_GPC['joindeadline']);` 34. `if (empty($join_deadline)) {` 35. `$join_deadline = strtotime("+7 day");` 36. `}` 37. `$require = explode(',', $_GPC['require']);` 38. `if (in_array('mobile', $require)) {` 39. `$require_mobile = 1;` 40. `}` 41. `if (in_array('realname', $require)) {` 42. `$require_realname = 1;` 43. `}` 44. `$data = array(` 45. `'title' => trim($_GPC['title']),` 46. `'description' => trim($_GPC['description']),` 47. `'join_deadline' => $join_deadline,` 48. `'join_total' => 0,` 49. `'organizer_openid' => $_W['fans']['openid'],` 50. `'organizer_nickname' => $_W['fans']['nickname'],` 51. `'organizer_avatar' => $_W['fans']['avatar'],` 52. `'longitude' => $_GPC['longitude'],` 53. `'latitude' => $_GPC['latitude'],` 54. `'status' => 1,` 55. `'createtime' => TIMESTAMP,` 56. `'require_realname' => $require_realname,` 57. `'require_mobile' => $require_mobile,` 58. `'fee' => floatval($_GPC['fee']),` 59. `);` 60. `if (empty($id)) {` 61. `if (pdo_insert('rcdonkey_activity', $data)) {` 62. `$id = pdo_insertid();` 63. `$code = $this->makeActivityCode($id);` 64. `if (!is_error($code)) {` 65. `pdo_update('rcdonkey_activity', array('code' => $code), array('id' => $id));` 66. `}` 67. `return $this->result(0, '发布成功', array('id' => $id));` 68. `}` 69. `} else {` 70. `$activity = $this->getActivity($id);` 71. `if ($_W['openid'] != $activity['organizer_openid']) {` 72. `return $this->result(2, '您没有权限修改该活动');` 73. `}` 74. `$data = array(` 75. `'title' => trim($_GPC['title']),` 76. `'description' => trim($_GPC['description']),` 77. `'join_deadline' => $join_deadline,` 78. `);` 79. `pdo_update('rcdonkey_activity', $data, array('id' => $id));` 80. `return $this->result(0, '修改成功', array('id' => $id));` 81. `}` 82. `return $this->result(3, '发布失败,请重试');` 83. `}` 85. `public function doPageDetail() {` 86. `global $_W, $_GPC;` 87. `$id = intval($_GPC['id']);` 88. `if (empty($id)) {` 89. `$this->result(1, '活动不存在或是已经被删除');` 90. `}` 91. `$activity = $this->getActivity($id);` 93. `$join_user = pdo_get('rcdonkey_join_list', array('openid' => $_W['openid'], 'activity_id' => $id));` 94. `$activity['already_join'] = !empty($join_user) ? true : false;` 95. `$this->result(0, '', $activity);` 96. `}` 98. `private function getActivity($id) {` 99. `global $_W;` 100. `if (empty($id)) {` 101. `return array();` 102. `}` 103. `$activity = pdo_get('rcdonkey_activity', array('id' => $id));` 104. `if (empty($activity)) {` 105. `return error(1, '活动不存在或是已经被删除');` 106. `}` 107. `$activity['description'] = emoji_unicode_decode($activity['description']);` 109. `if (empty($activity['code'])) {` 110. `$code = $this->makeActivityCode($id);` 111. `if (!is_error($code)) {` 112. `pdo_update('rcdonkey_activity', array('code' => $code), array('id' => $id));` 113. `}` 114. `$activity['code'] = $code;` 115. `} else {` 116. `$activity['code'] = tomedia($activity['code']);` 117. `}` 119. `if ($activity['status'] == 3) {` 120. `$activity['join_deadline'] = TIMESTAMP - 38400;` 121. `}` 122. `$activity['join_deadline_date'] = date('Y-m-d H:i', $activity['join_deadline']);` 123. `$activity['join_list'] = pdo_getall('rcdonkey_join_list', array('activity_id' => $id), array(), 'openid', 'id DESC');` 124. `if (!empty($activity['join_list'])) {` 125. `foreach ($activity['join_list'] as $i => &$join_user) {` 126. `$join_user['join_date'] = date('Y-m-d H:i', $join_user['createtime']);` 127. `}` 128. `}` 129. `if ($_W['openid'] == $activity['organizer_openid']) {` 130. `$activity['is_manager'] = true;` 131. `}` 133. `if ($activity['join_deadline'] < TIMESTAMP) {` 134. `pdo_update('rcdonkey_activity', array('status' => 3), array('id' => $id));` 135. `$activity['status'] = 3;` 136. `}` 137. `return $activity;` 138. `}` 139. `} #### 结果返回 由于小程序中沟通数据是采用API的形式,所以数据都是以JSON的形式进行返回,在这里可以直接调用**$this->result()**来返回结果,[具体查看函数说明](http://s.w7.cc/%E3%80%82/index.php?c=wiki&do=view&id=1&list=514 "具体查看函数说明") #### 小程序端如何请求 所有对外(小程序)公布的接口函数,必须是以**doPage**开头,比如下方实例中**doPagePostActivity()**,表示新增一个活动,在小程序中直接使用**app.util.request()**函数来请求。代码如下,其它函数引用同理。 1. `app.util.request({` 2. `url: 'entry/wxapp/postactivity',` 3. `data: {` 4. `m: 'rcdonkey_signup',` 5. `title : form.title,` 6. `/*省略部分代码*/` 7. `},` 8. `method : 'post',` 9. `success: function (response) {` 10. `/*省略部分代码*/` 11. `},` 12. `fail : function(response) {` 13. `if (response.data.message) {` 14. `app.util.message(response.data.message, '', 'error');` 15. `}` 16. `}` 17. `});`