1. 首先,要设置一个入口文件

入口文件的话会引入到固定的api文件(如下):

<?phpdefine("APPAPI_ALLOW_REQUEST_LOGIN", 'Y');  //是否允许传用户名密码参数的形式登录。如为Y则参数用户名密码参数和basic方式都可以,如为N就只能basic方式。//define("SITE_TEMPLATE_PATH", '/local/templates/mobile_app_api');    //如不定义,默认是local/templates/bitrix24。可以考虑将/local/templates/mobile_app留给h5前端展示用。新开/local/templates/mobile_app_api给api用。如不指定SITE_TEMPLATE_PATH直接IncludeComponent,则对组件代码进行debug时,会出现web端头部页面。
//require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/header.php');  //需要模板页面Header('Access-Control-Allow-Origin: *');
Header('Access-Control-Allow-Headers: origin, content-type, accept');
Header('X-Content-Type-Options: nosniff');require("remote_auth.php");//app方式每次请求session_id()都会变,导致挂钩在session_id()下面的所有session信息如fix_session_id也都不认。所以登录完毕后要拿到session_id(),并在后续接口一起传给接口,接口再去指定session_id。
//$_REQUEST['org_sessid']='06q75330o31se1cf4d7vl1bdm4';
if(!empty($_REQUEST['org_sessid'])){$org_session_id=$_REQUEST['org_sessid'];session_id($org_session_id);session_start();//echo session_id();//echo "<pre>";print_r($_SESSION);exit;
}require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");   //无需模板页面
$APPLICATION->IncludeComponent("vdg:mobile.data", "", Array());exit;?>

2. 其次,在引入的组件的component.php中获取参数,确定模板的使用

如 “http://192.168.56.1:7070/vdg/app_api.php?mobile_action=appapi_designer_list&model=designerku“:

<?php
...
include_once(dirname(__FILE__) . "/functions.php");//引入类的方法的文件
...
if ($_REQUEST["mobile_action"])//Executing some action
{$APPLICATION->RestartBuffer();$action = $_REQUEST["mobile_action"];//CRestUtil::sendHeaders();  //跨域header$actionList = new Bitrix\Mobile\Action();$actionList->executeAction($action, $arParams);CMain::FinalActions();die();
}
elseif ($_REQUEST["captcha_sid"])//getting captcha image  通过 /vdg/app_api.php?captcha_sid=1 可以得到图形验证码。
{$APPLICATION->RestartBuffer();$actionList = new Bitrix\Mobile\Action();$actionList->executeAction("get_captcha", $arParams);die();
}
elseif ($_REQUEST["manifest_id"])//getting content of appcache manifest
{include($_SERVER["DOCUMENT_ROOT"] .\Bitrix\Main\Data\AppCacheManifest::MANIFEST_CHECK_FILE);die();
}
elseif(!$USER->IsAuthorized() || !$isSessidValid)
{$APPLICATION->RestartBuffer();header("HTTP/1.0 401 Not Authorized");if(Bitrix\MobileApp\Mobile::getInstance()->getInstance() != "android"){//header("Content-Type: application/x-javascript");header("Content-Type: application/json");header("BX-Authorize: ".bitrix_sessid());}jsonError('201', '请先登陆');   //echo json_encode(Array("status" => "failed", "bitrix_sessid"=>bitrix_sessid()));die();
}
?>

3. 然后,再具体的模板中运用类的方法根据参数获取相应的数据,并返回客户端结果

如果成果返回“ jsonSuccess(questions);”如果失败返回“jsonError(′201′,questions);”如果失败返回“ jsonError('201', questRes[“ERROR”]);”或其他错误讯息,当然最重要的,最重要的,最重要的还是类的方法(菜鸟一般写不出来,比如我):

<?
/*** activity.php, 活动问答的API*/
class VActivity
{/*** 获取所有问题的列表** @return array()* @static*/public static function getQuestions($withAnswerCounts=false){global $DB, $USER;// if (!$USER->IsAuthorized()) {//     return array();// }$arSqls["SELECT"]=' ID,TITLE,CONTENT,DATE_CREATE,DATE_UPDATE,CREATED_BY,REWARD ';//$arSqls["WHERE"]=" ID='".$DB->ForSql($questID,11)."' ";$strSql = "SELECT ".$arSqls["SELECT"]." FROM v_act_question";$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);$questions = array();$userIds = array();if ($dbRes){while ($arr_exp = $dbRes->Fetch()){$questions[]=$arr_exp;$userIds[] = $arr_exp["CREATED_BY"];}}$userDict = static::getUserDict($userIds);for($i = 0;$i<count($questions);$i++) {$questions[$i]["CREATED_BY_NAME"] = $userDict[$questions[$i]["CREATED_BY"]];if ($withAnswerCounts) {$questions[$i]["ANSWERS"] = count(static::getAnswers($questions[$i]["ID"], false));}}return $questions;}private static function getUserDict($userIds){$res = array();foreach($userIds as $key => $val) {$uRes = CUser::GetByID($val);$u = $uRes->Fetch();if ($u) {$name = $u["NAME"];if ($name) {$res[$val] = $name;}else {$login = $u["LOGIN"];$res[$val] = $login;}               }}return $res;}public static function getQuestion($questionID, $withUserName=true, $arSelect=""){global $DB, $USER;// if (!$USER->IsAuthorized()) {//     return array();// }if (empty($arSelect)) {$arSqls["SELECT"]=' ID,TITLE,CONTENT,DATE_CREATE,DATE_UPDATE,CREATED_BY,REWARD ';} else {$arSqls["SELECT"]=' '.$arSelect.' ';}$arSqls["WHERE"]=" ID='".$DB->ForSql($questionID,11)."' ";$strSql = "SELECT ".$arSqls["SELECT"]." FROM v_act_question WHERE ".$arSqls["WHERE"]." ";$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);if ($dbRes){while ($arr_exp = $dbRes->Fetch()){ $quest = $arr_exp;if ($withUserName) {$userDict = static::getUserDict(array($arr_exp["CREATED_BY"]));$quest["CREATED_BY_NAME"] = $userDict[$arr_exp["CREATED_BY"]];}                return $quest;}}return array();}public static function getAnswer($answerID, $withLikes=true, $withUserName=true, $arSelect=''){global $DB, $USER;if (empty($arSelect)) {$arSqls["SELECT"]=' ID,CONTENT,DATE_CREATE,DATE_UPDATE,CREATED_BY,REWARD ';} else {$arSqls["SELECT"] = ' '.$arSelect.' ';}$arSqls["WHERE"]=" ID='".$DB->ForSql($answerID,11)."' ";$strSql = "SELECT ".$arSqls["SELECT"]." FROM v_act_answer WHERE ".$arSqls["WHERE"]." ";$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);$answers = array();if ($dbRes){while ($item = $dbRes->Fetch()){$ansID = $item["ID"];if ($withUserName) {$userDict = static::getUserDict(array($item["CREATED_BY"]));$item["CREATED_BY_NAME"] = $userDict[$item["CREATED_BY"]];}if ($withLikes) {$likeRes = static::getLikes($ansID);$item["LIKES"] = $likeRes["LIKES"];}return $item;}}return array();}public static function getAnswers($questionID, $withLikes=true){global $DB, $USER;$arSqls["SELECT"]=' ID,QUESTION_ID,CONTENT,DATE_CREATE,DATE_UPDATE,CREATED_BY,REWARD ';$arSqls["WHERE"]=" QUESTION_ID='".$DB->ForSql($questionID,11)."' ";$strSql = "SELECT ".$arSqls["SELECT"]." FROM v_act_answer WHERE ".$arSqls["WHERE"]." ";$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);$answers = array();$userIds = array();if ($dbRes){while ($item = $dbRes->Fetch()){$ansID = $item["ID"];$userIds[] = $item["CREATED_BY"];if ($withLikes) {$likeRes = static::getLikes($ansID);$item["LIKES"] = $likeRes["LIKES"];}                $answers[] = $item;}}$userDict = static::getUserDict($userIds);for($i = 0;$i<count($answers);$i++) {$answers[$i]["CREATED_BY_NAME"] = $userDict[$answers[$i]["CREATED_BY"]];}return $answers;}/*** 创建问题** @param int $answerID 回答ID* @return array("OK"=>true, "LIKES"=> array(), "ERROR"=>"")* @static*/public static function getLikes($answerID){$res = array("OK"=>true, "LIKES"=> array(), "ERROR"=>"");global $USER, $APPLICATION, $DB;// if (!$USER->IsAuthorized()) {//     $res["OK"] = false;//     $res["ERROR"] = "需要登录";//     return $res;// }if (!$answerID) {$res["OK"] = false;$res["ERROR"] = "非法答案:"+$answerID;return $res;}$arSqls["SELECT"]=' USER_ID ';$arSqls["WHERE"]=" ANSWER_ID='".$DB->ForSql($answerID,11)."' ";$strSql = "SELECT ".$arSqls["SELECT"]." FROM v_act_like WHERE ".$arSqls["WHERE"]." ";$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);if ($dbRes){while ($item = $dbRes->Fetch()){ $res["LIKES"][] = $item["USER_ID"];}}return $res;}/*** 创建问题** @param array $arFields 问题字段列表。TITLE,CONTENT,REWARD* @return array("OK"=>true, "QUESTION_ID"=>0, "ERROR"=>"")* @static*/public static function createQuestion($arFields=array()){global $USER, $APPLICATION, $DB;$res = array("OK"=>true, "QUESTION_ID"=>0, "ERROR"=>"");if (!$USER->IsAuthorized()) {$res["OK"] = false;$res["ERROR"] = "需要登录";return $res;}if (!$arFields["TITLE"]) {$res["OK"] = false;$res["ERROR"] = "缺少标题";return $res;}if (!$arFields["CONTENT"]) {$res["OK"] = false;$res["ERROR"] = "缺少内容: "+print_r($arFields["CONTENT"], true);return $res;}$rewards = 0.00;if ($arFields["REWARD"]) {$rewards = FloatVal($arFields["REWARD"]);}$userID = $USER->GetID();$fromUser = $userID;$toUser = $userID;$strSql = "INSERT INTO v_act_question (TITLE,CONTENT,DATE_CREATE,DATE_UPDATE,CREATED_BY,REWARD) VALUES ('".$arFields["TITLE"]."', '".$arFields["CONTENT"]."', ".$DB->CurrentTimeFunction()." , ".$DB->CurrentTimeFunction()." , '".$DB->ForSql($userID,11)."', ".$rewards." )";$DB->Query($strSql, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__);$questID = IntVal($DB->LastID());if ($questID > 0) {$res["QUESTION_ID"] = $questID;static::addNotify("question", $fromUser, $toUser, "创建了问题:".$arFields["TITLE"].";奖赏:¥".$arFields["REWARD"]);return $res;}$res["OK"] = false;$res["ERROR"] = "创建问题失败";return $res;}private static function addNotify($eventType, $fromUser, $toUser, $message) {CModule::IncludeModule("im");$arMessageFields = array("MESSAGE_TYPE" => IM_MESSAGE_SYSTEM,"TO_USER_ID" => intval($toUser),"FROM_USER_ID" => intval($fromUser),"NOTIFY_TYPE" => IM_NOTIFY_FROM,"NOTIFY_MODULE" => "main","NOTIFY_EVENT" => $eventType, //"rating_vote",//"NOTIFY_TAG" => "RATING|".($arParams['VALUE'] >= 0 ? "" : "DL|").$arParams['ENTITY_TYPE_ID']."|".$arParams['ENTITY_ID'],"NOTIFY_MESSAGE" => $message,"NOTIFY_MESSAGE_OUT" => $message);CIMNotify::Add($arMessageFields);}public static function addAnswer($questionID, $arFields=array()){global $USER, $APPLICATION, $DB;$res = array("OK"=>true, "ANSWER_ID"=>0, "ERROR"=>"");if (!$USER->IsAuthorized()) {$res["OK"] = false;$res["ERROR"] = "需要登录";return $res;}if ($questionID <= 0) {$res["OK"] = false;$res["ERROR"] = "缺少问题";return $res;}if (!$arFields["CONTENT"]) {$res["OK"] = false;$res["ERROR"] = "缺少内容";return $res;}$userID = $USER->GetID();$fromUser = $userID;$toUser = $userID;$questionTitle="";$quest = static::getQuestion($questionID, false, "TITLE, CREATED_BY");if ($quest) {$questionTitle = $quest["TITLE"];$toUser = IntVal($quest["CREATED_BY"]);}$strSql = "INSERT INTO v_act_answer (QUESTION_ID,CONTENT,DATE_CREATE,DATE_UPDATE,CREATED_BY,REWARD) VALUES ('".$DB->ForSql($questionID,11)."', '".$arFields["CONTENT"]."', ".$DB->CurrentTimeFunction()." , ".$DB->CurrentTimeFunction()." , '".$DB->ForSql($userID,11)."', 0.00 )";$DB->Query($strSql, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__);$answerID = IntVal($DB->LastID());if ($answerID > 0) {$res["ANSWER_ID"] = $answerID;static::addNotify("answer", $fromUser, $toUser, "回答了一道问题:".$questionTitle);return $res;}$res["OK"] = false;$res["ERROR"] = "创建问题失败";return $res;}public static function addLike($answerID){$res = array("OK"=>true, "ERROR"=>"");global $USER, $APPLICATION, $DB;if (!$answerID) {$res["OK"] = false;$res["ERROR"] = "非法答案:"+$answerID;return $res;}if (!$USER->IsAuthorized()) {$res["OK"] = false;$res["ERROR"] = "需要登录";return $res;}$userID = $USER->GetID();$fromUser = $userID;$toUser = $userID;$arSqls["SELECT"]=' USER_ID ';$arSqls["WHERE"]=" ANSWER_ID='".$DB->ForSql($answerID,11)."' AND USER_ID='".$DB->ForSql($userID,11)."' ";$strSql = "SELECT ".$arSqls["SELECT"]." FROM v_act_like WHERE ".$arSqls["WHERE"]." ";$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);if ($dbRes){while ($dbRes->Fetch()){return $res;}}$answer = static::getAnswer($answerID, false, "CREATED_BY");if ($answer) {$toUser = $answer["CREATED_BY"];}$strSql = "INSERT INTO v_act_like (ANSWER_ID,USER_ID) VALUES ('".$DB->ForSql($answerID,11)."', '".$DB->ForSql($userID,11)."')";$DB->Query($strSql, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__);// $lastID = $DB->LastID();// if (!$lastID) {//     $res["OK"] = false;//     $res["ERROR"] = "出错:"+print_r($lastID, true);//     return $res;// }static::addNotify("likes", $fromUser, $toUser, "对一个答案表示了喜欢。");return $res;}/*** 创建问题** @param array $questID 问题ID* @param array $arFields 问题字段列表。TITLE,CONTENT,REWARD* @return array("OK"=>true, "QUESTION_ID"=>0, "ERROR"=>"")* @static*/public static function updateQuestion($questID, $arFields = array()){$res = array("OK"=>true, "QUESTION_ID"=>$questID, "ERROR"=>"");global $USER, $APPLICATION, $DB;if (!$USER->IsAuthorized()) {$res["OK"] = false;$res["ERROR"] = "需要登录";return $res;}$userId = $USER->GetID();$arSqls["SELECT"]=' ID,CREATED_BY ';$arSqls["WHERE"]=" ID='".$DB->ForSql($questID,11)."' ";$strSql = "SELECT ".$arSqls["SELECT"]." FROM v_act_question WHERE ".$arSqls["WHERE"]." ";$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);$ques_info = array();if ($dbRes){while ($arr_exp = $dbRes->Fetch()){ $ques_info['CREATED_BY']=$arr_exp['CREATED_BY'];}}if(empty($ques_info)){$res["OK"] = false;$res["ERROR"] = '没找到该问题';return $res;}if($ques_info['CREATED_BY']!=$userId){$res["OK"] = false;$res["ERROR"] = '您不是问题的创建者';return $res;}$strSql = "UPDATE v_act_question SET DATE_UPDATE=".$DB->CurrentTimeFunction()."";if(!empty($arFields["TITLE"])){$strSql .= " ,TITLE='".$arFields["TITLE"]."' ";}if(!empty($arFields["CONTENT"])){$strSql .= " ,CONTENT='".$arFields["CONTENT"]."' ";}if(!empty($arFields["REWARD"])){$strSql .= " ,REWARD='".$arFields["REWARD"]."' ";}$strSql .= " where ID='".$DB->ForSql($questID,11)."' AND CREATED_BY='".$DB->ForSql($userId,11)."' ";$DB->Query($strSql, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__);return $res;}public static function updateAnswer($ID, $arFields){$res = array("OK"=>true, "ANSWER_ID"=>$ID, "ERROR"=>"");global $USER, $APPLICATION, $DB;if (!$USER->IsAuthorized()) {$res["OK"] = false;$res["ERROR"] = "需要登录";return $res;}$userId = $USER->GetID();$fromUser = $userId;$toUser = $userId;$arSqls["SELECT"]=' ID,CREATED_BY,REWARD,QUESTION_ID ';$arSqls["WHERE"]=" ID='".$DB->ForSql($ID,11)."' ";$strSql = "SELECT ".$arSqls["SELECT"]." FROM v_act_answer WHERE ".$arSqls["WHERE"]." ";$dbRes = $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);$info = array();$oldRewards = 0.0;if ($dbRes){while ($arr_exp = $dbRes->Fetch()){ $info['CREATED_BY']=$arr_exp['CREATED_BY'];$oldRewards = FloatVal($arr_exp['REWARD']);$quest = static::getQuestion(IntVal($arr_exp["QUESTION_ID"]), false, "ID,CREATED_BY");if (!$quest) {$res["OK"] = false;$res["ERROR"] = '未找到答案对应的问题';return $res;} if($quest['CREATED_BY']!=$userId){$res["OK"] = false;$res["ERROR"] = '您不是问题的创建者';return $res;}$toUser = $info['CREATED_BY'];}}if(empty($info)){$res["OK"] = false;$res["ERROR"] = '没找到该答案';return $res;}$strSql = "UPDATE v_act_answer SET DATE_UPDATE=".$DB->CurrentTimeFunction()."";if(!empty($arFields["CONTENT"])){$strSql .= " ,CONTENT='".$arFields["CONTENT"]."' ";}if(!empty($arFields["REWARD"])){$strSql .= " ,REWARD='".$arFields["REWARD"]."' ";}$strSql .= " where ID='".$DB->ForSql($ID, 11)."' AND CREATED_BY='".$DB->ForSql($userId,11)."' ";$DB->Query($strSql, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__);if (abs($oldRewards-FloatVal($arFields["REWARD"])) > 0.01) {static::addNotify("answer", $fromUser, $toUser, "对一个回答进行了赞赏,金额为:¥".StrVal($arFields["REWARD"]));}return $res;}
}

菜鸟教你如何用php写后台API相关推荐

  1. 手机版python3h如何自制游戏_教你如何用 Python 写一个小游戏

    教你如何用 Python 写一个小游戏 引言 最近 python 语言大火, 除了在科学计算领域 python 有用武之地之外, 在游戏后台等方面, python 也大放异彩, 本篇博文将按照正规的项 ...

  2. 自制vue组件通信插件:教你如何用mixin写插件

    "vue-unicom"的作者:szpoppy,如果觉得对你有用,请一定点个star 这个项目虽然是szpoppy的个人项目,但是在szpoppy公司内是在大面积使用的,一直由sz ...

  3. python文字小游戏大全_教你如何用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  4. 一个简单案例教你如何用Typescript写Vuex

    案例源代码: github.com/danielhuoo/- 前言 相信很多人都像我一样,学习使用了vuex后,想把项目改写成Typescript.但是官方教程要么晦涩难懂,要么缺少鲜活的例子.我花了 ...

  5. 三分钟教你如何用Apifox写一个借口文档

    下载 官网: https://www.apifox.cn/ 根据电脑类型下载版本 新建项目 ** 补充项目的信息 ** ** 设置接口基地址 ** 这里要注意在默认服务器后面要加上端口号 协议版本+域 ...

  6. 教你如何用DEV-C++实现迷你世界热门游戏——抢滩登陆(双人)

    在开始今天的内容之前,我要先和大家说声"对不起",因为最近有点忙,所以我一直没更新,今天终于写完了抢滩登陆双人版1.0(其实我原来要写密室逃脱的,但写一半文件没了,所以只好重写了这 ...

  7. 以ChatGPT写诗为例,教你如何用AI软件创新性提问?

    想用AI软件创作出动人的诗篇吗? ChatGPT 是一款人工智能软件,可以帮助你创作鼓舞人心的诗歌.它为您提供了一个强大的平台来探索您的创意方面.通过一组简单的问题,您只需点击几下就可以生成令人惊叹的 ...

  8. vue前端用服务器上路径的图片展示_5分钟教你用nodeJS手写一个mock数据服务器

    对于前端开发者而言,javascript正扮演着越来越重要的地位,它不仅能为浏览器端赋能,在web服务器方面也有很大的价值(我们可以用nodeJS来写服务端代码,启动web服务器),因此本文所要描述的 ...

  9. 怎么用python制作简单的程序-神级程序员教你如何用python制作一个牛逼的外挂!...

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道义哈,呵呵),那我们就来看一下如何用python来制作一个外挂.... 我打开了4399小游 ...

最新文章

  1. 库克踏春而来,小而美的 iPhone 全新配件问世
  2. 【有奖征文】情人节,和书一起走过的日子
  3. AbstractListView源码分析4
  4. Python-基础知识-控制流程和文件操作
  5. arccatalog点要素显示不完,shp数据全图显示正常,放大要素不能显示的问题
  6. 技术人创业建站简略指南(第一季)
  7. Ubuntu18.04 + anaconda3 +python3.6+ 安装labelImg 标注
  8. SPSS课程学习思路及流程
  9. 2021-03-09
  10. Word2007版首页页眉如何去掉?
  11. 一文读懂人工智能、机器学习、深度学习、强化学习的关系(必看)
  12. 行星月球科学探索成绩斐然 桌面实验或可理解黑洞性质
  13. 3.1 WTL概述,简单使用和ATL概述,简单使用
  14. WLAN适配器故障(消失)的最快解决办法
  15. Android安全攻防战,反编译与混淆技术完全解析(下)
  16. JS面试题汇总(六)
  17. 图像分割中的Dice Loss
  18. Linux查看目录大小文件大小内存大小硬盘大小
  19. window11性能提升 打造高性能
  20. 大数据技术---Hadoop

热门文章

  1. ActiveX组件及其注册
  2. ubuntu如何安装chromium浏览器并设置成中文版
  3. php168整站系统安装时所使用的数据库怎么填写,《PHP168整站系统使用大全》
  4. python/ML/DL学习目录
  5. OpenGL API glDrawElements
  6. Microapp 接入vite子应用
  7. 苏炳添未上线,雷军“非正式带货”7000万
  8. 计算机专业基础考806,成都信息工程学院
  9. 香格里拉集团发布“香格里拉酒店与度假酒店”标识焕新
  10. Unity3D教程之Light光源