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

<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px; background-color: rgb(255, 255, 255);">php的简单介绍:</span>

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


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

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


  首先准备工作:

(1)安装一个集成好数据库,apache,以及php的工具wampserver(具体安装过程就不细说了,网上有很多,基本上傻瓜式的),当然也可以分别进行安装,只是配置有点麻烦,可以自己选择;
(2)确定工具安装成功,并且可以执行php
(3)php基础(本文是介绍接口,在测试post请求的时候可能需要通过表单提交来进行测试)

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

      (1)编写一个配置文件Config.php;定义数据库连接的写参数,
参数分别是主机名,账号,密码,还有数据库名称

  

<?php 
define("DB_HOST","localhost");
define("DB_USER","root");
define("DB_PASSWORD","123456");
define("DB_DATABASE","test");

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

<?php
 
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

     

<?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 "<pre>";
		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 "<br>".$uid;
			$sql = "select * from users";
			$result = $this->db->con->query($sql);
			
			echo "<pre>";
			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 "<pre>";
		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即可。

<?php

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 "<br>".$user;

        if ($user != false) {
				echo $email."<br>" ;
		echo $password."<br>";
         
            $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端来进行测试

看图

这是调用接口试验登录注册结果。如果需要看json数据可以打印查看。
访问网络我方式就不写了。
看demo:http://download.csdn.net/detail/u012808234/9587353


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值