/* * CallbackAction.java * * Created on March 1, 2007, 1:30 PM */ package com.fxcm.store.actions.frontend; import com.fxcm.store.dbao.AffiliateDBAO; import com.fxcm.store.dbao.OrderDBAO; import com.fxcm.store.dbao.ScheduleDBAO; import com.fxcm.store.entity.Affiliate; import com.fxcm.store.entity.Order; import com.fxcm.store.entity.Schedule; import com.fxcm.store.notify.*; import java.util.Date; import java.util.Properties; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForward; /** * * @author gharding * @version */ public class CallbackAction extends Action { /* forward name="success" path="" */ private final static String SUCCESS = "success"; private final static String FAIL = "fail"; private String mailserver; /** * This is the action called from the Struts framework. * @param mapping The ActionMapping used to select this instance. * @param form The optional ActionForm bean for this request. * @param request The HTTP Request we are processing. * @param response The HTTP Response we are processing. * @throws java.lang.Exception * @return */ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { System.out.println((new Date()) + ": Callback called"); String approved = request.getParameter("szIsApproved"); if (approved == null || !approved.equals("1")) { // error messages String displaymsg = request.getParameter("szAuthorizationDeclinedMessage"); String returnCode = request.getParameter("szReturnCode"); System.err.println("Failed order: ("+returnCode+") "+displaymsg); return mapping.findForward(FAIL); } String amount = request.getParameter("szTransactionAmount"); Double dAmount = Double.parseDouble(amount) / 100; String name = request.getParameter("sjname"); String email = request.getParameter("email"); String phone = request.getParameter("shiptophone"); String address1 = request.getParameter("streetaddress"); String address2 = request.getParameter("streetaddress2"); String city = request.getParameter("city"); String state = request.getParameter("streetaddress"); String zipcode = request.getParameter("zipcode"); // {affiliate id}s{schedule id}r{random string} String ordernumber = request.getParameter("szOrderNumber"); int affId = Integer.parseInt(ordernumber.substring(0,ordernumber.indexOf('s'))); int schedId = Integer.parseInt(ordernumber.substring(ordernumber.indexOf('s') + 1, ordernumber.indexOf('r'))); Schedule schedule = (new ScheduleDBAO()).get(schedId); Affiliate affiliate = (new AffiliateDBAO()).get(affId); Order order = new Order(); order.setFirstname(name); order.setAddress1(address1); order.setAddress2(address2); order.setCity(city); order.setState(state); order.setEmail(email); order.setAmount(dAmount); order.setSchedule(schedule); order.setAffiliate(affiliate); order.setOrderTimestamp(new Date()); order.setComplete(true); Notifier n2 = new CopsNotifierImpl(); try { n2.notify(order); } catch (NotifierException e) { String status = order.getStatus(); if (status == null) status = ""; status += e.getMessage()+"\n"; order.setStatus(status); order.setComplete(false); } Notifier n1 = new EloquaNotifierImpl(); try { n1.notify(order); } catch (NotifierException e) { String status = order.getStatus(); status += e.getMessage()+"\n"; order.setStatus(status); } String mailserver = request.getSession().getServletContext().getInitParameter("mailserver"); String emails = request.getSession().getServletContext().getInitParameter("emails"); String body = "Order " + (order.getComplete() ? "completed" : "failed") + " for:\n" + order.getFirstname() + "\n" + order.getEmail() + "\n" + "Course ID: "+order.getSchedule().getProduct().getCourseId()+"\n" + "Date: "+order.getSchedule().getDate().toString(); send(mailserver, "orders@fxpowercourse.com", emails, (order.getComplete() ? "Order complete" : "COPS reg. failed"), body); System.out.println("Sent email to: "+emails+" from "+mailserver); (new OrderDBAO()).save(order); System.out.println((new Date()) + ": Callback completed (STATUS: "+ (order.getComplete()? "COMPLETE" : "FAIL")); return mapping.findForward(SUCCESS); } private synchronized void send(String mailserver, String from, String to, String subject, String body) { Properties props = new Properties(); props.setProperty("mail.smtp.host", mailserver); final MimeMessage message = new MimeMessage(Session.getDefaultInstance(props)); try { message.setSender(new InternetAddress(from)); InternetAddress iTo = new InternetAddress(to); message.addRecipient(Message.RecipientType.TO, iTo); message.setSubject(subject); message.setText(body); new Thread() { public void run() { try { Transport.send(message); } catch (Exception e) { e.printStackTrace(); System.err.println("Cannot send email"); } } }.start(); } catch (Exception e) { e.printStackTrace(); System.err.println("Cannot set email props"); } } }