Донецкий техникум промышленной автоматики

Реальні проекти на PHP і MySQL. Основа інтернет-торгівлі - реалізація купівельної візки: Частина 4. Реалізація сценарію розрахунку з платежів

  1. Серія контенту:
  2. Цей контент є частиною серії: Реальні проекти на PHP і MySQL. Основа інтернет-торгівлі - реалізація...
  3. Малюнок 1.
  4. Скрипт, який реалізує платіж замовленого товару
  5. Малюнок 2.
  6. Ресурси для скачування

Реальні проекти на PHP і MySQL. Основа інтернет-торгівлі - реалізація купівельної візки

Серія контенту:

Цей контент є частиною # з серії # статей: Реальні проекти на PHP і MySQL. Основа інтернет-торгівлі - реалізація купівельної візки

https://www.ibm.com/developerworks/ru/library/?series_title_by=**auto**

Слідкуйте за виходом нових статей цієї серії.

Цей контент є частиною серії: Реальні проекти на PHP і MySQL. Основа інтернет-торгівлі - реалізація купівельної візки

Слідкуйте за виходом нових статей цієї серії.

В попередній статті були розглянуті основні технології по реалізації купівельної візки під проект багатофункціонального динамічного веб-сайту з використанням PHP і MySQL. У цій статті, четвертої частини циклу, будуть розглянуті технології, що застосовуються для створення сценарію розрахунку з платежів.

Після заповнення полів форми клієнтом при оформленні товару, що купується (цим закінчувалася стаття - третя частина циклу) виникає необхідність в збереженні цієї інформації в базі даних. Ініціація таких дій відбувається при вихове з функції, код якої наведено нижче:

function insert_order ($ order_details) {// Витягти детальну інформацію про замовлення і помістити її в змінні extract ($ order_details); // Встановити адресу доставки рівним поштовою адресою if (! $ Ship_name &&! $ Ship_address &&! $ Ship_city &&! $ Ship_state &&! $ Ship_zip &&! $ Ship_country) {$ ship_name = $ name; $ Ship_address = $ address; $ Ship_city = $ city; $ Ship_state = $ state; $ Ship_zip = $ zip; $ Ship_country = $ country; } $ Conn = db_connect (); // Вставка замовлення повинна виконуватися у вигляді транзакції, // тому необхідно відключити autocommit $ conn-> autocommit (FALSE); // Вставити поштову адресу клієнта $ query = "select customerid from customers where name = '$ name' and address = '$ address' and city = '$ city' and state = '$ state' and zip = '$ zip' and country = '$ country' "; $ Result = $ conn-> query ($ query); if ($ result-> num_rows> 0) {$ customer = $ result-> fetch_object (); $ Customerid = $ customer-> customerid; } Else {$ query = "insert into customers values ​​( '', '$ name', '$ address', '$ city', '$ state', '$ zip', '$ country')"; $ Result = $ conn-> query ($ query); if (! $ result) return false; } $ Customerid = $ conn-> insert_id; $ Date = date ( 'Ym-d'); $ Query = "insert into orders values ​​( '', $ customerid,". $ _ SESSION [ 'total_price']. ", '$ Date', 'PARTIAL', '$ ship_name', '$ ship_address', '$ ship_city' , '$ ship_state', '$ ship_zip', '$ ship_country') "; $ Result = $ conn-> query ($ query); if (! $ result) return false; $ Query = "select orderid from orders where customerid = $ customerid and amount>". $ _ SESSION [ 'total_price']. "-. 001 and amount <". $ _ SESSION [ 'total_price']. "+. 001 and date = '$ date' and order_status = 'PARTIAL' and ship_name = '$ ship_name' and ship_address = '$ ship_address' and ship_city = '$ ship_city' and ship_state = '$ ship_state' and ship_zip = '$ ship_zip' and ship_country = '$ ship_country ' "; $ Result = $ conn-> query ($ query); if ($ result-> num_rows> 0) {$ order = $ result-> fetch_object (); $ Orderid = $ order-> orderid; } Else return false; // Вставити кожну книгу з числа замовлених foreach ($ _ SESSION [ 'cart'] as $ isbn => $ quantity) {$ detail = get_book_details ($ isbn); $ Query = "delete from order_items where orderid = '$ orderid' and isbn = '$ isbn'"; $ Result = $ conn-> query ($ query); $ Query = "insert into order_items values ​​( '$ orderid', '$ isbn',". $ Detail [ 'price']. ", $ Quantity)"; $ Result = $ conn-> query ($ query); if (! $ result) return false; } // кінець транзакції $ conn-> commit (); $ Conn-> autocommit (TRUE); return $ orderid; }

важливо відзначити, що різні вставки оформлені як транзакції, що починаються з оператора

$ Conn-> autocommit (FALSE);

і закінчуються операторами

// кінець транзакції $ conn-> commit (); $ Conn-> autocommit (TRUE);

Після створення з'єднання з MySQL включається режим автозбереження транзакцій autocommit. Це гарантує збереження результатів виконання операторів MySQL. Такий режим не підходить для серії послідовно взаємопов'язаних SQL-операторів у вигляді єдиної транзакції.

Після цього визначається вартість доставки за адресою клієнта, яка виводиться на екран за допомогою функції display_shipping. Вона обчислює вартість доставки, завжди повертаючи значення 20 $. Це звичайно надуманий варіант, - в реальному сайті доведеться надати клієнту можливість введення даних за способом доставки на різні адреси і певним чином вираховувати реальну вартість доставки.

Потім виводиться форма для введення клієнтом кредитної картки і елементи, що знаходяться в кошику покупця (див. Рис.1):

Малюнок 1.
function display_card_form ($ name) {// Виводить форму, яка запитує відомості про кредитну картку?> <table border = 0 width = '100%' cellspacing = 0> <form action = 'process.php' method = 'post'> < tr> <th colspan = 2 bgcolor = "# cccccc"> Відомості про кредитну картку </ th> </ tr> <tr> <td> Вид </ td> <td> <select name = 'card_type'> <option > VISA <option> MasterCard <option> American Express </ select> </ td> </ tr> <tr> <td> Номер </ td> <td> <input type = 'text' name = 'card_number' value = "" maxlength = 16 size = 40> </ td> </ tr> <tr> <td> AMEX-код (якщо необхідний) </ td> <td> <input type = 'text' name = 'amex_code' value = "" maxlength = 4 size = 4> </ td> </ tr> <tr> <td> Дата закінчення терміну дії </ td> <td> Місяць <select name = 'card_month'> <option> 01 < option> 02 <option> 03 <option> 04 <option> 05 <option> 06 <option> 07 <option> 08 <option> 09 <option> 10 <option> 11 <option> 12 </ select> Рік <s elect name = 'card_year'> <option> 00 <option> 01 <option> 02 <option> 03 <option> 04 <option> 05 <option> 06 <option> 07 <option> 08 <option> 09 <option> 10 </ select> </ td> </ tr> <tr> <td> власник картки </ td> <td> <input type = 'text' name = 'card_name' value = "<? php echo $ name; ?> "Maxlength = 40 size = 40> </ td> </ tr> <tr> <td colspan = 2 align = 'center'> <b> Будь ласка, клацніть на кнопці" Purchase "для того, щоб підтвердити покупку, або на кнопці "Continue Shopping" для продовження покупок. &lt;/ b> <? php display_form_button ( 'purchase', 'Придбати вбрання');?&gt; </ td> </ tr> </ table> <? php}

Карта American Express і називається AmEx.

function display_cart ($ cart, $ change = true, $ images = 1) {// Виводить елементи, що знаходяться в купівельної візку. // Додатково отримує параметр $ change, що дозволяє (true) // або забороняє (false) внесення змін. // Додатково отримує параметр $ images, що дозволяє (true) // або забороняє (false) висновок зображень товарів. echo '<table border = "0" width = "100%" cellspacing = "0"> <form action = "show_cart.php" method = "post"> <tr> <th colspan = "'. (1 + $ images). ' "bgcolor =" # cccccc "> Товар </ th> <th bgcolor =" # cccccc "> Ціна </ th> <th bgcolor =" # cccccc "> Кількість </ th> <th bgcolor =" #cccccc "> Всього </ th> </ tr> '; // Показати кожен елемент у вигляді рядка таблиці foreach ($ cart as $ isbn => $ qty) {$ book = get_book_details ($ isbn); echo '<tr>'; if ($ images == true) {echo '<td align = "left">'; if (file_exists ( "images / $ isbn.jpg")) {$ size = GetImageSize ( 'images /'.$ isbn.'. jpg '); if ($ size [0]> 0 && $ size [1]> 0) {echo '<img src = "images /'.$ isbn.'. jpg" border = 0 '; echo 'width ='. $ Size [0] / 3. ' height = '. $ size [1] / 3. '>'; }} Else echo '& nbsp;'; echo '</ td>'; } Echo '<td align = "left">'; echo '<a href="show_book.php?isbn='.$isbn.'">'. $ book [ 'title']. '</a> by'. $ Book [ 'author']; echo '</ td> <td align = "center"> $'. number_format ($ book [ 'price'], 2); echo '</ td> <td align = "center">'; // Якщо дозволені зміни, уявити кількості в текстових полях введення if ($ change == true) echo "<input type = 'text' name = \" $ isbn \ "value = \" $ qty \ "size = \" 3 \ ">"; else echo $ qty; echo '</ td> <td align = "center"> $'. number_format ($ book [ 'price'] * $ qty, 2). "</ Td> </ tr> \ n"; } // Вивести рядок загальної кількості і суми замовлення echo "<tr> <th colspan =". (2 + $ images). "Bgcolor = \" # cccccc \ "> & nbsp; </ td> <th align = \" center \ "bgcolor = \" # cccccc \ ">". $ _ SESSION [ 'items'] . "</ th> <th align = center bgcolor = \" # cccccc \ "> \ $". number_format ($ _ SESSION [ 'total_price'], 2). '</ Th> </ tr>'; // Вивести кнопку збереження змін if ($ change == true) {echo '<tr> <td colspan = "'. (2 + $ images). '"> & Nbsp; </ td> <td align = "center" > <input type = "hidden" name = "save" value = "true"> <input type = "image" src = "images / save-changes.gif" border = "0" alt = "Зберегти зміни"> < / td> <td> & nbsp; </ td> </ tr> '; } Echo '</ form> </ table>'; }

Тут виводиться форма для запиту настановних даних про користувача:

function display_checkout_form () {// Виводить форму, яка запитує ПІБ і адресу?> <br /> <table border = 0 width = '100%' cellspacing = 0> <form action = 'purchase.php' method = 'post' > <tr> <th colspan = 2 bgcolor = '# cccccc'> Інформація про вас </ th> </ tr> <tr> <td> ПІБ </ td> <td> <input type = 'text' name = 'name' value = "" maxlength = 40 size = 40> </ td> </ tr> <tr> <td> Адреса </ td> <td> <input type = 'text' name = 'address' value = "" maxlength = 40 size = 40> </ td> </ tr> <tr> <td> Місто / село </ td> <td> <input type = 'text' name = 'city' value = "" maxlength = 20 size = 40> </ td> </ tr> <tr> <td> Область </ td> <td> <input type = 'text' name = 'state' value = "" maxlength = 20 size = 40 > </ td> </ tr> <tr> <td> Поштовий індекс </ td> <td> <input type = 'text' name = 'zip' value = "" maxlength = 10 size = 40> </ td > </ tr> <tr> <td> Країна </ td> <td> <input type = 'text' name = 'country' value = "" maxlength = 20 size = 40> </ td> </ tr> <tr> <th colspan = 2 bgcolor = '# cccccc'> Адреса для доставки (не заповнюється поля, якщо збігається з зазначеним вище) </ th> </ tr> <tr > <td> ПІБ </ td> <td> <input type = 'text' name = 'ship_name' value = "" maxlength = 40 size = 40> </ td> </ tr> <tr> <td> Адреса </ td> <td> <input type = 'text' name = 'ship_address' value = "" maxlength = 40 size = 40> </ td> </ tr> <tr> <td> Місто / село </ td > <td> <input type = 'text' name = 'ship_city' value = "" maxlength = 20 size = 40> </ td> </ tr> <tr> <td> Область </ td> <td> < input type = 'text' name = 'ship_state' value = "" maxlength = 20 size = 40> </ td> </ tr> <tr> <td> Поштовий індекс </ td> <td> <input type = ' text 'name =' ship_zip 'value = "" maxlength = 10 size = 40> </ td> </ tr> <tr> <td> Країна </ td> <td> <input type =' text 'name =' ship_country 'value = "" maxlength = 20 size = 40> </ td> </ tr> <tr> <td colspan = 2 align =' center '> <b> Будь ласка, клацніть на кнопці "Purchase" для того, щоб підтвердити покупку, або на кнопці "Continue Shopping" для продовження покупок. &lt;/ b> <? php display_form_button ( 'purchase', 'Придбати вбрання'); ?&gt; </ Td> </ tr> </ form> </ table> <hr /> <? Php}

і при натисканні на кнопку «Purchase» здійснюється платіж.

Скрипт, який реалізує платіж замовленого товару

<? Php // Включити наш набір функцій require ( 'book_sc_fns.php'); // Для купівельної візки необхідно запустити сеанс session_start (); do_html_header ( 'Остаточний розрахунок'); // Створити короткі імена змінних $ card_type = $ _POST [ 'card_type']; $ Card_number = $ _POST [ 'card_number']; $ Card_month = $ _POST [ 'card_month']; $ Card_year = $ _POST [ 'card_year']; $ Card_name = $ _POST [ 'card_name']; if ($ _ SESSION [ 'cart'] && $ card_type && $ card_number && $ card_month && $ card_year && $ card_name) {// Вивести візок без зображень товару і не дозволяючи зміни display_cart ($ _ SESSION [ 'cart'], false, 0); display_shipping (calculate_shipping_cost ()); if (process_card ($ _ POST)) {// Очистити купівельну візок session_destroy (); echo 'Дякую за те, що скористалися нашим сайтом для здійснення покупок. Ваше замовлення розміщений. '; display_button ( 'index.php', 'continue-shopping', 'Продовжити покупки'); } Else {echo 'Неможливо обробити вашу кредитну картку.'; echo 'Будь ласка, зв'яжіться з видала їх організацією або повторіть введення.'; display_button ( 'purchase.php', 'back', 'Назад'); }} Else {echo 'Ви заповнили не всі поля. Будь ласка, спробуйте ще раз. <Hr /> '; display_button ( 'purchase.php', 'back', 'Назад'); } Do_html_footer (); ?>

Дані обробляються відповідно до кредитною карткою клієнта. У разі вдалого завершення цього процесу клієнтський сеанс знищується. В даному випадку функція обробки даних кредитної картки просто повертає значення true. Це теж ідеальний варіант, якого не повинно бути в реальному житті онлайн - магазину. Спочатку необхідно передбачити набір перевірок на легітимність. Наприклад, перевіряти такі речі:

Магнітна смуга (може бути відсутнім).

На магнітній смузі знаходяться 1, 2 або 3 доріжки з даними.

На першій шпальті (фахівці називають її «track 1») записаний PAN карти і ім'я її власника (якщо карта іменна). Ім'я власника (якщо воно є) написано також на лицьовій стороні картки.

PAN (Primary Account Number) - номер карти. «Стандартна» його довжина - 16 цифр. Але в реальності він може бути від 7 до 19 цифр. Остання цифра в номері карти - перевірочна.

На другій смузі карти знаходиться головна інформація ( «track 2»). Вона складається з PAN (номера карти), Expiration Date (дата, по яку включно карта дійсна), Service Code (сервісний код для роботи програми терміналу або банкомату з картою), Pin Verification Key Indicator, PVV (Pin Verification Value) і CVV1 / CVC1.

Expiration Date - термін дії карти. Він також написаний на її лицьовій частині після слів «VALID THRU» або «GOOD THRU». PVV і Pin Verification Key Indicator - специфічні параметри, які використовуються для перевірки pin-коду.

Потім можна переходити до ініціалізації платежу. Крім цього, в роботі реального сайту потрібно буде прийняти рішення про те, який механізм транзакцій буде використовуватися.

При правильній роботі і заповнювання всіх полів вид повинен бути як на рис. 2.

Малюнок 2.

висновки

У статті на реальних прикладах розглянуто питання реалізації онлайн-каталогу товарів під проект інтернет-магазину засобами PHP, MySQL і веб-сервера Apache. Детально розглянуто макет єдиної торгової системи, що дозволяє обслуговувати клієнтів в режимі реального часу.

Послідовно розкриваються механізми роботи скриптів, генеруючих стартову сторінку інтернет-магазину з категоріями і книгами, відсортованими за цими категоріями. Показана робота функцій, що підтримують реалізацію купівельної візки з відстеженням товарів. При цьому всі функції зібрані в відповідні бібліотеки. Результат їх виконання наочно представлений в IDE EasyEclipse for LAMP, а на наведених малюнках приведена візуалізація їх роботи. Чітка організація наведеного коду і пояснення до нього дають можливість легко підтримувати працюють програми, видозмінювати їх і при необхідності, переносити на будь-які інші платформи.

Наведені скрипти забезпечені коментарями і мають описову частину, достатню для швидкого засвоєння та подальшої адаптації до існуючих реальним завданням.

На цьому огляд модулів, що реалізують концепцію купівельної візки і платежів по товарах, завершується. В останній, п'ятій частині циклу буде описана реалізація інтерфейсу адміністрування інтернет-магазину.

Ресурси для скачування

Схожі теми

  • Реальні проекти на PHP і MySQL. Основа інтернет-торгівлі - реалізація купівельної візки. Частина 1 .
  • Реальні проекти на PHP і MySQL. Основа інтернет-торгівлі - реалізація купівельної візки. Частина 2 .
  • Реальні проекти на PHP і MySQL. Основа інтернет-торгівлі - реалізація купівельної візки. частина 3 .
  • Реальні проекти на PHP і MySQL. Основа інтернет-торгівлі - реалізація купівельної візки. частина 4 .
  • Реальні проекти на PHP і MySQL. Основа інтернет-торгівлі - реалізація купівельної візки. частина 5 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. Частина 1 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. Частина 2 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 3 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 4 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 5 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 6 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 7 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 8 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 9 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 10 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 11 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 12 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 13 .
  • Програмування з використанням PHP і MySQL в розробці Web-додатків. частина 14 .
  • Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР). Частина 1 .
  • Реальні веб-проекти на PHP і MySQL. Розробка диспетчера списків розсилки (ДСР). Частина 2 .

Підпишіть мене на повідомлення до коментарів

Com/developerworks/ru/library/?
Php echo $ name; ?
Lt;/ b> <?
Php display_form_button ( 'purchase', 'Придбати вбрання');?
Gt; </ td> </ tr> </ table> <?
Php?
Lt;/ b> <?
Php display_form_button ( 'purchase', 'Придбати вбрання'); ?
Gt; </ Td> </ tr> </ form> </ table> <hr /> <?