小蚂蚁学习APP接口开发(9)—— APP版本升级的接口方法——处理客户端发来的请求数据

今天的笔记主要来记录最后的一个知识要点,APP客户端版本升级的接口开发。

APP的开发主要由伟大而神圣的用户来更新,更新的流程应该是这样的:

开启APP——请求初始化接口init.php——检测是否需要更新---否——首页

---是——更新

在初始化接口的时候,需要客户端发送几个数据:

app_id            客户端id,比如: 1,安卓手机 2,iphone手机

version_id        大版本号id

version_mini     小版本号id

did                    用户客户端信息(客户端工程师会获取这个数据)

encrypt_did       did加密后的字符串(did 加上 APP设备数据表中的key,然后md5)

<!doctype html>
<html>
	<head>
		<title>
			模拟手机APP提交的POST数据,用户请求初始化接口init.php
		</title>
	</head>
	<body>
		<form action="./init.php" method="post">
			app_id		<input type="text" name=‘app_id‘ ><br/>
			version_id	<input type="text" name="version_id"><br/>
			<!--did客户端的开发工程师会获取到-->
			did	        <input type="text" name="did" value="123"><br/>
			version_mini    <input type="text" name="version_mini"><br/>
			encrypt_did	<input type="text" name="encrypt_did" value="e10adc3949ba59abbe56e057f20f883e"><br/>
			<input type="submit" />
		</form>
	</body>
</html>

忘了说还需要数据库表了,这里需要两张表。一张是记录升级版本信息的表,记录着设备的id,版本号信息,下载地址等。另外一张表是记录的设备的信息,比如安卓手机的信息,安卓pad的信息等等,版本信息表中有一个外键app_id,关联的就是设备信息表的主键。

<?php
/*
    设备信息表,记录了各种客户端的信息
    CREATE TABLE IF NOT EXISTS `app_table` (
      `app_id` smallint(6) NOT NULL AUTO_INCREMENT COMMENT ‘主键‘,
      `name` varchar(10) NOT NULL COMMENT ‘设备名称‘,
      `is_encryption` tinyint(1) NOT NULL COMMENT ‘是否加密‘,
      `key` varchar(10) NOT NULL COMMENT ‘加密key‘,
      `image_size` text NOT NULL COMMENT ‘按照json来存储‘,
      `create_time` int(11) NOT NULL COMMENT ‘添加时间‘,
      `update_time` int(11) NOT NULL COMMENT ‘修改时间‘,
      `status` tinyint(1) NOT NULL COMMENT ‘状态 1正常0删除‘,
      PRIMARY KEY (`app_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT=‘app设备表‘ AUTO_INCREMENT=2 ;
    
    版本升级信息表,存放了各种版本的信息
    CREATE TABLE IF NOT EXISTS `version_upgrade` (
      `id` smallint(4) NOT NULL AUTO_INCREMENT COMMENT ‘主键‘,
      `app_id` smallint(4) NOT NULL COMMENT ‘客户端设备id‘,
      `version_id` smallint(4) NOT NULL COMMENT ‘大版本号id‘,
      `version_mini` mediumint(8) NOT NULL COMMENT ‘小版本号‘,
      `version_code` varchar(10) NOT NULL COMMENT ‘版本标识1.2‘,
      `type` tinyint(4) NOT NULL COMMENT ‘是否升级1是0否‘,
      `apk_url` varchar(255) NOT NULL COMMENT ‘下载链接地址‘,
      `upgrade_point` varchar(255) NOT NULL COMMENT ‘升级提示‘,
      `status` tinyint(4) NOT NULL,
      `create_time` int(11) NOT NULL COMMENT ‘添加时间‘,
      `update_time` int(11) NOT NULL COMMENT ‘修改时间‘,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT=‘软件升级信息表‘ AUTO_INCREMENT=2 ;
*/
?>

为处理请求的init.php创建一个基础类,在基础类的方法check()中,进行各种判断,比如:该客户端设备是否存在,是否需要加密处理,是否有权限更新等等。

<?php 

/***********************************
*
*	版本升级接口开发的基础类
*	学php的小蚂蚁
*	博客 http://my.oschina.net/woshixiaomayi/blog
*
************************************/

//载入之前写好的接口响应类
//代码内容请参考 http://my.oschina.net/woshixiaomayi/blog/517384
require_once(‘./response.php‘);
//载入之前写好的db类
//代码内容请参考 http://my.oschina.net/woshixiaomayi/blog/518295
require_once(‘./db.php‘);

class common{

	//post提交过来的数据
	public $param;
	//该客户端设备的信息详情
	public $app;

	//确认设备的版本信息,权限等
	public function check(){
		//post提交过来的数据整合,一行太长了,分开来写\(^o^)/~
		$app_id	=	isset($_POST[‘app_id‘])?$_POST[‘app_id‘]:‘‘;
		$this	->	param[‘app_id‘]	=	$app_id;
		$version_id	=	isset($_POST[‘version_id‘])?$_POST[‘version_id‘]:‘‘;
		$this	->	param[‘version_id‘]	=	$version_id;
		$did	=	isset($_POST[‘did‘])?$_POST[‘did‘]:‘‘;
		$this	->	param[‘did‘]	=	$did;
		$version_mini	=	isset($_POST[‘version_mini‘])?$_POST[‘version_mini‘]:‘‘;
		$this	->	param[‘version_mini‘]	=	$version_mini;
		$encrypt_did	=	isset($_POST[‘encrypt_did‘])?$_POST[‘encrypt_did‘]:‘‘;
		$this	->	param[‘encrypt_did‘]	=	$encrypt_did;

		//判断app_id和version_id数据类型是否正确
		if(!is_numeric($app_id) or !is_numeric($version_id)){
			return Response::show(400,‘数据不合法‘);
		}

		//判断是否需要加密处理
		$this->app=$this->getApp();
		if(!$this->app){
			return Response::show(400,‘该app不存在‘);
		}

		/*
			判断是否有权限,判断权限的方式,1,是否需要加密处理 
			2,发送过来的encrypt_did是否和服务端生成的值一致
		*/
		if($this->app[‘is_encryption‘] && $this->param[‘encrypt_did‘] != md5($did . $this->app[‘key‘])){
			return Response::show(405,‘你没有权限‘);
		}
	}

	//获取该设备信息
	public function getApp(){
		//这几天这一段都写烂了,就不写注释了
		try{
			$connect =	Db::getInstance()->connect();
		}catch(Exception $e){
			//返回给APP的错误提示
			return Response::show(400,‘mysql not connect‘);
		}

		$sql="select * from app_table where app_id=".$this->param[‘app_id‘];

		$result=mysql_query($sql,$connect);
		return mysql_fetch_assoc($result);
	}
}
 ?>

创建init.php,将数据发送到这个脚本做处理即可。

<?php 
/********************************
*
*   单例模式开发db库
*   学php的小蚂蚁
*   博客 http://my.oschina.net/woshixiaomayi/blog
*
***************************/

//载入基础类,进行版本判断
require_once(‘./common.php‘);

class Init extends Common{

	public function index(){
		//本方法在基类中
		$this->check();
	}

}	

$obj	=	new Init();
$obj	->	index();
 
?>

处理客户端发来的请求数据,基本上就完成了,明天再把整个版本升级的功能做完,估计APP接口开发的内容就结束了。学习这个也花费了不少时间 (~ ̄▽ ̄)~

时间: 2024-12-18 06:40:21

小蚂蚁学习APP接口开发(9)—— APP版本升级的接口方法——处理客户端发来的请求数据的相关文章

C#.NET微信公众账号接口开发系列文章整理--微信接口开发目录,方便需要的博友查询

前言: 涉及微信接口开发比较早也做的挺多的,有时间的时候整理了开发过程中一些思路案例,供刚学习微信开发的朋友参考.其实微信接口开发还是比较简单的,但是由于调试比较麻烦,加上微信偶尔也会给开发者挖坑,并且C#.NET微信接口开发又比php开源的项目少很多,腾讯官方还经常给其他的语言的jdk唯独缺少.NET的,所以整理自己开发的一些代码.心得并且附带完整源码:https://github.com/xiejun-net/weixin,希望可以减少大家开发的时间,同时如有问题希望可以指出交流.后续还会更

APP模板开发APP的优势有哪些?

App制作模板就是已经开发好的一套系统,基本的App功能.图标.风格都已经制作好了,只需要客户根据自身的业务需求选择合适的模板制作App软件.APICloud的App模板有哪些优势呢? 1. 高效低成本 效率高.成本低是App制作模板搭建手机App最大的优势.不论是企业还是个人,在使用App模板制作App软件时,可以不用再找开发团队重新开发App功能,只要明确哪种模板适合自己,能够满足自身的需求,然后进行简单的操作就可以完成一款App的制作.由于不需要App技术人员参与开发,所以价格较为低廉.A

开发一个 App 有多难?说出来你可能不信!

上图为程序员客栈儿童类视频APP 1.开发一个APP有多难?说实话,单纯地从开发来说,开发一个APP没有那么难.如果一款APP的基本功能点确定了,开发时间一般为1-2个月就完成了,费用大约5-10万的样子.当然了如果1.0版本就要求很多功能,那开发时间就会延长,费用也会增加. 2.需要经历那些流程?简单来说一款APP的开发一般流程是这样的:原型(合格的原型)——设计(合格的设计)——前端——后端——测试. 3.需要哪些人员进行开发?原型:产品经理,根据确定的需求,画原型.设计:UI设计师,负责软

odoo中接口开发

文章参考:https://blog.csdn.net/qq_33472765/article/details/81913627 案例0000001 接口调用请求说明:https请求方式:GET(请使用https协议)csrf=Falsecsrf(Cross-site request forgery跨站请求伪造)问题,get请求不影响,post就需要csrf认证CSRF(跨站请求伪造) CSRF 英文全称为 Cross SIte Request Forgery CSRF 通常指恶意攻击者盗用用户的

我的第一次Webservice接口开发

转: 我的第一次Webservice接口开发 我的第一次Webservice接口开发原创 jianhaojiang 最后发布于2019-05-09 16:58:09 阅读数 9830 收藏展开前言 最近项目上需要对接WebService接口,之前从来没有用过,这次都遇见了.记录下基础的使用和我遇见的问题.正文概述 WebService接口百度一搜,各个介绍的都非常详细,由于刚开始没接触,看的也不是很懂.首先记住一句话:WebService是一种跨编程语言和跨操作系统平台的远程调用技术.跨编程语言

支付宝在线支付接口开发教程

1.什么是第三方支付 所谓第三方支付,就是一些和各大银行签约.并具备一定实力和信誉保障的第三方独立机构提供的交易支持平台.在通过第三方支付平台的交易中,买方选购商品后,使用第三方平台提供的账户进行货款支付,由第三方通知卖家货款到达. 目前提供第三方支付的机构很多,常见的有支付宝.财付通.快钱.网银在线.易宝支付.云网等各大支付平台.网站如果需要实现第三方支付首先应该向第三方支付平台申请一个账号并签署协议,协议生效后第三方支付平台将为其开通在线支付功能,通过程序将接口集成到网站中. 为什么要使用第

首次使用Restful进行webservice接口开发小结

所写内容根据自身项目而定 1.安装,web请求测试插件 postman 下载插件包:postman 4.2.7.zip 打开 google的 chrome 浏览器 设置 --> 扩展程序 --> 加载已解压的扩展程序, 如下图: 安装完成后:在地址栏里输入:chrome://apps,点击postman, restClient 2.第二步利用 postman测试,发送web请求. 背景:利用restful作为webservice开发接口,接口开发完毕,进行测试 接口如下:请求格式,响应格式都是

php微信支付接口开发程序

php微信支付接口开发程序讲解 微信支付接口现在也慢慢的像支付宝一个可以利用api接口来实现第三方网站或应用进行支付了, 下文整理了一个php微信支付接口开发程序并且己测试,有兴趣的朋友可进入参考. 必要条件: appid //公众号后台开发者中心获得(和邮件内的一样)   mchid//邮件内获得  key//商户后台自己设置  appsecret //公众号开发者中心获得 两个证书文件,邮件内获得 apiclient_cert.pem   apiclient_key.pem 注意事项: 公众

PHP 接口开发注意事项

PHP 接口开发注意事项 预先定义接口流程和逻辑,确认需求 在开发前首先确定流程,复杂的接口可以绘制流程图,并确保流程与需求一致: 使用统一的变量定义 无论是SDK还是Server均因同一变量的定义以及全局变量的设置.目的是方便维护 完善的异常处理机制 接口是向外提供服务的,一旦出现异常影响较大,甚至影响系统的安全.因此需要一套完善的异常处理机制.如常见的网络连接超时等,对file_get_contents和fsocket之类的函数,需要使用@抑制错误输出 统一的提示信息输出格式 统一格式的输出