Электронный магазин на Java и XML




Глава 5. Оплата и подтверждение заказа


    Глава 5. Оплата и подтверждение заказа
    Глава 5. Оплата и подтверждение заказа В предыдущей главе мы показали, как в виртуальном магазине реализуется корзина покупателя. Теперь нам необходимо предоставить покупателю возможность фактичес...
    Процесс оплаты
    Процесс оплаты Для коммерческих web-сайтов, занимающихся розничной продажей, прием платежей через кредитные карты является общепринятой практикой. Вообще говоря, оплата по кредитной карте товаров,...
    Безопасность
    Безопасность Безопасность — очень важный фактор для любого коммерческого web-сайта. Чтобы гарантировать безопасность, нужно придерживаться определенных принципов. Следует определить все риски и ра...
    Доверие клиента
    Доверие клиента Если клиент не испытывает доверия к web-сайту, у него не возникнет желания передавать информацию, связанную с его кредитной картой. Между чтением информации на страницах электронно...
    Сбор информации о заказе
    Сбор информации о заказе Когда покупатель отобрал товары, которые он собирается приобрести, следующим этапом является подсчет стоимости покупки и выполнение заказа. Необходимо получить определенну...
    Класс Customerlnfo
    Класс Customerlnfo Класс Customerlnfo предназначен для сбора некоторой стандартной информации о покупателе. Имя покупателя и его адрес необходимы для того, чтобы ему можно было доставить заказ, а...
    Листинг 5.1. Класс Customerlnfo (Customerlnfo.java)
    Листинг 5.1. Класс Customerlnfo (Customerlnfo.java) package com.XmlEcomBook.Chap05; public class CustomerInfo { private String lastName; private String firstName; private String address1; private...
    Класс Creditlnfo
    Класс Creditlnfo В классе Creditlnfo содержится информация о кредитной карте клиента. Сюда входит тип кредитной карты, например Visa или MasterCard, ее номер и дата истечения срока действия. Все э...
    Листинг 5.2. Класс Crediditlnfo (Creditlnfo.java)
    Листинг 5.2. Класс Crediditlnfo (Creditlnfo.java) package com.XmlEcomBook.Chap05; public class CreditInfo extends Object { private String creditCardType; private String creditCardNumber; private S...
    Класс Fullfilment
    Класс Fullfilment В процесс выполнения заказа входит все, что должно быть сделано с товаром после оформления заказа. Обычно для этого нужно найти товар на складе, запаковать его и отправить клиент...
    Листинг 5.3. Класс Fulfilment (Fullfilment.java)
    Листинг 5.3. Класс Fulfilment (Fullfilment.java) package com.XmlEcomBook.Chap05; import java.util.Date; import java.util.StringTokenizer; public class Fulfillment { String shipper; //UPS, Fedex, U...
    Класс Authorization
    Класс Authorization Класс Authorization (листинг 5.4) используется для хранения данных, которые возвратил поставщик услуг по обработке. В нем имеются три поля: во-первых, булева переменная, указыв...
    Листинг 5.4. Класс Authorization (Authorization.java)
    Листинг 5.4. Класс Authorization (Authorization.java) package com.XmlEcomBook.Chap05; public class Authorization { private boolean approved = false; private String reason = Unknown; //reason for a...
    Класс Order
    Класс Order Класс Order служит в основном в качестве контейнера для всевозможных сведений, которые мы собираем при оформлении заказа. Сюда входит информация о клиенте, о доставке, номер кредитной...
    Листинг 5.5. Поля, конструктор...
    Листинг 5.5. Поля, конструктор и методы setXxx и getXxx для класса Order (Order.java) package com.XmlEcomBook.Chap05; import com.XmlEcomBook.catalog.CartItem; import java.util.*; import java.io.*;...
    Листинг 5.6. Методы для подсчета...
    Листинг 5.6. Методы для подсчета характеристик заказа как единого целого (Order.java) public double getTotalItemPrice() { double total = 0; Enumeration enum = items.elements(); while( enum.hasMore...
    Листинг 5.7. DTD для описания структуры заказа (order.dtd)
    Листинг 5.7. DTD для описания структуры заказа (order.dtd) !ELEMENT order (item*, customer_info, authorization, fulfillment ) !ATTLIST order id ID #REQUIRED date CDATA #REQUIRED !ELEMENT item (#PC...
    Листинг 5.8. Метод writeXML (Order.java)
    Листинг 5.8. Метод writeXML (Order.java) public void writeXML( Writer writer ) { try { writer.write( ?xml version='1.0' ? ); writer.write( !DOCTYPE order SYSTEM '.. + File.separator + order.dtd' )...
    Листинг 5.9. Метод getUniqueld (Order.java)
    Листинг 5.9. Метод getUniqueld (Order.java) synchronized private int getUniqueId() { int id; try { ObjectInputStream in = new ObjectInputStream( new FileInputStream( orderID.txt ) ); id = in.readI...
    Класс TestPaymentAuthorizer
    Класс TestPaymentAuthorizer Следующие классы, которые мы будем рассматривать, используются в процессе оформления заказа. Первый из них занимается проверкой данных о кредитной карте клиента. В этом...
    Листинг 5.10. Класс TestPaymentAuthorizer...
    Листинг 5.10. Класс TestPaymentAuthorizer (TestPaymentAuthorizer.java) public class TestPaymentAuthorizer { static public Authorization getAuthorization( Order order ) { Authorization authorizatio...
    Класс ShippingCalculator
    Класс ShippingCalculator Теперь нам нужен какой-нибудь способ подсчета стоимости доставки товара заказчику. Эта сумма зависит от нескольких факторов, главными из которых являются выбранная клиенто...
    Листинг 5.11. Начало кода класса...
    Листинг 5.11. Начало кода класса ShippingCalculator и его конструктора (ShippingCalculator.java) public class ShippingCalculator { Order order; public ShippingCalculator( Order setOrder ) { order...
    Класс Emailer
    Класс Emailer Класс Emailer используется для отправки электронных сообщений клиенту. Эти сообщения могут содержать подтверждение заказа или информацию о доставке. В этом классе имеются две статиче...
    Листинг 5.12. Начало кода класса Emailer (Emailer.java)
    Листинг 5.12. Начало кода класса Emailer (Emailer.java) package com.XmlEcomBook.Chap05; import java.util.*; import java.io.*; import javax.mail.*; import javax.mail.internet.*; public class Emaile...
    Листинг 5.13. Метод sendConfiramtion (Emailer.java)
    Листинг 5.13. Метод sendConfiramtion (Emailer.java) public static void sendConfirmation(Order order) { try { CustomerInfo cust = order.getCustomerInfo(); Message msg = getMessage( cust.getEmail()...
    Листинг 5.14. Метод sendShipped (Emailer.java)
    Листинг 5.14. Метод sendShipped (Emailer.java) public static void sendShipped(String email, String orderId ) { try { Message msg = getMessage( email ); msg.setSubject(Your XMLGifts.com Order has s...
    Листинг 5.15. Метод getMessage (Emailer.java)
    Листинг 5.15. Метод getMessage (Emailer.java) static Message getMessage( String toEmail ) throws MessagingException { Properties props = new Properties(); props.put(mail.smtp.host, host); Session...
    Страница Customerlnfo
    Страница Customerlnfo Теперь мы перейдем к классам, с помощью которых осуществляется получение всей информации от клиента и передача ее рассмотренным выше классам. В первую очередь — это HTML-стра...
    Листинг 5.16. Страница Customerlnfo (Customerlnfo.html)
    Листинг 5.16. Страница Customerlnfo (Customerlnfo.html) html head titleCustomer Info/title /head body form action=ShippingInfo.jsp p First Name:input name=firstName / Last Name:input name=lastName...
    JSP-страница Shippinglnfo
    JSP-страница Shippinglnfo После импорта необходимых классов для получения нового объекта класса Custo- merlnfo, связанного с текущим сеансом, используется элемент jsp:useBean. Затем свойства этого...
    Листинг 5.17. Начало кода Shippinglnfo...
    Листинг 5.17. Начало кода Shippinglnfo JSP (Shippinglnfo.jsp) %@ page import=com.XmlEcomBook.Chap05.*,java.util.* % jsp:useBean scope=session id=custInfo class=CustomerInfo / jsp:setProperty name=...
    Листинг 5.18. Код HTML, который...
    Листинг 5.18. Код HTML, который формируется в JSP-странице Shippinglnfo (Shippinglnfo.jsp) html head titleShipping Info/title /head body form action=CreditInfo.jsp Select a Shipper and Class:br /...
    JSP-страница Creditlnfo
    JSP-страница Creditlnfo Объект Shippinglnfo, связанный с определенным сеансом, создается в JSP-странице Creditlnfo. Информация о доставке, которая была введена в форму в JSP- странице Shippinglnfo...
    Листинг 5.19. Указание способа доставки (Creditlnfo.jsp)
    Листинг 5.19. Указание способа доставки (Creditlnfo.jsp) %@ page import=com.XmlEcomBook.Chap05.* % jsp:useBean scope=session id=shippingInfo class=Fulfillment / jsp:setProperty name=shippingInfo p...
    Листинг 5.20. Определение стоимости...
    Листинг 5.20. Определение стоимости доставки (Creditlnfo.jsp) jsp:useBean scope=session id=order class=Order / % order.setFulfillment( shippingInfo ); ShippingCalculator calc = new ShippingCalcula...
    Листинг 5.21. Код HTML, который...
    Листинг 5.21. Код HTML, который формируется в JSP-странице Creditlnfo (Creditlnfo.jsp) html headtitleCredit Card Information/title/head body Your order pricebr / table trtdItems/tdtd%=order.getTot...
    JSP-страница Confirmlnfo
    JSP-страница Confirmlnfo Первое, что мы делаем в JSP-странице Confirmlnfo, — это помещаем информацию, введенную в форму на JSP-странице Creditlnfo, в объект Creditlnfo. При этом используются элеме...
    Листинг 5.22. Запись данных кредитной...
    Листинг 5.22. Запись данных кредитной карты (Confirmlnfo.jsp) %@ page import=com.XmlEcomBook.Chap05.* % jsp:useBean scope=session id=creditInfo class=CreditInfo / jsp:setProperty name=creditInfo p...
    Листинг 5.23. Отображение информации...
    Листинг 5.23. Отображение информации для ее подтверждения клиентом (Confirmlnfo.jsp) html headtitleConfirm Info/title/head body jsp:useBean scope=session id=custInfo class=CustomerInfo / jsp:useBe...
    Сервлет SubmitOrder
    Сервлет SubmitOrder Когда подтвержденные клиентом данные (то есть JSP-страница Confirmlnfo) отправлены, необходимо послать поставщику услуг по обработке сведения, связанные с оплатой заказа. Это д...
    Листинг 5.24. Метод doGet сервлета...
    Листинг 5.24. Метод doGet сервлета SubmitOrder (SubmitOrder.java) import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import com.XmlEcomBook.Chap05.*; // Exp...
    Листинг 5.25. Метод writeOrder (SubmitOrder.java)
    Листинг 5.25. Метод writeOrder (SubmitOrder.java) private void writeOrder( Order order ) { try { Calendar calendar = new GregorianCalendar(); int day = calendar.get( Calendar.DAY_OF_MONTH ); int m...
    JSP-страница Approved
    JSP-страница Approved Эта страница вызывается из сервлета SubmitOrder, когда заказ получает подтверждение поставщика услуг по обработке. Эта простая страница включает в себя идентификатор заказа (...
    Листинг 5.26. JSP-страница Approved (Approved.jsp)
    Листинг 5.26. JSP-страница Approved (Approved.jsp) %@ page import=com.XmlEcomBook.Chap05.* % html headtitleApproved Order/title/head body jsp:useBean id=order scope=session class=Order / Your orde...
    JSP-страница Declined
    JSP-страница Declined JSP-страница Declined формируется, если по какой-либо причине кредитная карта клиента не прошла проверку поставщика. Страница генерирует сообщение, в котором указывается эта...
    Листинг 5.27. JSP-страница Declined (Declined.jsp)
    Листинг 5.27. JSP-страница Declined (Declined.jsp) %@ page import=com.XmlEcomBook.Chap05.* % html headtitleCredit Card Declined/title/head body jsp:useBean id=order scope=session class=Order / You...
    Обновление информации о доставке
    Обновление информации о доставке После того как клиент ввел и подтвердил информацию о заказе, отдел доставки электронного магазина должен иметь возможность просматривать эту информацию и обновлять...
    JSP-страница OrderDateSelector
    JSP-страница OrderDateSelector Простая JSP-страница OrderDateSelector (листинг 5.28) отображает форму с единственным полем ввода. В этом поле по умолчанию указана текущая дата, но пользователь (в...
    Листинг 5.28. JSP-страница OrderDateSelector...
    Листинг 5.28. JSP-страница OrderDateSelector (OrderDateSelector.jsp) %@ page import=java.util.* % html headtitle0rder Date Selector/title/head body % Calendar calendar = new GregorianCalendar(); i...
    JSP-страница SelectOrder
    JSP-страница SelectOrder JSP-страница SelectOredr (листинг 5.29) использует заранее определенную (стандартную) переменную request, чтобы получить введенную пользователем в JSP- страницу OredrDateS...
    Листинг 5.29. JSP-страница SelectOrder (SelectOrder.jsp)
    Листинг 5.29. JSP-страница SelectOrder (SelectOrder.jsp) %@ page import=java.io.* % html headtitleSelect Order/title/head body % String date = request.getParameter( date ); File dir = new File( Or...
    JSP-страница ShowOrder
    JSP-страница ShowOrder Эта страница отображает данные о заказе, который был выбран пользователем для просмотра. Для создания объектной модели документа задействуются выбранные с помощью описанной...
    Листинг 5.30. JSP-страница ShowOrder (ShowOrder.jsp)
    Листинг 5.30. JSP-страница ShowOrder (ShowOrder.jsp) %@ page import=javax.xml.parsers.*,java.util.*,java.io.*,org.w3c.dom.*, org.xml.sax.* % html headtitleOrder/title/head body % double price = 0....
    Листинг 5.31. Форма для ввода...
    Листинг 5.31. Форма для ввода данных о доставке (ShowOrder.jsp) form action=UpdateFulfillment.jsp input type=hidden name=dir value=%=dir% / input type=hidden name=file value=%=file% / input type=h...
    JSP-страница UpdateFullfilment
    JSP-страница UpdateFullfilment Последняя JSP-страница, которую мы исследуем в этой главе, отвечает за обновление значений номера отслеживания и даты отправления, введенных на странице ShowOrder. Н...
    Листинг 5.32. JSP-страница UpdateFullfilment...
    Листинг 5.32. JSP-страница UpdateFullfilment (UpdateFullfilment.jsp) %@ page import=java.io.*,com.XmlEcomBook.Chap05.* % html headtitleUpdate Complete/title/head body % String tracking = request.g...









Начало