php基础的接口,使用php自己实现所需接口(需要php基础)

php的简单介绍:

php是一脚本语言,功能十分强大,因为其开发速度快,周期短现在被广泛的使用,我们现在很多的服务器都是用php再写。

做android开发的对于我们经常跟服务器的交互肯定不陌生,通常都是通过服务器给定的url通过post,get等方法来请求服务器,然后处理服务器返回的数据,现在广泛使用的是json数据,xml也有,(比如天气预报的接口);

做手机端的可能对于接口这方面没有特别的了解过,经常有需要都是要服务端来做,但是我觉得熟悉他的流程已经编写还是很有必要的。

首先准备工作:

(1)安装一个集成好数据库,apache,以及php的工具wampserver(具体安装过程就不细说了,网上有很多,基本上傻瓜式的),当然也可以分别进行安装,只是配置有点麻烦,可以自己选择;

(2)确定工具安装成功,并且可以执行php

(3)php基础(本文是介绍接口,在测试post请求的时候可能需要通过表单提交来进行测试)

下边就一个登陆,注册接口为例来进行下介绍:

(1)编写一个配置文件Config.php;定义数据库连接的写参数,

参数分别是主机名,账号,密码,还有数据库名称

define("DB_HOST","localhost");

define("DB_USER","root");

define("DB_PASSWORD","123456");

define("DB_DATABASE","test");

?>      (2)编写数据库连接的管理文件(需要注意的是,以前的mysql开头的方法都已过时,统一使用mysqli开头的方法);

class DB_Connect

{

public $con;

function __construct()

{

}

function __destruct()

{

// $this->close();

}

//连接数据库

public function connect()

{

require_once 'Config.php';

//连接mysql

$this->con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE) or die(mysqli_error($this->con));

if (mysqli_connect_errno()) {

die("Database connection failed");

}

// 返回 database handler

return $this->con;

}

//关闭数据连接

public function close()

{

mysqli_close($this->con);

}

}

?>

(3)编写一个工具类用来处理跟数据库的交互等的操作,文件名DB_Functions.php

class DB_Functions {

private $db;

// constructor

function __construct() {

require_once 'DB_Connect.php';

// connecting to database

$this->db = new DB_Connect();

$this->db->connect();

}

// destructor

function __destruct() {

}

/**

* 添加用户信息

*/

public function storeUser($name, $email, $password) {

$uuid = uniqid('', true);

$hash = $this->hashSSHA($password);

$encrypted_password = $hash["encrypted"]; // 加密后的密文

$salt = $hash["salt"]; // salt

echo $uuid."==".$encrypted_password."==".$salt;

echo "

";

print_r($hash);

$sql = "INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', NOW())";

$result = $this->db->con->query($sql);

echo $result;

// 检查结果

if ($result) {

echo "sucess";

// 获取用户信息

$uid = mysqli_insert_id($this->db->con); // 获取最新的id

$result = mysqli_query($this->db->con,"SELECT * FROM users WHERE uid = $uid");

//返回刚插入的用户信息

echo "
".$uid;

$sql = "select * from users";

$result = $this->db->con->query($sql);

echo "

";

print_r($result);

return true;

} else {

echo "false";

return false;

}

}

/**

* 通过email和password获取用户信息

*/

public function getUserByEmailAndPassword($email, $password) {

$result = mysqli_query($this->db->con,"SELECT * FROM users WHERE email = '$email'") or die(mysqli_connect_errno());

echo "

";

print_r($result);

// check for result

$no_of_rows = mysqli_num_rows($result);

if ($no_of_rows > 0) {

$result = mysqli_fetch_array($result);

$salt = $result['salt'];

$encrypted_password = $result['encrypted_password'];

$hash = $this->checkhashSSHA($salt, $password);

// check for password

if ($encrypted_password == $hash) {

return $result;

}

} else {

return false;

}

}

/**

* 通过email判断用户是否存在

*/

public function isUserExisted($email) {

$result = mysqli_query($this->db->con,"SELECT email from users WHERE email = '$email'");

$no_of_rows = mysqli_num_rows($result);

if ($no_of_rows > 0) {

// 用户存在

return true;

} else {

//用户不存在

return false;

}

}

/**

* 加密

* @param password

* returns salt and encrypted password

*/

public function hashSSHA($password) {

$salt = sha1(rand());

$salt = substr($salt, 0, 10);

$encrypted = base64_encode(sha1($password . $salt, true) . $salt);

$hash = array("salt" => $salt, "encrypted" => $encrypted);

return $hash;

}

/**

* 解密

* @param salt, password

* returns hash string

*/

public function checkhashSSHA($salt, $password) {

$hash = base64_encode(sha1($password . $salt, true) . $salt);

return $hash;

}

}

?> (4)编写接口处理类index.php,处理post或get请求,但是要注意,get请求是明文请求,参数都是拼接到接口上的,任何人都能看的到(本文使用post方式)如果要使用get方式,把下边代码中所有_POST改为_GET即可。

if (isset($_POST['tag']) && $_POST['tag'] != '') {

$tag = $_POST['tag'];

require_once 'DB_Functions.php';

$db = new DB_Functions();

$response = array("tag" => $tag, "error" => FALSE);

if ($tag == 'login') {

$email = $_POST['email'];

$password = $_POST['password'];

$user = $db->getUserByEmailAndPassword($email, $password);

echo "
".$user;

if ($user != false) {

echo $email."
" ;

echo $password."
";

$response["error"] = FALSE;

$response["uid"] = $user["unique_id"];

$response["user"]["name"] = $user["name"];

$response["user"]["email"] = $user["email"];

$response["user"]["created_at"] = $user["created_at"];

echo json_encode($response);

} else{

echo "hahaha";

$response["error"] = TRUE;

//如果转json数据的时候没有输出日志,那么说明是编码错误了。如果是汉字必须是utf-8编码

$response["error_msg"] = "用户名或密码错误!";

echo json_encode($response);

}

} else if ($tag == 'register') {

$name = $_POST['name'];

$email = $_POST['email'];

$password = $_POST['password'];

if ($db->isUserExisted($email)) {

$response["error"] = TRUE;

$response["error_msg"] = "用户已存在";

echo json_encode($response);

} else {

$user = $db->storeUser($name, $email, $password);

if ($user) {

$response["error"] = FALSE;

$response["uid"] = $user["unique_id"];

$response["user"]["name"] = $user["name"];

$response["user"]["email"] = $user["email"];

$response["user"]["created_at"] = $user["created_at"];

$response["user"]["updated_at"] = $user["updated_at"];

echo json_encode($response);

} else {

$response["error"] = TRUE;

$response["error_msg"] = "服务器繁忙,操作失败";

echo json_encode($response);

}

}

} else {

$response["error"] = TRUE;

$response["error_msg"] = "未找到您要的方法";

echo json_encode($response);

}

} else {

$response["error"] = TRUE;

$response["error_msg"] = "您的参数不正确!";

echo json_encode($response);

}

?>

(5)下边就是来调用接口了,我们可以通过android端来进行测试

看图

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

这是调用接口试验登录注册结果。如果需要看json数据可以打印查看。

访问网络我方式就不写了。

看demo:http://download.csdn.net/detail/u012808234/9587353

注意:(如果出现返回的json数据解析出现问题的话,而且json数据看着是没有问题的话,那么检查php代码的编码格式,自己调整,只要在json数据的前端没有空格即可)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值