Ние използвахме тази система и затова е нужно да я съчетаеме с нашето API. Като за начало трябва да бъде завършена цялата интеграция на API и затова използвахме документацията за XML API интеграцията на банка HSBC.
Клиента разглежда сайта, избира си продукт или продукти за закупуване и след като клиента е готов за плащане, трябва да въведе картовите си данни в защитената страница и да се изпрати request до сървъра.
Разплащателна идентификационна система се свърже с нужната банката за идентифициране на клиента. Веднъж идентифицирането да бъде завършено, ние получаваме POST метод на нашият сайт който покава идентификацията как да процедираме нататък.
Идентификацията на купувача трябва да бъде изпратена само веднъж с поръчката която е направил. Всякакви следващи идентификации трябва да съдържат различна информация от тази за картата. Следваща идентификация за разплащане, не е защитена с юридическа отговорност от MasterCard или Visa идентификационна програма. Началната и следващата транзакция използват същатата информация като предишната транзакция.
XML API интерфейса не се нуждае от инсталация на какъвто и да е вид код или програма предоставена от банка HSBC. Ако сървъра на търговеца е конфигуриран да работи с XML документи и има възможността да ги изпраща не е нужно да има допълнителни настройки.
Следващите стъпки описват по важните действия, които трябва да се направят, за да функционира XML API интерфейса.
Програмата на клиента създава xml документ и го попълва с нужните данни. След като документа е напълно попълнен, програмата на осъществява защитена връзка с API сървъра и поства документа към него. Програмата на клиента получава друг документ през същата връзка. Сървъра извършва всички нужни сметки и връща документ с резултата на клиентската програма. Клиента получава информацията и ако трябва си я записва.
XML API интерфейсът изисква SSL връзка между търговският сървър и API сървъра и XML документа трябва да бъде изпратен с POST през тази връзка.
Има съставена схема от API, която кореспондира с XML документите.
Като се използват тези дефиниции може да се създаде XML документ. Този документ съдържа user секция. Тези секции са еднакви и значат едно и също за HBCS програмата.
1.0
OrderFormDoc
name
123456
if($currency_title12 == "GBP"){
20898
}
if($currency_title12 == "AUD"){
21218
}
if($currency_title12 == "CAD"){
21219
}
if($currency_title12 == "USD"){
21221
}
if($currency_title12 == "EUR"){
21220
}
PaymentNoFraud
P
$card_number
$month/$year
$cvm
1
if($issue_number){
$issue_number
}
if($start_month && $start_year){
$start_month/$start_year
}
$first_name $last_name
$street
if($stret2){
$street2
}else{
}
$city
if($state){
$state
}else{
}
$city
$state
$postcode
Auth
if($currency_title12 == "GBP"){
$to_pay1
}
if($currency_title12 == "AUD"){
$to_pay1
}
if($currency_title12 == "CAD"){
$to_pay1
}
if($currency_title12 == "USD"){
$to_pay1
}
if($currency_title12 == "EUR"){
$to_pay1
}
Фрагмент 3
Функционална част от програмният код е за проверка на свободна стая и запълването на потребителската кошница, за проверка на даденият потребител дали е влезнал като регистриран клиент, за проверка на правило попълнени полета за разплащане и за абониране към newsletter-a на сайта.
PHP начало
require("config.php");
Тук се извиква конфигурационният файл config.php – той съдържа връзките ни към базата от данни.
//web text under yelloo menu
$sql = "SELECT text_text FROM t_texts WHERE text_id = 58";
$h = mysql_query($sql);
$row = mysql_fetch_object($h);
$textche = $row->text_text;
// Web text
$sql = "SELECT text_title, text_text FROM t_texts WHERE text_id = 49";
$h = mysql_query($sql);
$row = mysql_fetch_object($h);
$text_title = $row->text_title;
$text_text = $row->text_text;
Чрез този програмен фрагмент правиме заявки към базата от данни, като в where калузите им даваме статично id което сочи към определеният текст които ни трябва.
След заявката използваме функция mysql_fetch_object() като параметър и даваме направената заявка и тази функция ни фръща параметрите като обекти.
Тази заявка я използваме за извикаване на web текстовете на сайта.
$original = mktime(0,0,0,$_POST['month'],$_POST['day'],$_POST['year']);
На този скалар присвояваме датата в UNIX timestamp формат взета от POST параметрите въведени за дата от потребителят.
$session_id = session_id();
Тук си създаваме сесйна променлива.
$rooms_id = $_POST['stai'];
$gests = $_POST['gests'];
$nights = $_POST['nights'];
$hostels_id = $_POST['hid'];
На тези 4 променливи присвояваме POST параметрите от предишната страница които потребителят е въвел.
$select_from_rooms = "SELECT rooms_price, rooms_beds, rooms_type, rooms_man_beds FROM t_rooms WHERE rooms_id = '".$rooms_id."' LIMIT 1";
$t = mysql_query($select_from_rooms);
$row1 = mysql_fetch_object($t);
$rooms_price = $row1->rooms_price;
$rooms_beds = $row1->rooms_beds;
$rooms_type = $row1->rooms_type;
$rooms_man_beds = $row1->rooms_man_beds;
Тук правим зачвкаа към таблицата t_rooms като в where клаузата и даваме POST партаметъра или id то на стаята която клиента е избрал. След заявката върнатите параметри прообразуваме в обекти, които ще използваме.
//Check for avail beds if have
for($ii=0;$ii<$nights;$ii++){
Проверка за свободни легла. Завъртаме цикъл for като краят му е POST параметъра на броят нощи които клиента е избрал.
$original = mktime(0,0,0,$_POST['month'],$_POST['day']+$ii,$_POST['year']);
Взимаме началната дата на пристигане която клиента е избрал, чрез POST параметри и я превръщаме в UNIX формат.
$select_from_avail = "SELECT avail_cr_date, avail_price, avail_beds FROM t_rooms_avail WHERE avail_cr_date = '".$original."' AND rooms_id = '".$rooms_id."'";
$pi = mysql_query($select_from_avail);
$red = mysql_fetch_object($pi);
$avail_beds = $red->avail_beds;
$avail_price = $red->avail_price;
Правим заявка към таблица t_rooms_avail като в where клаузата й се предава началната дата и id то на вида стая. Параметрите които ще получим ги преообразуваме в обекти.
if($rooms_type == 1 && (($avail_beds > 0) || ($rooms_beds > 0)) && $avail_beds >= $rooms_man_beds){
Правим проверка с IF клауза ако вида стая е от тип 1 “ PRIVATE ” и има свободни легла и тези легла са повече или равни на тези които е избрал клиента. Правим заявка към базта от данни като, добавяме нов ред в таблицата t_cart.
$sql_insert_cart = "INSERT INTO t_cart (session_id, client_id, rooms_id, book_date, book_price, book_beds, cart_date) VALUES('".$session_id."', '".$client_id."','".$rooms_id."','".$original."','".$avail_price."', '".$rooms_man_beds."', '".time()."')";
$h = mysql_query($sql_insert_cart);
Добавящатата заявка прави INSERT с параметри сесията на клиента, id то на стаята, датата, цената, брой легла и текущото време в timestamp формат, чрез time() PHP функция.
}else{
Иначе
if(mysql_num_rows($pi) <= 0 && $avail_beds >= $gests && $rooms_beds >0){
Ако върнатите стойности от заявката са нула или няма върнати стойности и свободните легла са повече или равни на борят желаещи, тогава:
$sql_insert_cart = "INSERT INTO t_cart (session_id, client_id, rooms_id, book_date, book_price, book_beds, cart_date) VALUES('".$session_id."', '".$client_id."','".$rooms_id."','".$original."','".$rooms_price."', '".$gests."', '".time()."')";
$h = mysql_query($sql_insert_cart);
}
Добавяме чрез заявка запис в t_cart.
$select_from_avail1 = "SELECT avail_cr_date, avail_price, avail_beds FROM t_rooms_avail WHERE avail_cr_date = '".$original."' AND rooms_id = '".$rooms_id."' AND avail_beds >= '".$gests."'";
$p = mysql_query($select_from_avail1);
Правим заявка към базата от данни за проверка на дадената стая по id то и по броя легла дали е по-голям или равен за искащите се. Ако е да:
$stai = array();
$pp=0;
while($row = mysql_fetch_object($p)){
$stai[$pp][avail_cr_date] = $row->avail_cr_date;
$stai[$pp][avail_price] = $row->avail_price;
$stai[$pp][avail_beds] = $row->avail_beds;
Правим цикъл while чрез които напълваме двумерен масив с върнатите ни стойности за дадената стая като: дата, цена, брой легла.
if($stai[$pp][avail_beds] > 0){
Ако броят легла е по-голям от нула.
$sql_insert_cart = "INSERT INTO t_cart (session_id, client_id, rooms_id, book_date, book_price, book_beds, cart_date) VALUES('".$session_id."', '".$client_id."','".$rooms_id."','".$stai[$pp][avail_cr_date]."','".$stai[$pp][avail_price]."', '".$gests."', '".time()."')";
$h = mysql_query($sql_insert_cart);
Правим запис в базата от данни в таблицата t_cart
}else{
Иначе
if($rooms_beds >0){
Проверяваме за стандартният брой легла за тази стая.
$sql_insert_cart = "INSERT INTO t_cart (session_id, client_id, rooms_id, book_date, book_price, book_beds, cart_date) VALUES('".$session_id."', '".$client_id."','".$rooms_id."','".$original."','".$rooms_price."', '".$gests."', '".time()."')";
$h = mysql_query($sql_insert_cart);
}
}
$pp++;
}
}
}
И правиме запис в таблицата t_cart.
//----------------------------------------------------------------------------------------------------------
Ако клиента иска стая, но броят легла е по малък от броя които той иска кошницата се изпразва. Това става по следният начин:
//If the client wants a room which is avail but the beds are lower that he wants
$sql_get_from_cart_man_beds = "SELECT book_beds FROM t_cart WHERE session_id = '".$session_id."' AND rooms_id = '".$rooms_id."'";
$q = mysql_query($sql_get_from_cart_man_beds);
$red15 = mysql_fetch_object($q);
$book_beds = $red15->book_beds;
Правим заявка към базата от данни и обекта които взимаме като стойност го проверяваме с POST параметъра които е въвел клиента за брой хора.
if($book_beds < $gests){
$sql_del_cart = "DELETE FROM t_cart WHERE session_id = '".session_id()."'";
$l = mysql_query($sql_del_cart);
}
Ако върнатият брой легла е по-малък от исканият се прави заявка DELETE към t_cart и се изтриват редовете от базата от данни за тази сесия.
//-------------------------------------------------------------------------------------------
Ако свободните легла са по-малко от тази които клиента иска правим проверка за подоби стай в същият хотел.
//if the avail beds lower than tha client wants ---------------- before that we save them in cart table and than check-- than go to offers---------start offer-------------
$sql_select_from_cart = "SELECT cart_id FROM t_cart WHERE session_id = '".$session_id."' AND rooms_id = '".$rooms_id."'";
$p = mysql_query($sql_select_from_cart);
$broi_zapisi = mysql_num_rows($p);
if($broi_zapisi != $nights){
$sql_del_cart = "DELETE FROM t_cart WHERE session_id = '".session_id()."'";
$l = mysql_query($sql_del_cart);
}
$sql_select_from_cart = "SELECT cart_id FROM t_cart WHERE session_id = '".$session_id."'";
$p = mysql_query($sql_select_from_cart);
$broi_zapisi1 = mysql_num_rows($p);
if($broi_zapisi1 == 0){
$msg1 = "";
$msg1 .= "There are no rooms for that period! Our offer is :";
//When have room avail
for($ii=0;$ii<$nights;$ii++){
$select_from_rooms = "SELECT rooms_id, rooms_price, rooms_beds, rooms_type, rooms_man_beds FROM t_rooms WHERE hostels_id = '".$hostels_id."' AND rooms_beds >= '".$gests."'";
$t = mysql_query($select_from_rooms);
$rooms = array();
$qq=0;
while($row1 = mysql_fetch_object($t)){
$rooms[$qq][rooms_price] = $row1->rooms_price;
$rooms[$qq][$rooms_beds] = $row1->rooms_beds;
$rooms[$qq][rooms_type] = $row1->rooms_type;
$rooms[$qq][rooms_id] = $row1->rooms_id;
$rooms[$qq][rooms_man_beds] = $row1->rooms_man_beds;
$original = mktime(0,0,0,$_POST['month'],$_POST['day']+$ii,$_POST['year']);
$select_from_avail1 = "SELECT a.rooms_id, avail_cr_date, avail_price, avail_beds FROM t_rooms_avail as a,t_rooms as r WHERE avail_cr_date = '".$original."' AND r.rooms_id = a.rooms_id AND avail_beds >= '".$gests."' AND r.rooms_id = '".$rooms[$qq][rooms_id]."'";
$pi = mysql_query($select_from_avail1);
$row = mysql_fetch_object($pi);
$avail_cr_date = $row->avail_cr_date;
$avail_price = $row->avail_price;
$avail_beds = $row->avail_beds;
$rooms_id = $row->rooms_id;
if($avail_beds >= $gests){
if($rooms[$qq][rooms_type] == 1){
$sql_insert_cart = "INSERT INTO t_cart (session_id, client_id, rooms_id, book_date, book_price, book_beds, cart_date) VALUES('".$session_id."', '".$client_id."','".$rooms_id."','".$avail_cr_date."','".$avail_price."', '".$rooms[$qq][rooms_man_beds]."', '".time()."')";
$h = mysql_query($sql_insert_cart);
}else{
$sql_insert_cart = "INSERT INTO t_cart (session_id, client_id, rooms_id, book_date, book_price, book_beds, cart_date) VALUES('".$session_id."', '".$client_id."','".$rooms_id."','".$avail_cr_date."','".$avail_price."', '".$gests."', '".time()."')";
$h = mysql_query($sql_insert_cart);
}
}
$qq++;
}
}
//When dont have room avail
for($ii=0;$ii<$nights;$ii++){
$select_from_rooms = "SELECT rooms_id, rooms_price, rooms_beds, rooms_type, rooms_man_beds FROM t_rooms WHERE hostels_id = '".$hostels_id."' AND rooms_beds >= '".$gests."'";
$t = mysql_query($select_from_rooms);
$rooms = array();
$qq=0;
while($row1 = mysql_fetch_object($t)){
$rooms[$qq][rooms_price] = $row1->rooms_price;
$rooms[$qq][$rooms_beds] = $row1->rooms_beds;
$rooms[$qq][rooms_type] = $row1->rooms_type;
$rooms[$qq][rooms_id] = $row1->rooms_id;
$rooms[$qq][rooms_man_beds] = $row1->rooms_man_beds;
$original = mktime(0,0,0,$_POST['month'],$_POST['day']+$ii,$_POST['year']);
$select_from_avail12 = "SELECT a.rooms_id, avail_cr_date, avail_price, avail_beds FROM t_rooms_avail as a,t_rooms as r WHERE avail_cr_date = '".$original."' AND r.rooms_id = a.rooms_id AND r.rooms_id = '".$rooms[$qq][rooms_id]."'";//echo $select_from_avail12;
$pi1 = mysql_query($select_from_avail12);
$row2 = mysql_fetch_object($pi1);
$avail_cr_date1 = $row2->avail_cr_date;
$avail_price1 = $row2->avail_price;
$avail_beds1 = $row2->avail_beds;
$rooms_id1 = $row2->rooms_id;
if($avail_beds1 < $guests || mysql_num_rows($pi1) == 0){
if($rooms[$qq][rooms_type] == 1){
$sql_insert_cart = "INSERT INTO t_cart (session_id, client_id, rooms_id, book_date, book_price, book_beds, cart_date) VALUES('".$session_id."', '".$client_id."','".$rooms[$qq][rooms_id]."','".$original."','".$rooms[$qq][rooms_price]."', '".$rooms[$qq][rooms_man_beds]."', '".time()."')";//echo $sql_insert_cart;exit();
$h = mysql_query($sql_insert_cart);
}else{
$sql_insert_cart = "INSERT INTO t_cart (session_id, client_id, rooms_id, book_date, book_price, book_beds, cart_date) VALUES('".$session_id."', '".$client_id."','".$rooms[$qq][rooms_id]."','".$original."','".$rooms[$qq][rooms_price]."', '".$gests."', '".time()."')";//echo $sql_insert_cart;exit();
$h = mysql_query($sql_insert_cart);
}
}
$qq++;
}
}
}
//---------------------------------------------------------------------------------------------------------------end of offer------------
Ако няма никъкви свободни стай, кошницата остава празна.
//If there are no any offers than client want-----------------------------------------------------------------
$sql_select_from_cart = "SELECT cart_id FROM t_cart WHERE session_id = '".$session_id."'";
$p = mysql_query($sql_select_from_cart);
$broi_zapisi = mysql_num_rows($p);
if($broi_zapisi < $nights){
$sql_del_cart = "DELETE FROM t_cart WHERE session_id = '".session_id()."'";
$l = mysql_query($sql_del_cart);
}
//--------------------------------------------------------------------------------------------------------------
В тази част от кода правим проверка дали даденият потребител е влезнал чрез своят панел, това значи че той е вече клиент.
if($_SESSION['client_user_logged_in'] == true){
Тази проверка става чрез IF клауза, чрез която проверяваме дали е създадена сесийна променлива за този потребител. Ако е така визмаме неговите съществуващи данни.
$sql_get_client_info = "SELECT user_name, first_name, last_name, email, nationality, gender, phone, card_type, card_name, card_number, month, year, card_address, street, street2, city, state, postcode, start_month, start_year FROM t_clients, t_clients_user WHERE clients_id = '".$_SESSION['client_client_id']."' AND clients_id = client_id LIMIT 1";
$z = mysql_query($sql_get_client_info);
$row5 = mysql_fetch_object($z);
$user_name = $row5->user_name;
$first_name = $row5->first_name;
$last_name = $row5->last_name;
$nationality = $row5->nationality;
$email = $row5->email;
$gender = $row5->gender;
$phone = $row5->phone;
$card_type = $row5->card_type;
$card_name = $row5->card_name;
$card_number = $row5->card_number;
$month = $row5->month;
$year = $row5->year;
$card_address = $row5->card_address;
$street = $row5->street;
$street2 = $row5->street2;
$city = $row5->city;
$state = $row5->state;
$postcode = $row5->postcode;
$start_month = $row5->start_month;
$start_year = $row5->start_year;
}
Използваме заявка SELECT чрез която зимаме всички клиентски данни, преообразъвани в обекти. Това го правиме за удобство на клиента, да не му се налага повторно вкарване на цялата информация за разплащане.
$session_id = session_id();
$sql_get_from_cart = "SELECT cart_id, client_id, book_date, book_price, c.rooms_id, book_beds, hostels_title, t.type_room_title, h.hostels_id, c.rooms_id, r.rooms_type FROM t_cart as c, t_rooms as r, t_hostels as h, t_type_room as t WHERE session_id = '".$session_id."' AND h.hostels_id = r.hostels_id AND r.rooms_id = c.rooms_id AND t.type_room_id = r.type_rooms_id ORDER BY book_date ASC";
$p = mysql_query($sql_get_from_cart);
$book = array();
$pp=0;
$total=0;
while($red = mysql_fetch_object($p)){
$book[$pp][client_id] = $red->client_id;
$book[$pp][book_date] = $red->book_date;
$book[$pp][book_price] = $red->book_price;
$book[$pp][book_beds] = $red->book_beds;
$book[$pp][hostels_title] = $red->hostels_title;
$book[$pp][type_room_title] = $red->type_room_title;
$book[$pp][total] = $book[$pp][book_beds] * $book[$pp][book_price];
$book[$pp][hostels_id] = $red->hostels_id;
$book[$pp][rooms_id] = $red->rooms_id;
$book[$pp][rooms_type] = $red->rooms_type;
$pp++;
}
Взимаме всички данни от кошницата които той е избрал подредени по дати, чрез SELECT заявка към t_cart таблицата, и ги вкарваме в двумерен масив, чрез цикъл while.
$sql_get_currency1 = "SELECT currency_title FROM t_hostels as h, t_currency as c WHERE hostels_id = '".$book[0][hostels_id]."' AND currency_id = hostels_currency_id";
$j1 = mysql_query($sql_get_currency1);
$red1 = mysql_fetch_object($j1);
$currency_title12 = $red1->currency_title;
Чрез заявка зимаме вида валута, които хотелът подържа.
if($currency_title12){$currency_title12 = $currency_title12;}else{$currency_title12 = "EUR";}
Ако хотела не е въвел вид валута се взима за костантен EUR.
if($_POST['action_go']){
Ако клиента е вече готов и е натиснал бутона за разплащане, значи е изпратил hidden поле, чрез което той казва на скрипта че е готов за разплащане.
if($_SESSION['client_user_logged_in'] == false){
Правим проверка дали потребителят е клиент.
$first_name = $_POST['fname'];
$last_name = $_POST['lname'];
$nationality = $_POST['nationality'];
$gender = $_POST['gender'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$card_name = $_POST['card_name'];
$card_type = $_POST['card_type'];
$card_number = $_POST['card_number'];
$card_code = $_POST['card_code1'];
$month = $_POST['month'];
$year = $_POST['year'];
$street = $_POST['street1'];
$street2 = $_POST['street12'];
$city = $_POST['city1'];
$state = $_POST['state1'];
$postcode = $_POST['postcode1'];
$isso_number = $_POST['isso_number'];
$start_month = $_POST['start_month1'];
$start_year = $_POST['start_year1'];
$agree = $_POST['agree'];
$newsletter = $_POST['newsletter'];
$check = true;
$msg = "";
Тук взимаме всички въведени стойности от полетата, чрез POST параметри.
if(!$first_name){
$check = false;
$msg .= "You should enter First Name!"."
";
}
if(strlen($first_name) > 32){
$check = false;
$msg .= "Your First Name must be lower than 32 charecters!"."
";
}
if(!$last_name){
$check = false;
$msg .= "You should enter Last Name!"."
";
}
if(strlen($last_name) > 32){
$check = false;
$msg .= "Your Last Name must be lower than 32 charecters!"."
";
}
if(!$nationality){
$check = false;
$msg .= "You should enter Country!"."
";
}
if(!$gender){
$check = false;
$msg .= "You should enter Gender!"."
";
}
if(!$phone){
$check = false;
$msg .= "You should enter Phone!"."
";
}
if(!$email){
$check = false;
$msg .= "You should enter Email!"."
";
}
if(email_check($email) == 1){
$check = false;
$msg .= "You enter Not a Valid Email address!"."
";
}
$sql_get_email = "SELECT user_id FROM t_clients_user WHERE user_name = '".$email."'"; //echo $sql_get_email;exit();
$z = mysql_query($sql_get_email);
if(mysql_num_rows($z) > 0){
$check = false;
$msg .= "There is such a user in Our database. You should login with Username and Password which We sent it to You before! If you forgotten it. You should ask for a new Password!"."
";
}
if(!$card_name){
$check = false;
$msg .= "You should enter Name on card!"."
";
}
if($card_type == 'Maestro'){
if(!$isso_number){
$check = false;
$msg .= "For Maestro Card you should enter Issue Number!"."
";
}
}
if(!$card_code){
$check = false;
$msg .= "You should enter Security code!"."
";
}
if(!$card_number){
$check = false;
$msg .= "You should enter Card number!"."
";
}
if(strlen($card_number) < 13 && strlen($card_number) > 19){
$check = false;
$msg .= "Your Credit card number must be between 13 and 19 symbols long!"."
";
}
if(!$month && !$year){
$check = false;
$msg .= "You should choose Expiry date!"."
";
}
if(!$street){
$check = false;
$msg .= "You should enter Street!"."
";
}
if(strlen($street) > 60){
$check = false;
$msg .= "The maximum lenght of Street is 60 charecters!"."
";
}
if(!$city){
$check = false;
$msg .= "You should enter City!"."
";
}
if(strlen($city) > 25){
$check = false;
$msg .= "The maximum lenght of City is 25 charecters!"."
";
}
if(!$postcode){
$check = false;
$msg .= "You should enter Postcode!"."
";
}
if(strlen($postcode) > 20){
$check = false;
$msg .= "The maximum lenght of Postcode is 25 charecters!"."
";
}
if(!$agree){
$check = false;
$msg .= "Are you agree with Our terms and conditions?"."
";
}
if($card_type == 'Visa'){
//Credit Card Validator
include("classes/creditcard.inc.php");
$cc=new CCVAL;
$ccnum=$card_number;
$cctype=$card_type;
if($cc->isVAlidCreditCard($ccnum)){
$check = true;
}else{
$check = false;
$msg .= "Not valid Credit Card Number!"."
";
}
if($cc->isVAlidCreditCard($ccnum,$type)){
$check = true;
}else{
$check = false;
$msg .= "Not valid Credit Card Type!"."
";
}
}
}
Тук правим проверки за валидност на данни от полетата във формата. За тяхната дължина, дали са празни полетата, за валидност на кредитният номер, ако не са, изписваме съобщение за грешка.
if($_SESSION['client_user_logged_in'] == true){
Правим проверка дали потребителят е клиент и ако да:
//If client loged in
$first_name = $_POST['fname'];
$last_name = $_POST['lname'];
$nationality = $_POST['nationality'];
$gender = $_POST['gender'];
$phone = $_POST['phone'];
$email = $_POST['email'];
$card_name = $_POST['card_name'];
$card_type = $_POST['card_type'];
$card_number = $_POST['card_number'];
$card_code = $_POST['card_code1'];
$month = $_POST['month'];
$year = $_POST['year'];
$street = $_POST['street1'];
$street2 = $_POST['street12'];
$city = $_POST['city1'];
$state = $_POST['state1'];
$postcode = $_POST['postcode1'];
$isso_number = $_POST['isso_number'];
$start_month = $_POST['start_month1'];
$start_year = $_POST['start_year1'];
$agree = $_POST['agree'];
$newsletter = $_POST['newsletter'];
$check = true;
$msg = "";
if(!$first_name){
$check = false;
$msg .= "You should enter First Name!"."
";
}
if(strlen($first_name) > 32){
$check = false;
$msg .= "Your First Name must be lower than 32 charecters!"."
";
}
if(!$last_name){
$check = false;
$msg .= "You should enter Last Name!"."
";
}
if(strlen($last_name) > 32){
$check = false;
$msg .= "Your Last Name must be lower than 32 charecters!"."
";
}
if(!$nationality){
$check = false;
$msg .= "You should enter Country!"."
";
}
if(!$gender){
$check = false;
$msg .= "You should enter Gender!"."
";
}
if(!$phone){
$check = false;
$msg .= "You should enter Phone!"."
";
}
if(!$email){
$check = false;
$msg .= "You should enter Email!"."
";
}
if(email_check($email) == 1){
$check = false;
$msg .= "You enter Not a Valid Email address!"."
";
}
$sql_get_email = "SELECT user_id FROM t_clients_user WHERE user_name = '".$email."'";
$z = mysql_query($sql_get_email);
if(mysql_num_rows($z) > 0){
$sql = "SELECT email FROM t_clients WHERE clients_id = '".$_SESSION['client_client_id']."'";
$h = mysql_query($sql);
$row = mysql_fetch_object($h);
$e_mail = $row->email;
if($e_mail == $email){
$check = true;
}else{
$check = false;
$msg .= "There is such a user in Our database.!"."
";
}
}
if(!$card_name){
$check = false;
$msg .= "You should enter Name on card!"."
";
}
if($card_type == 'Maestro'){
if(!$isso_number){
$check = false;
$msg .= "For Maestro Card you should enter Issue Number!"."
";
}
}
if(!$card_code){
$check = false;
$msg .= "You should enter Security code!"."
";
}
if(!$card_number){
$check = false;
$msg .= "You should enter Card number!"."
";
}
if(strlen($card_number) < 13 && strlen($card_number) > 19){
$check = false;
$msg .= "Your Credit card number must be between 13 and 19 symbols long!"."
";
}
if(!$month && !$year){
$check = false;
$msg .= "You should choose Expiry date!"."
";
}
if(!$street){
$check = false;
$msg .= "You should enter Street!"."
";
}
if(strlen($street) > 60){
$check = false;
$msg .= "The maximum lenght of Street is 60 charecters!"."
";
}
if(!$city){
$check = false;
$msg .= "You should enter City!"."
";
}
if(strlen($city) > 25){
$check = false;
$msg .= "The maximum lenght of City is 25 charecters!"."
";
}
if(!$postcode){
$check = false;
$msg .= "You should enter Postcode!"."
";
}
if(strlen($postcode) > 20){
$check = false;
$msg .= "The maximum lenght of Postcode is 25 charecters!"."
";
}
if(!$agree){
$check = false;
$msg .= "Are you agree with Our terms and conditions?"."
";
}
if($card_type == 'Visa'){
//Credit Card Validator
include("classes/creditcard.inc.php");
$cc=new CCVAL;
$ccnum=$card_number;
$cctype=$card_type;
if($cc->isVAlidCreditCard($ccnum)){
$check = true;
}else{
$check = false;
$msg .= "Not valid Credit Card Number!"."
";
}
if($cc->isVAlidCreditCard($ccnum,$type)){
$check = true;
}else{
$check = false;
$msg .= "Not valid Credit Card Type!"."
";
}
}
Правим проверка за въведените данни, дали не ги е променил.
if($check){
Правим проверка дали се абонирал за newsletter
//add to newsletter
if($newsletter){
$sql = "SELECT e_id FROM t_emails WHERE e_mail = '".$email."'";
$h = mysql_query($sql);
$row = mysql_fetch_object($h);
$e_id = $row->e_id;
if($e_id){
$sql1 = "UPDATE t_emails SET e_name = '".$first_name."', e_mail = '".$email."', e_family = '".$last_name."' WHERE e_id = '".$e_id."'";
$n = mysql_query($sql1);
}else{
$sql1 ="INSERT INTO t_emails( e_name, e_mail, e_family ) VALUES( '".$first_name."', '".$email."', '".$last_name."' )";
$n = mysql_query($sql1);
}
}
Ако се е абонирал го вкараваме в базата от данни, чрез INSERT заявка.
$sql_get_group = "SELECT MAX(group_id) AS group_id FROM t_orders";
$m = mysql_query($sql_get_group);
$rowche = mysql_fetch_object($m);
$group_id = $rowche->group_id;
for($aa=0;$aa
$sql_insert_to_order = "INSERT INTO t_orders ( client_id, rooms_id, book_date, book_price, book_beds, hostels_id, order_status, order_date, group_id ) VALUES( '".$_SESSION['client_client_id']."','".$book[$aa][rooms_id]."','".$book[$aa][book_date]."','".$book[$aa][book_price]."','".$book[$aa][book_beds]."', '".$book[$aa][hostels_id]."', '0', '".time()."', ".$group_id."+1)";
$r = mysql_query($sql_insert_to_order);
}
Вкарваме всички данни от кошницата в таблицата за поръчки t_orders.
$sql_del_cart = "DELETE FROM t_cart WHERE session_id = '".session_id()."'";
$l = mysql_query($sql_del_cart);
Изправаме кошницата, чрез DELETE заявка
$sql_update_client = "UPDATE t_clients SET first_name = '".$first_name."', last_name = '".$last_name."', nationality = '".$nationality."', gender = '".$gender."', phone = '".$phone."', email = '".$email."', card_name = '".$card_name."', card_type = '".$card_type."', card_number = '".$card_number."', month = '".$month."', year = '".$year."', card_address = '".$card_address."', reg_date = '".time()."', street = '".$street."', street2 = '".$street2."', city = '".$city."', state = '".$state."', postcode = '".$postcode."', cvm = '".$card_code."', issue_number = '".$isso_number."', start_month = '".$start_month."', start_year = '".$start_year."' WHERE clients_id = '".$_SESSION['client_client_id']."'";
$m = mysql_query($sql_update_client);
Правим UPDATE а таблицата с информация за клиента t_clients
$group_id1 = $group_id+1;
header("Location: client_details_confirm.php?oid=$group_id1");
exit();
}
}else{
Ако потребителят не е регистриран клиент
if($check){
//add to newsletter
if($newsletter){
$sql = "SELECT e_id FROM t_emails WHERE e_mail = '".$email."'";
$h = mysql_query($sql);
$row = mysql_fetch_object($h);
$e_id = $row->e_id;
if($e_id){
$sql1 = "UPDATE t_emails SET e_name = '".$first_name."', e_mail = '".$email."', e_family = '".$last_name."' WHERE e_id = '".$e_id."'";
$n = mysql_query($sql1);
}else{
$sql1 ="INSERT INTO t_emails( e_name, e_mail, e_family ) VALUES( '".$first_name."', '".$email."', '".$last_name."' )";
$n = mysql_query($sql1);
}
}
$sql_insert = "INSERT INTO t_clients ( first_name, last_name, nationality, gender, phone, email, card_name, card_type, card_number, month, year, card_address, reg_date, street, street2, city, state, postcode, cvm, issue_number, start_month, start_year ) VALUES( '".$first_name."','".$last_name."','".$nationality."','".$gender."','".$phone."','".$email."','".$card_name."','".$card_type."','".$card_number."','".$month."','".$year."','".$card_address."', '".time()."', '".$street."', '".$street2."', '".$city."', '".$state."', '".$postcode."', '".$card_code."', '".$isso_number."', '".$start_month."', '".$start_year."')";
$q = mysql_query($sql_insert);
Добавяме го в базата от данни за клиенти.
$get_id = mysql_insert_id();
$passwd = md5("goldrock".time());
$password = substr($passwd, 4, 6);
$md5_pass = md5($password);
Генерираме му парола, чрез md5 функция
$sql_creat_client_login = "INSERT INTO t_clients_user( user_name, password, client_id ) VALUES('".$email."', '".$md5_pass."', '".$get_id."')";
$j = mysql_query($sql_creat_client_login);
Записваме я в таблицата за клиенти
$sql_get_group = "SELECT MAX(group_id) AS group_id FROM t_orders";
$m = mysql_query($sql_get_group);
$rowche = mysql_fetch_object($m);
$group_id = $rowche->group_id;
for($aa=0;$aa
$sql_insert_to_order = "INSERT INTO t_orders ( client_id, rooms_id, book_date, book_price, book_beds, hostels_id, order_status, order_date, group_id ) VALUES( '".$get_id."','".$book[$aa][rooms_id]."','".$book[$aa][book_date]."','".$book[$aa][book_price]."','".$book[$aa][book_beds]."', '".$book[$aa][hostels_id]."', '0', '".time()."', ".$group_id."+1)";
$r = mysql_query($sql_insert_to_order);
}
$sql_del_cart = "DELETE FROM t_cart WHERE session_id = '".session_id()."'";
$l = mysql_query($sql_del_cart);
Записваме поръчката му от кошницата в таблицата за поръчки и
//----------------------------------------------------------------------------------
$mail = new PHPMailer();
$mail->IsSMTP(); // send via SMTP
$mail->Host = $MailServer; // SMTP servers
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->Username = $MailUsername; // SMTP username
$mail->Password = $MailPassword; // SMTP password
$mail->From = $YourEmailAddress;
$mail->FromName = $Yourname;
$mail->AddAddress($email,$last_name);
// optional name
$mail->AddReplyTo($YourEmailAddress,$Yourname);
$mail->WordWrap = 100; // set word wrap
//$mail->AddAttachment(); // attachment
//$mail->AddAttachment();
$mail->IsHTML(true); // send as HTML
$mail->Subject = "You have Email from www.hostels247.vom";
$mail->Body = "Fisrt Name: ".$first_name."\n";
$mail->Body .= "and Last Name: ".$last_name."\n";
$mail->Body .= "We have created for You a account to login in www.hostels247.com\n";
$mail->Body .= "You can login here www.hostels247.com\client_login.php\n";
$mail->Body .= "Username: ".$email."\n";
$mail->Body .= "and Password: ".$password."\n";
if(!$mail->Send())
{
echo "Message was not sent
";
echo "Mailer Error: " . $mail->ErrorInfo;
exit;
}
//----------------------------------------------------------------------------------
$group_id2 = $group_id+1;
Му изпращаме генерираният акаунт по email-a.
header("Location: client_details_confirm.php?oid=$group_id2");
exit();
Скрипта го прехвърля на следващата страница за реализиране на разплащането.
}
}
}
?>
Край на PHP кода.
Фрагмент 4
Част от програмният код, които реализира online транзакцията за разплащане.
$sql_get_orders = "SELECT orders_id, first_name, last_name, phone, clients_id, group_id, order_status, u.user_id, o.rooms_id, hostels_title, o.hostels_id, book_price, book_beds, order_date, t.type_room_title, book_date, r.rooms_type FROM t_orders AS o, t_clients AS c, t_clients_user AS u, t_hostels AS h, t_type_room AS t, t_rooms AS r WHERE group_id = '".$group_id."' AND o.client_id = c.clients_id AND c.clients_id = u.client_id AND h.hostels_id = o.hostels_id AND h.hostels_id = r.hostels_id AND t.type_room_id = r.type_rooms_id AND o.rooms_id = r.rooms_id";
$h = mysql_query($sql_get_orders);
$orders = array();
$ii = 0;
while($row = mysql_fetch_object($h)) {
$orders[$ii][group_id] = $row->group_id;
$orders[$ii][orders_id] = $row->orders_id;
$orders[$ii][first_name] = $row->first_name;
$orders[$ii][last_name] = $row->last_name;
$orders[$ii][phone] = $row->phone;
$orders[$ii][order_date] = $row->order_date;
$orders[$ii][book_date] = $row->book_date;
$orders[$ii][order_status] = $row->order_status;
$orders[$ii][clients_id] = $row->clients_id;
$orders[$ii][user_id] = $row->user_id;
$orders[$ii][rooms_id] = $row->rooms_id;
$orders[$ii][hostels_title] = $row->hostels_title;
$orders[$ii][hostels_id] = $row->hostels_id;
$orders[$ii][book_price] = $row->book_price;
$orders[$ii][book_beds] = $row->book_beds;
$orders[$ii][type_room_title] = $row->type_room_title;
$orders[$ii][rooms_type] = $row->rooms_type;
$orders[$ii][total] = $orders[$ii][book_beds] * $orders[$ii][book_price];
$total += $orders[$ii][total];
$ii++;
}
Правим заявка към базата от данни и взиме всички данни за направената поръчка от таблицата t_orders. Преообразуваме ги в двумерен масив.
//transform in pence for xml
$deposit = ($total*0.1);
$to_pay = number_format($deposit,2,'.','');
$to_pay1 = $to_pay*100;
Взимаме крайната цена и я прообразуваме във вид до 2 цифри след дестетичната запетаята.( „ по изискване на банката ” )
//get currency for xml
$sql_get_currency1 = "SELECT currency_title FROM t_hostels as h, t_currency as c WHERE hostels_id = '".$orders[0][hostels_id]."' AND currency_id = hostels_currency_id";
$j1 = mysql_query($sql_get_currency1);
$red1 = mysql_fetch_object($j1);
$currency_title12 = $red1->currency_title;
if($currency_title12){$currency_title12 = $currency_title12;}else{$currency_title12 = "EUR";}
Взимаме вида валука които подържа даденият хотел, към които е направена поръчката.
$sql_get_client_info = "SELECT first_name, last_name, gender, card_name, card_type, card_number, month, year, street, street2, city, state, postcode, nationality, phone, email, cvm, issue_number, start_month, start_year FROM t_clients as c, t_orders as o WHERE group_id = '".$group_id."' AND c.clients_id = o.client_id";
$h = mysql_query($sql_get_client_info);
$row5 = mysql_fetch_object($h);
$first_name = $row5->first_name;
$last_name = $row5->last_name;
$gender = $row5->gender;
$card_type = $row5->card_type;
$card_name = $row5->card_name;
$card_number = $row5->card_number;
$month = $row5->month;
$year = $row5->year;
$street = $row5->street;
$street2 = $row5->street2;
$city = $row5->city;
$state = $row5->state;
$postcode = $row5->postcode;
$nationality = $row5->nationality;
$phone = $row5->phone;
$email = $row5->email;
$cvm = $row5->cvm;
$issue_number = $row5->issue_number;
$start_month = $row5->start_month;
$start_year = $row5->start_year;
Взимаме чрез заявка всички данни на клиента от базата от данни.
//---------hehehe----------------------------------------------------------------------
//header('Content-Type: application/xml; charset=windows-1251');
$xml = " " . "\n";
$xml .= "" . "\n";
$xml .= "1.0" . "\n";
$xml .= "" . "\n";
$xml .= "OrderFormDoc" . "\n";
$xml .= "" . "\n";
$xml .= "apiwebsite" . "\n";
$xml .= "
gp962007
" . "\n";
if($currency_title12 == "GBP"){
$xml .= "20898" . "\n";
}
if($currency_title12 == "AUD"){
$xml .= "21218" . "\n";
}
if($currency_title12 == "CAD"){
$xml .= "21219" . "\n";
}
if($currency_title12 == "USD"){
$xml .= "21221" . "\n";
}
if($currency_title12 == "EUR"){
$xml .= "21220" . "\n";
}
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "
PaymentNoFraud
" . "\n";
$xml .= "
" . "\n";
$xml .= "" . "\n";
$xml .= "P" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "
" . "\n";
$xml .= "" . "\n";
$xml .= "$card_number" . "\n";
$xml .= "$month/$year" . "\n";
$xml .= "$cvm" . "\n";
$xml .= "1" . "\n";
if($issue_number){
$xml .= "$issue_number" . "\n";
}
if($start_month && $start_year){
$xml .= "$start_month/$start_year" . "\n";
}
$xml .= "" . "\n";
$xml .= "
" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "
" . "\n";
$xml .= "$first_name $last_name" . "\n";
$xml .= "$street" . "\n";
if($stret2){
$xml .= "$street2" . "\n";
}else{
$xml .= "" . "\n";
}
$xml .= "$city" . "\n";
if($state){
$xml .= "$state" . "\n";
}else{
$xml .= "" . "\n";
}
$xml .= "$city" . "\n";
$xml .= "$state" . "\n";
$xml .= "
$postcode
" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "
" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "Auth" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
if($currency_title12 == "GBP"){
$xml .= "$to_pay1" . "\n";
}
if($currency_title12 == "AUD"){
$xml .= "$to_pay1" . "\n";
}
if($currency_title12 == "CAD"){
$xml .= "$to_pay1" . "\n";
}
if($currency_title12 == "USD"){
$xml .= "$to_pay1" . "\n";
}
if($currency_title12 == "EUR"){
$xml .= "$to_pay1" . "\n";
}
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "" . "\n";
$xml .= "". "\n";
//---------------------------------------------------------------------
Попълваме XML документа с нужните ни данни преди да го изпратим до банковият сървар.
$url = 'https://www.secure-epayments.apixml.hsbc.com';
$user_agent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
Прибавяме на променливата URL адреса за транзацкия, това адрес на банковият сървар които е HTTPS.
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST,1);
Тук казваме, че трянзакцията ще използва метод POST за изпращане
curl_setopt($ch, CURLOPT_POSTFIELDS,$xml);
Тук даваме данните, които ще изпращаме т.е XML документа
curl_setopt($ch, CURLOPT_URL,$url);
Тук даваме адреса на които ще ги пращаме
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
Тук казваме какъв канал ще използваме т.е SSL или криптиран
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
Тук казваме какъв вид браоузер и система може да използваме
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
Тук казваме, че ще очакваме отговор
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // this line makes it work under https
Тук се проверява дали създаденият канал е SSL
$result=curl_exec ($ch);
На тази променлива се присвочва върнатият отговор
curl_close ($ch);
Тук транзакцията се затваря
За защита на данните сме използвали md5 алгоритъм за кеширане на данните и SSL връзки за осъществяване на разплащанията. MD5 създава 32 битов стринг които много трудно може да бъде разбит.