توی این مطلب قصد دارم یک وب سرویس ساده با PHP بسازیم
فرض کنید میخایم یک فرم لاگین بسازیم که کاربر اطلاعاتی مثل نام کاربری و کلمه عبورش رو وارد میکنه و دکمه ورود رو میزنه
اما اینبار ما باید اطلاعات رو به یک وب سرویس بدیم و درستی لاگین رو از یک وب سرویس دیگه بخوایم
خوب شروع میکنیم به ساخت فرم کلاینت و کد نویسی PHP
<form method="post"
action="client.php">
<input type="text"
name="username"
placeholder="username">
<input type="password"
name="password"
placeholder="password">
<input type="submit"
name="btn"
value="login">
</form>
فرم رو بصورت بالا طراحی میکنیم و بعد از زدن دکمه لاگین کد PHP سمت کلاینت اجرا میشه و اطلاعات رو بسمت سرور ارسال میکنه.
کد PHP کلاینت:
if(isset($_POST['btn'])) {
$username
= $_POST['username'];
$password
= $_POST['password'];
$array
= array('username'=>$username,'password'=>$password);
$api
= "http://YOURWEBSERVICE/server.php";
$res
= callAPI('POST',$api,json_encode($array));
$response
= json_decode($res, true);
if($response['error'] == 1) {
echo
"login error";
} else
{
echo
"Your Name is : ".$response['name'];
}
}
function
callAPI($method, $url, $data){
$curl
= curl_init();
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
));
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$result
= curl_exec($curl);
if(!$result){die("Connection Failure");}
curl_close($curl);
return
$result;
}
همه چیز مشخصه فقط باید بدونید که توی $api آدرس وب سرویس رو وارد میکنید.
خوب باید قبل از هر چیزی مشخص کنید و اجازه بدین که چه نوع درخواست هایی به سمت وب سرویس شما ارسال و دریافت بشه
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: access");
header("Access-Control-Allow-Methods: GET");
header("Access-Control-Allow-Credentials: true");
header('Content-Type: application/json');
و حالا باید اطلاعات رو دریافت کنیم از json و اون رو decode کنیم ، بصورت زیر
$input
= json_decode(file_get_contents('php://input'),true);
حالا تمام اطلاعات توی متغیر $input هست و میشه بصورت یک آرایه باهاش برخورد کرد.
$username
= $input['username'];
$password
= $input['password'];
حالا میتونیم با یک query از دیتابیس (که من اینجا از MySql استفاده میکنم) صحت لاگین را بررسی کنیم و پاسخ بدیم به درخواست وبسرویس.
include_once
'config.php';
if(!$DB
= mysqli_connect($dbhost,$dbuser,$dbpass,$dbname)) {
echo
"DBerror";
}
mysqli_query($DB,"SET CHARACTER SET utf8;");
mysqli_query($DB,"SET SESSION collation_connection = 'utf8_persian_ci'");
$sql
= mysqli_query($DB,"SELECT `name`,`password` FROM `users` WHERE `username`='$username' LIMIT 1");
if(mysqli_num_rows($sql) == 1) {
$row
= mysqli_fetch_assoc($sql);
if($row['password'] == $password) {
$return
= array('error'=>0,'name'=>$row['name']);
} else
{
$return
= array('error'=>1);
}
} else
{
$return
= array('error'=>1);
}
echo
json_encode($return);
و در نهایت پاسخ رو به کاربر برمیگردونیم . اگر پاسخ دارای مقدار error = 1 بود یعنی لاگین صورت نگرفته
و اگر صحیح بود نام کاربر رو دریافت میکنه.
یه نکته امنیتی :بهتره اینجور وب سرویس رو با یک API KEY همراه کنید . که درخواست های حاوی API KEY اشتباه هستند اصلا پردازش نشن
@timtec_co تیم تِک