Бакалавърска програма Информатика Бакалавърска теза на тема Web базирана хотелска система за резервации Разработил : Александър Тодоров Факултетен Номер : F26193


Сигурност на електронните разплащания с карти ( HSBC Bank )



страница8/10
Дата06.09.2016
Размер1.56 Mb.
#8377
ТипПрограма
1   2   3   4   5   6   7   8   9   10

5.4. Сигурност на електронните разплащания с карти ( HSBC Bank )
Разплащателна идентификационна система е един продукт на HSBC за интернет разплащане, който позволява да участвате в разплащания с Visa или MasterCard карти, като разделя представянето от интеграцията и удобството му е че е свързан със схемата за защита на Интернет транзакциите.

Ние използвахме тази система и затова е нужно да я съчетаеме с нашето API. Като за начало трябва да бъде завършена цялата интеграция на API и затова използвахме документацията за XML API интеграцията на банка HSBC.

Клиента разглежда сайта, избира си продукт или продукти за закупуване и след като клиента е готов за плащане, трябва да въведе картовите си данни в защитената страница и да се изпрати request до сървъра.

Разплащателна идентификационна система се свърже с нужната банката за идентифициране на клиента. Веднъж идентифицирането да бъде завършено, ние получаваме POST метод на нашият сайт който покава идентификацията как да процедираме нататък.



Параметрите които могат да бъдат изпратени, чрез нашият POST метод до разплащателната система са следните. Като цяло клиента трябва да направи този POST чрез своя браузър.
Таблица 2 търговските параметри за HTTPS POST


POST параметри

Описание

Задължително

CardExpiration

Дата на валидност на кредитната карта. Четири знака, YYMM формат. Като пример, ако валидността на картата е през Ноември 2006 година, стойността ще е 0611

ДА

CardholderPan

Номера на кредитната карта. Трябва да бъде между 13 и 19 цифри, без допълнителни знаци и разстояния.

ДА

CcpaClientId

Това е уникален низ, които идентифицира търговеца със системата. Принципен формат UK12345678CUR01 ( 15 символа )

ДА

CurrencyExponent

Валута 1 символ, числен, който е дефиниран като ISO 4217

ДА

MD

Информация за търговеца. Информацията се използва за идентифициране на сесията на клиента. Незадължително поле. Ако е използва бинарна информация, тя трябва да бъде base64 кодирана. Максимум 500 символа.

НЕ

PurchaseAmount

Стойност на транзакцията. Тази стойност определя две неща реалната сума която трябва да бъде изпратена от плащащия и форматираната сума която се показва на плащащия. Максимум 20 символа, от който 12 могат да бъдат цифри. Задължително включено валутният символ ( като $ или други ). Валути който нямат разделител се таксуват като цяла сума. Например японска йена.

ДА

PurchaseAmountRaw

Стойност на транзакцията с по – маловажни стойности. Например, ако транзакцията е $1,234.56 тогава, стойността 123456. Максимум 12 символа.

ДА

PurchaseCurrency

Валута на транзакцията. 3 цифрови символа, който са дефинирани с ISO 4217. Например, UK стерлинги е представена с стойност 826.

ДА

PurchaseDesc

Описание на покупката. Максимум 125 символа.

НЕ

ResultUrl

URL е адреса на който трябва да бъде препратен купувача след идентифицирането му. Максимум 125 символа. Трябва да бъде подсигурена страница HTTPS

ДА



Таблица 3 върнатите стойност от POST
Щом идентификационния процес бъде завършен, разплащателната система връща информация до сайта, чрез HTTPS POST до браузера на клиента.


POST параметри

Описание

Стойност

Authentication

Protocol


Идентификационен протокол който се използва за транзакцията.

0-3-D Secure

CardBrand

Вид който се използва за транзакцията.

Visa или MasterCard

CAVV

Доказателство, че транзакцията е автентична. Тази стойност се връща само при напълно изпълнена транзакция. Тази стойност трябва да бъде изпратена до сървъра за идентификация. Ако се използва 3D secure транзакция стойността трябва да съдържа 28 символа, кодирани в bas64 формат.

Точно 28 символа

CAVVHex

Идентично с CAVV стойността с изключение на стойността която съдържа 40 hex криптирани символа за 3D secure.

Точно 40 символа

CAVVAlgorithm

Показва алгоритъма които се използва за CAVV

Единична цифра от

0 – 3


CcpaClientId

Уникални символи които идентифицират търговеца с разплащателната система. Принципно са в следният формат UK12345678CUR01, който се предоставят чрез HTTPS POST

Принципно 15 символа максимум 36 символа

CcpaResultsCode

Резултат на идентификацията

Стойност между 0 и 14

ECI

Electronic Commerce Indicator това е стойност която се изпраща до сървъра. Тази стойност се връща само когато е осъществена връзка.

За идентификация на Visa ECI може да съдържа една от следните стойности

05 – идентификацията на Visa е успешна

06 – търговеца кандидатства за идентификация

07 – идентификацията на Visa не е успешна




IreqCode

Идентифицира не правилно запитване

Стойност между 50 – 99

IreqDetail

Изписва елементите който са довели до грешка

Буквени символи

IreqVendorCode

Допълнителен специфичен текст

Буквени символи

MD

Информация за търговеца. Информацията се използва за идентифициране на сесията на клиента. Параметърът присъства само ако е изпратен с POST метода

Максимум 500 символа

PurchaseAmountRaw

Стойност на транзакцията

Максимум 12 символа

PurchaseCurrency

Валута на транзакцията

3 цифрени стойности по ISO 4217

PurchaseDate

Дата на покупката във формат YYYYMMDD HH:MM:SS

YYYY – година

ММ – месец

DD – ден

HH – час


MM – минути

SS - секунди



TransactionStatus

Показва дали плащането е успешно

1 символ „Y”, “A”, “N” или „U”

XID

Показва какво трябва да бъде изпратено до сървъра по време на идентификацията.

Точно 28 символа

XIDHex

Показа XID стойността, освен ако не съдържа 40 hex криптирани символа

Точно 48 символа

Идентификацията на купувача трябва да бъде изпратена само веднъж с поръчката която е направил. Всякакви следващи идентификации трябва да съдържат различна информация от тази за картата. Следваща идентификация за разплащане, не е защитена с юридическа отговорност от MasterCard или Visa идентификационна програма. Началната и следващата транзакция използват същатата информация като предишната транзакция.


5.4.1. Интеграция на XML API интерфейс ( HSBC Bank )
Тук представя функционалността на транзакция с кредитни карти която използва XML API интерфейса.

XML API интерфейса не се нуждае от инсталация на какъвто и да е вид код или програма предоставена от банка HSBC. Ако сървъра на търговеца е конфигуриран да работи с XML документи и има възможността да ги изпраща не е нужно да има допълнителни настройки.

Следващите стъпки описват по важните действия, които трябва да се направят, за да функционира XML API интерфейса.

Програмата на клиента създава xml документ и го попълва с нужните данни. След като документа е напълно попълнен, програмата на осъществява защитена връзка с API сървъра и поства документа към него. Програмата на клиента получава друг документ през същата връзка. Сървъра извършва всички нужни сметки и връща документ с резултата на клиентската програма. Клиента получава информацията и ако трябва си я записва.


5.4.1.1. Системни изисквания за XML API интерфейс ( HSBC Bank )
XML API интерфейсът е създаден като независима платформа. Не е нужно никакъв допълнителен софтуер, за да функционира.

XML API интерфейсът изисква SSL връзка между търговският сървър и API сървъра и XML документа трябва да бъде изпратен с POST през тази връзка.


5.4.1.2. Описание на XML API документа ( HSBC Bank )

Има съставена схема от API, която кореспондира с XML документите.


Таблица 4 описание на XML API документ


API термин

XML термин

Описание

Document

Document

Document е съдържателя на цяла йерархия и организация на информацията. Има директен план между API и XML документа

Record

Example




Element

Example




Record e съдържател които групира информацията в логическа схема. XML елемента е определен от тагове и може да съдържа други елементи.

Field and Value

Example


Name = XML_store

Element with Element text Example

XML_store

Field се приемат като атрибути на документа. Всяко поле съдържа определена стойност. Те се приемат като бележки към документа. Те не могат да съдържат допълнителни полета.

Element е елемент със неговите тагове.

Например: XML_store


Data Type

Example 1

ClientId="3"
Example 2

Total= 3530



Attribute and Value pairs

Example 1 – 1 Attribute



3
Example 2 – 1 Attribute

3530


Всички полета в записа или документа са с специфична информация. Вида на информацията описва полето.

API информацията е следната:

DateTime S32

ExpirationDate StartDate

Money String

Numeric


XML информацията:

Locale=”value”

Currency=”value”

Precision=”value”

xml:space=”value”

Като се използват тези дефиниции може да се създаде XML документ. Този документ съдържа user секция. Тези секции са еднакви и значат едно и също за HBCS програмата.


API Document
User // Record User

Name = XML_store //Field Name with value XML_store

Password = xml //Field Password with value XML

ClientId = 208 //Field ClientId with value 208 and DataType of S32


XML Document
User
with no element text -->

XML_store Name
with text XML_store -->

xml
Password with text XML -->



208

User
-->
Следващия документ показва минимум полетата който са задължителни за транзакцията да бъде осъществена покупката.
Standard API Document
EngineDocList

DocVersion = 1.0

EngineDoc

ContentType = OrderFormDoc

User

Name = JDoe // User’s name



Password = MyPassword // User’s password

ClientId = 3 // User’s entity

Instructions

Pipeline = Payment

OrderFormDoc

Mode =P

Consumer


PaymentMech

Type = CreditCard

CreditCard



Number = 4111111111111111

Expires = 12/07 // MM/YY format

Transaction

Type = PreAuth

CurrentTotals

Totals

Total = 3530 // Amount in pence

XML документа
Equivalent XML API Document
Фрагмент 1




1.0



OrderFormDoc



3

JDoe

MyPassword







PaymentNoFraud








P


CreditCard



4111111111111111

Locale="826">12/07








PreAuth





3530












5.4.1.3. Изглед на XML документа, които ползва нашият сайт
Фрагмент 2




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 битов стринг които много трудно може да бъде разбит.


Сподели с приятели:
1   2   3   4   5   6   7   8   9   10




©obuch.info 2024
отнасят до администрацията

    Начална страница