1 package com.dotmarketing.util; 2 3 import java.io.StringReader ; 4 5 import javax.xml.parsers.DocumentBuilder ; 6 import javax.xml.parsers.DocumentBuilderFactory ; 7 8 import lp.txn.JLinkPointTransaction; 9 10 import org.w3c.dom.Document ; 11 import org.w3c.dom.NodeList ; 12 import org.xml.sax.InputSource ; 13 14 import com.dotmarketing.util.Config; 15 import com.dotmarketing.util.Logger; 16 import com.dotmarketing.util.UtilMethods; 17 18 336 public class CreditCardProcessor { 337 338 372 373 public static CreditCardProcessorResponse processCreditCardOrderInstitutes (long orderId, String poNumber, boolean taxExempt, String clientIPAddress, 374 Float subtotal, Float tax, Float shipping, float total, 375 String cardNumber, int cardExpMonth, int cardExpYear, String cvv, 376 String billingName, String billingCompany, 377 String billingAddress1, String billingAddress2, String billingCity, 378 String billingState, String billingZip, String billingCountry, 379 String billingPhone, String billingFax, String billingEmail, 380 String orderComments, String orderReferred, String orderType) throws CreditCardProcessorException { 381 382 return processCreditCardOrder (orderId, poNumber, taxExempt, clientIPAddress, 383 subtotal, tax, shipping, total, 384 cardNumber, cardExpMonth, cardExpYear, cvv, 385 billingName, billingCompany,billingAddress1, billingAddress2, billingCity, 386 billingState, billingZip, billingCountry, billingPhone, billingFax, billingEmail, 387 orderComments, orderReferred,Config.getStringProperty("LP_EVENTS_STORE_ID"), orderType); 388 } 389 390 public static CreditCardProcessorResponse processCreditCardOrderProducts (long orderId, String poNumber, boolean taxExempt, String clientIPAddress, 391 Float subtotal, Float tax, Float shipping, float total, 392 String cardNumber, int cardExpMonth, int cardExpYear, String cvv, 393 String billingName, String billingCompany, 394 String billingAddress1, String billingAddress2, String billingCity, 395 String billingState, String billingZip, String billingCountry, 396 String billingPhone, String billingFax, String billingEmail, 397 String orderComments, String orderReferred,String orderType) throws CreditCardProcessorException { 398 399 return processCreditCardOrder (orderId, poNumber, taxExempt, clientIPAddress, 400 subtotal, tax, shipping, total, 401 cardNumber, cardExpMonth, cardExpYear, cvv, 402 billingName, billingCompany,billingAddress1, billingAddress2, billingCity, 403 billingState, billingZip, billingCountry, billingPhone, billingFax, billingEmail, 404 orderComments, orderReferred,Config.getStringProperty("LP_ECOMM_STORE_ID"), orderType); 405 } 406 407 public static CreditCardProcessorResponse processCreditCardOrderWebForms (long orderId, 408 String clientIPAddress,Float shipping, float total, 409 String cardNumber, int cardExpMonth, int cardExpYear, String cvv, 410 String billingName, String billingAddress1, String billingAddress2, String billingCity, 411 String billingState, String billingZip, String billingCountry, 412 String billingPhone, String billingFax, String billingEmail, String orderType) throws CreditCardProcessorException { 413 414 return processCreditCardOrder (orderId, "", false, clientIPAddress, 415 null, null, shipping, total, 416 cardNumber, cardExpMonth, cardExpYear, cvv, 417 billingName,"",billingAddress1, billingAddress2, billingCity, 418 billingState, billingZip, billingCountry, billingPhone, billingFax, billingEmail, 419 "", "",Config.getStringProperty("LP_ECOMM_STORE_ID"), orderType); 420 } 421 422 private static CreditCardProcessorResponse processCreditCardOrder (long orderId, String poNumber, boolean taxExempt, String clientIPAddress, 423 Float subtotal, Float tax, Float shipping, float total, 424 String cardNumber, int cardExpMonth, int cardExpYear, String cvv, 425 String billingName, String billingCompany, 426 String billingAddress1, String billingAddress2, String billingCity, 427 String billingState, String billingZip, String billingCountry, 428 String billingPhone, String billingFax, String billingEmail, 429 String orderComments, String orderReferred, String storeId, String orderType) throws CreditCardProcessorException { 430 431 JLinkPointTransaction txn = new JLinkPointTransaction(); 433 String sClientCertPath = "./" + storeId + ".p12"; 434 435 txn.setClientCertificatePath(sClientCertPath); 436 txn.setPassword(Config.getStringProperty("LP_CLIENT_CERT_PASS")); 437 txn.setHost(Config.getStringProperty("LP_HOST")); 438 txn.setPort(Config.getIntProperty("LP_PORT")); 439 440 StringBuffer orderXml = new StringBuffer (); 442 443 orderXml.append("<order>\n"); 444 445 orderXml.append(" <merchantinfo>\n"); 446 orderXml.append(" <configfile>"+ storeId + "</configfile>\n"); 447 orderXml.append(" </merchantinfo>\n"); 448 449 if (UtilMethods.isSet(orderType)) { 450 orderXml.append(" <orderoptions>\n"); 452 orderXml.append(" <ordertype>"+orderType+"</ordertype>\n"); 453 orderXml.append(" <result>"+Config.getStringProperty("LP_ORDERS_RESULT")+"</result>\n"); 454 orderXml.append(" </orderoptions>\n"); 455 } 456 else { 457 orderXml.append(" <orderoptions>\n"); 458 orderXml.append(" <ordertype>"+Config.getStringProperty("LP_ORDER_TYPE")+"</ordertype>\n"); 459 orderXml.append(" <result>"+Config.getStringProperty("LP_ORDERS_RESULT")+"</result>\n"); 460 orderXml.append(" </orderoptions>\n"); 461 } 462 463 orderXml.append(" <transactiondetails>\n"); 464 orderXml.append(" <transactionorigin>ECI</transactionorigin>\n"); 465 orderXml.append(" <oid>"+orderId+"</oid>\n"); 466 if (UtilMethods.isSet(poNumber)) { 467 orderXml.append(" <ponumber>"+poNumber+"</ponumber>\n"); 468 } 469 orderXml.append(" <taxexempt>" + (taxExempt?"Y":"N") + "</taxexempt>\n"); 470 orderXml.append(" <terminaltype>UNSPECIFIED</terminaltype>\n"); 471 if (UtilMethods.isSet(clientIPAddress)) { 472 orderXml.append(" <ip>"+clientIPAddress+"</ip>\n"); 473 } 474 orderXml.append(" </transactiondetails>\n"); 475 476 477 orderXml.append(" <payment>\n"); 478 if (UtilMethods.isSet(subtotal)) { 479 orderXml.append(" <subtotal>"+UtilMethods.dollarFormat(subtotal)+"</subtotal>\n"); 480 } 481 if (UtilMethods.isSet(tax)) { 482 orderXml.append(" <tax>0"+UtilMethods.dollarFormat(tax)+"</tax>\n"); 483 orderXml.append(" <vattax>0.0</vattax>\n"); 484 } 485 if (UtilMethods.isSet(shipping)) { 486 orderXml.append(" <shipping>"+UtilMethods.dollarFormat(shipping)+"</shipping>\n"); 487 } 488 orderXml.append(" <chargetotal>"+UtilMethods.dollarFormat(total)+"</chargetotal>\n"); 489 orderXml.append(" </payment>\n"); 490 491 492 orderXml.append(" <creditcard>\n"); 493 if (UtilMethods.isSet(cardNumber)) { 494 orderXml.append(" <cardnumber>" + cardNumber + "</cardnumber>\n"); 495 } else { 496 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "Card Number Required"); 497 } 498 if (cardExpMonth >= 1 && cardExpMonth <= 12) { 499 orderXml.append(" <cardexpmonth>" + cardExpMonth + "</cardexpmonth>\n"); 500 } else { 501 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "Invalid Card Expiration Month (Valid range 1-12)"); 502 } 503 if (cardExpYear >= 0 && cardExpYear <= 99) 504 orderXml.append(" <cardexpyear>" + cardExpYear + "</cardexpyear>\n"); 505 else if (cardExpYear >= 2000 && cardExpYear <= 2099) { 506 cardExpYear = cardExpYear - 2000; 507 orderXml.append(" <cardexpyear>" + cardExpYear + "</cardexpyear>\n"); 508 } else { 509 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "Invalid Card Expiration Year (Ranges Valid 0-99 or 2000-2099)"); 510 } 511 if (UtilMethods.isSet(cvv)) { 512 orderXml.append(" <cvmvalue>" + cvv + "</cvmvalue>\n"); 513 orderXml.append(" <cvmindicator>provided</cvmindicator>\n"); 514 } else { 515 } 517 orderXml.append(" </creditcard>\n"); 518 519 orderXml.append(" <billing>\n"); 520 if (UtilMethods.isSet(billingAddress1)) { 521 String [] addressSplitted = billingAddress1.split(" "); 522 if (addressSplitted.length > 0) { 523 try { 524 int addrnum = Integer.parseInt(addressSplitted[0]); 525 orderXml.append(" <addrnum>" + addrnum + "</addrnum>\n"); 526 } catch (Exception e) { 527 } 528 } 529 } else { 530 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingAddress1 Value Required"); 531 } 532 if (UtilMethods.isSet(billingZip)) { 533 orderXml.append(" <zip>" + billingZip + "</zip>\n"); 534 } else { 535 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingZip Value Required"); 536 } 537 if (UtilMethods.isSet(billingName)) { 538 orderXml.append(" <name>" + billingName + "</name>\n"); 539 } else { 540 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingName Value Required"); 541 } 542 if (UtilMethods.isSet(billingCompany)) { 543 orderXml.append(" <company>" + billingCompany + "</company>\n"); 544 } 545 orderXml.append(" <address1>" + billingAddress1 + "</address1>\n"); 546 if (UtilMethods.isSet(billingAddress2)) { 547 orderXml.append(" <address2>" + billingAddress2 + "</address2>\n"); 548 } 549 if (UtilMethods.isSet(billingCity)) { 550 orderXml.append(" <city>" + billingCity + "</city>\n"); 551 } else { 552 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingCity Value Required"); 553 } 554 if (UtilMethods.isSet(billingState)) { 555 orderXml.append(" <state>" + billingState + "</state>\n"); 556 } else { 557 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingState Value Required"); 558 } 559 if (UtilMethods.isSet(billingCountry)) { 560 orderXml.append(" <country>" + billingCountry + "</country>\n"); 561 } else { 562 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingCountry Value Required"); 563 } 564 if (UtilMethods.isSet(billingPhone)) { 565 orderXml.append(" <phone>" + billingPhone + "</phone>\n"); 566 } 567 if (UtilMethods.isSet(billingFax)) { 568 orderXml.append(" <fax>" + billingFax + "</fax>\n"); 569 } 570 orderXml.append(" </billing>\n"); 574 575 if (UtilMethods.isSet(orderComments) || UtilMethods.isSet(orderReferred)) { 576 orderXml.append(" <notes>\n"); 577 if (UtilMethods.isSet(orderComments)) 578 orderXml.append(" <comments>" + orderComments + "</comments>\n"); 579 if (UtilMethods.isSet(orderReferred)) 580 orderXml.append(" <referred>" + orderReferred + "</referred>\n"); 581 582 orderXml.append(" </notes>\n"); 583 } 584 585 orderXml.append("</order>\n"); 586 587 if (Config.getBooleanProperty("LP_LOG_ORDERS")) 588 Logger.info(CreditCardProcessor.class, "Placing an order: \n" + orderXml); 589 590 try { 591 String sResponse = "<response>" + txn.send(orderXml.toString()) + "</response>"; 592 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 593 DocumentBuilder builder = factory.newDocumentBuilder(); 594 Document document = builder.parse( new InputSource ( new StringReader (sResponse)) ); 595 596 String approved = ""; 597 String avs = ""; 598 String ordernum = ""; 599 String error = ""; 600 String code = ""; 601 String message = ""; 602 String time = ""; 603 String ref = ""; 604 String tdate = ""; 605 String score = ""; 606 607 NodeList nl = document.getElementsByTagName("r_avs"); 608 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 609 avs = nl.item(0).getFirstChild().getNodeValue(); 610 } 611 nl = document.getElementsByTagName("r_ordernum"); 612 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 613 ordernum = nl.item(0).getFirstChild().getNodeValue(); 614 } 615 nl = document.getElementsByTagName("r_error"); 616 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 617 error = nl.item(0).getFirstChild().getNodeValue(); 618 } 619 nl = document.getElementsByTagName("r_approved"); 620 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 621 approved = nl.item(0).getFirstChild().getNodeValue(); 622 } 623 nl = document.getElementsByTagName("r_code"); 624 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 625 code = nl.item(0).getFirstChild().getNodeValue(); 626 } 627 nl = document.getElementsByTagName("r_message"); 628 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 629 message = nl.item(0).getFirstChild().getNodeValue(); 630 } 631 nl = document.getElementsByTagName("r_time"); 632 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 633 time = nl.item(0).getFirstChild().getNodeValue(); 634 } 635 nl = document.getElementsByTagName("r_ref"); 636 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 637 ref = nl.item(0).getFirstChild().getNodeValue(); 638 } 639 nl = document.getElementsByTagName("r_tdate"); 640 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 641 tdate = nl.item(0).getFirstChild().getNodeValue(); 642 } 643 nl = document.getElementsByTagName("r_score"); 644 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 645 score = nl.item(0).getFirstChild().getNodeValue(); 646 } 647 648 CreditCardProcessorResponse orderResponse = new CreditCardProcessorResponse (approved, avs, code, error, message, ordernum, ref, score, tdate, time); 649 650 if (Config.getBooleanProperty("LP_LOG_ORDERS_RESPONSE")) 651 Logger.info(CreditCardProcessor.class, "Order Response: " + orderResponse.toString()); 652 653 return orderResponse; 654 655 } catch (Exception e) { 656 throw new CreditCardProcessorException (CreditCardProcessorException.COMMUNICATION_ERROR, e.getMessage(), e); 657 } 658 659 } 660 661 public static CreditCardProcessorResponse processCreditCardOrderProducts (long orderId, String poNumber, boolean taxExempt, String clientIPAddress, 662 Float subtotal, Float tax, Float shipping, float total, 663 String cardNumber, int cardExpMonth, int cardExpYear, String cvv, 664 String billingName, String billingCompany, 665 String billingAddress1, String billingAddress2, String billingCity, 666 String billingState, String billingZip, String billingCountry, 667 String billingPhone, String billingFax, String billingEmail, 668 String orderComments, String orderReferred) throws CreditCardProcessorException { 669 670 return processCreditCardOrder (orderId, poNumber, taxExempt, clientIPAddress, 671 subtotal, tax, shipping, total, 672 cardNumber, cardExpMonth, cardExpYear, cvv, 673 billingName, billingCompany,billingAddress1, billingAddress2, billingCity, 674 billingState, billingZip, billingCountry, billingPhone, billingFax, billingEmail, 675 orderComments, orderReferred,Config.getStringProperty("LP_ECOMM_STORE_ID")); 676 } 677 678 public static CreditCardProcessorResponse processCreditCardOrderInstitutes (long orderId, String poNumber, boolean taxExempt, String clientIPAddress, 679 Float subtotal, Float tax, Float shipping, float total, 680 String cardNumber, int cardExpMonth, int cardExpYear, String cvv, 681 String billingName, String billingCompany, 682 String billingAddress1, String billingAddress2, String billingCity, 683 String billingState, String billingZip, String billingCountry, 684 String billingPhone, String billingFax, String billingEmail, 685 String orderComments, String orderReferred) throws CreditCardProcessorException { 686 687 return processCreditCardOrder (orderId, poNumber, taxExempt, clientIPAddress, 688 subtotal, tax, shipping, total, 689 cardNumber, cardExpMonth, cardExpYear, cvv, 690 billingName, billingCompany,billingAddress1, billingAddress2, billingCity, 691 billingState, billingZip, billingCountry, billingPhone, billingFax, billingEmail, 692 orderComments, orderReferred,Config.getStringProperty("LP_EVENTS_STORE_ID")); 693 } 694 695 696 public static CreditCardProcessorResponse processCreditCardOrderWebForms (long orderId, 697 String clientIPAddress,Float shipping, float total, 698 String cardNumber, int cardExpMonth, int cardExpYear, String cvv, 699 String billingName, String billingAddress1, String billingAddress2, String billingCity, 700 String billingState, String billingZip, String billingCountry, 701 String billingPhone, String billingFax, String billingEmail) throws CreditCardProcessorException { 702 703 return processCreditCardOrder (orderId, "", false, clientIPAddress, 704 null, null, shipping, total, 705 cardNumber, cardExpMonth, cardExpYear, cvv, 706 billingName,"",billingAddress1, billingAddress2, billingCity, 707 billingState, billingZip, billingCountry, billingPhone, billingFax, billingEmail, 708 "", "",Config.getStringProperty("LP_ECOMM_STORE_ID")); 709 } 710 711 private static CreditCardProcessorResponse processCreditCardOrder (long orderId, String poNumber, boolean taxExempt, String clientIPAddress, 712 Float subtotal, Float tax, Float shipping, float total, 713 String cardNumber, int cardExpMonth, int cardExpYear, String cvv, 714 String billingName, String billingCompany, 715 String billingAddress1, String billingAddress2, String billingCity, 716 String billingState, String billingZip, String billingCountry, 717 String billingPhone, String billingFax, String billingEmail, 718 String orderComments, String orderReferred, String storeId) throws CreditCardProcessorException { 719 720 JLinkPointTransaction txn = new JLinkPointTransaction(); 722 String sClientCertPath = "./" + storeId + ".p12"; 723 724 txn.setClientCertificatePath(sClientCertPath); 725 txn.setPassword(Config.getStringProperty("LP_CLIENT_CERT_PASS")); 726 txn.setHost(Config.getStringProperty("LP_HOST")); 727 txn.setPort(Config.getIntProperty("LP_PORT")); 728 729 StringBuffer orderXml = new StringBuffer (); 731 732 orderXml.append("<order>\n"); 733 734 orderXml.append(" <merchantinfo>\n"); 735 orderXml.append(" <configfile>"+ storeId + "</configfile>\n"); 736 orderXml.append(" </merchantinfo>\n"); 737 738 orderXml.append(" <orderoptions>\n"); 739 orderXml.append(" <ordertype>"+Config.getStringProperty("LP_ORDER_TYPE")+"</ordertype>\n"); 740 orderXml.append(" <result>"+Config.getStringProperty("LP_ORDERS_RESULT")+"</result>\n"); 741 orderXml.append(" </orderoptions>\n"); 742 743 orderXml.append(" <transactiondetails>\n"); 744 orderXml.append(" <transactionorigin>ECI</transactionorigin>\n"); 745 orderXml.append(" <oid>"+orderId+"</oid>\n"); 746 if (UtilMethods.isSet(poNumber)) { 747 orderXml.append(" <ponumber>"+poNumber+"</ponumber>\n"); 748 } 749 orderXml.append(" <taxexempt>" + (taxExempt?"Y":"N") + "</taxexempt>\n"); 750 orderXml.append(" <terminaltype>UNSPECIFIED</terminaltype>\n"); 751 if (UtilMethods.isSet(clientIPAddress)) { 752 orderXml.append(" <ip>"+clientIPAddress+"</ip>\n"); 753 } 754 orderXml.append(" </transactiondetails>\n"); 755 756 757 orderXml.append(" <payment>\n"); 758 if (UtilMethods.isSet(subtotal)) { 759 orderXml.append(" <subtotal>"+UtilMethods.dollarFormat(subtotal)+"</subtotal>\n"); 760 } 761 if (UtilMethods.isSet(tax)) { 762 orderXml.append(" <tax>0"+UtilMethods.dollarFormat(tax)+"</tax>\n"); 763 orderXml.append(" <vattax>0.0</vattax>\n"); 764 } 765 if (UtilMethods.isSet(shipping)) { 766 orderXml.append(" <shipping>"+UtilMethods.dollarFormat(shipping)+"</shipping>\n"); 767 } 768 orderXml.append(" <chargetotal>"+UtilMethods.dollarFormat(total)+"</chargetotal>\n"); 769 orderXml.append(" </payment>\n"); 770 771 772 orderXml.append(" <creditcard>\n"); 773 if (UtilMethods.isSet(cardNumber)) { 774 cardNumber = cardNumber.replaceAll(" ",""); 776 cardNumber = cardNumber.replaceAll("-",""); 777 orderXml.append(" <cardnumber>" + cardNumber + "</cardnumber>\n"); 778 } else { 779 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "Card Number Required"); 780 } 781 if (cardExpMonth >= 1 && cardExpMonth <= 12) { 782 orderXml.append(" <cardexpmonth>" + cardExpMonth + "</cardexpmonth>\n"); 783 } else { 784 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "Invalid Card Expiration Month (Valid range 1-12)"); 785 } 786 if (cardExpYear >= 0 && cardExpYear <= 99) 787 orderXml.append(" <cardexpyear>" + cardExpYear + "</cardexpyear>\n"); 788 else if (cardExpYear >= 2000 && cardExpYear <= 2099) { 789 cardExpYear = cardExpYear - 2000; 790 orderXml.append(" <cardexpyear>" + cardExpYear + "</cardexpyear>\n"); 791 } else { 792 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "Invalid Card Expiration Year (Ranges Valid 0-99 or 2000-2099)"); 793 } 794 if (UtilMethods.isSet(cvv)) { 795 orderXml.append(" <cvmvalue>" + cvv + "</cvmvalue>\n"); 796 orderXml.append(" <cvmindicator>provided</cvmindicator>\n"); 797 } else { 798 } 800 orderXml.append(" </creditcard>\n"); 801 802 orderXml.append(" <billing>\n"); 803 if (UtilMethods.isSet(billingAddress1)) { 804 String [] addressSplitted = billingAddress1.split(" "); 805 if (addressSplitted.length > 0) { 806 try { 807 int addrnum = Integer.parseInt(addressSplitted[0]); 808 orderXml.append(" <addrnum>" + addrnum + "</addrnum>\n"); 809 } catch (Exception e) { 810 } 811 } 812 } else { 813 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingAddress1 Value Required"); 814 } 815 if (UtilMethods.isSet(billingZip)) { 816 orderXml.append(" <zip>" + billingZip + "</zip>\n"); 817 } else { 818 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingZip Value Required"); 819 } 820 if (UtilMethods.isSet(billingName)) { 821 orderXml.append(" <name>" + billingName + "</name>\n"); 822 } else { 823 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingName Value Required"); 824 } 825 if (UtilMethods.isSet(billingCompany)) { 826 orderXml.append(" <company>" + billingCompany + "</company>\n"); 827 } 828 orderXml.append(" <address1>" + billingAddress1 + "</address1>\n"); 829 if (UtilMethods.isSet(billingAddress2)) { 830 orderXml.append(" <address2>" + billingAddress2 + "</address2>\n"); 831 } 832 if (UtilMethods.isSet(billingCity)) { 833 orderXml.append(" <city>" + billingCity + "</city>\n"); 834 } else { 835 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingCity Value Required"); 836 } 837 if (UtilMethods.isSet(billingState)) { 838 orderXml.append(" <state>" + billingState + "</state>\n"); 839 } else { 840 throw new CreditCardProcessorException (CreditCardProcessorException.DATA_MISSING, "billingState Value Required"); 841 } 842 if (UtilMethods.isSet(billingCountry)) { 843 orderXml.append(" <country>" + billingCountry + "</country>\n"); 844 } else { 845 orderXml.append(" <country>" + Config.getStringProperty("US_COUNTRY_CODE") + "</country>\n"); 846 } 847 if (UtilMethods.isSet(billingPhone)) { 848 orderXml.append(" <phone>" + billingPhone + "</phone>\n"); 849 } 850 if (UtilMethods.isSet(billingFax)) { 851 orderXml.append(" <fax>" + billingFax + "</fax>\n"); 852 } 853 orderXml.append(" </billing>\n"); 857 858 if (UtilMethods.isSet(orderComments) || UtilMethods.isSet(orderReferred)) { 859 orderXml.append(" <notes>\n"); 860 if (UtilMethods.isSet(orderComments)) 861 orderXml.append(" <comments>" + orderComments + "</comments>\n"); 862 if (UtilMethods.isSet(orderReferred)) 863 orderXml.append(" <referred>" + orderReferred + "</referred>\n"); 864 865 orderXml.append(" </notes>\n"); 866 } 867 868 orderXml.append("</order>\n"); 869 870 if (Config.getBooleanProperty("LP_LOG_ORDERS")) 871 Logger.info(CreditCardProcessor.class, "Placing an order: \n" + orderXml); 872 873 try { 874 String sResponse = "<response>" + txn.send(orderXml.toString()) + "</response>"; 875 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 876 DocumentBuilder builder = factory.newDocumentBuilder(); 877 Document document = builder.parse( new InputSource ( new StringReader (sResponse)) ); 878 879 Logger.info(CreditCardProcessor.class, "Linkpoint Response: \n" + sResponse); 880 881 String approved = ""; 882 String avs = ""; 883 String ordernum = ""; 884 String error = ""; 885 String code = ""; 886 String message = ""; 887 String time = ""; 888 String ref = ""; 889 String tdate = ""; 890 String score = ""; 891 892 NodeList nl = document.getElementsByTagName("r_avs"); 893 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 894 avs = nl.item(0).getFirstChild().getNodeValue(); 895 Logger.info(CreditCardProcessor.class, "Linkpoint Response avs: \n" + avs); 896 } 897 nl = document.getElementsByTagName("r_ordernum"); 898 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 899 ordernum = nl.item(0).getFirstChild().getNodeValue(); 900 } 901 nl = document.getElementsByTagName("r_error"); 902 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 903 error = nl.item(0).getFirstChild().getNodeValue(); 904 } 905 nl = document.getElementsByTagName("r_approved"); 906 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 907 approved = nl.item(0).getFirstChild().getNodeValue(); 908 Logger.info(CreditCardProcessor.class, "Linkpoint Response approved: \n" + approved); 909 } 910 nl = document.getElementsByTagName("r_code"); 911 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 912 code = nl.item(0).getFirstChild().getNodeValue(); 913 } 914 nl = document.getElementsByTagName("r_message"); 915 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 916 message = nl.item(0).getFirstChild().getNodeValue(); 917 } 918 nl = document.getElementsByTagName("r_time"); 919 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 920 time = nl.item(0).getFirstChild().getNodeValue(); 921 } 922 nl = document.getElementsByTagName("r_ref"); 923 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 924 ref = nl.item(0).getFirstChild().getNodeValue(); 925 } 926 nl = document.getElementsByTagName("r_tdate"); 927 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 928 tdate = nl.item(0).getFirstChild().getNodeValue(); 929 } 930 nl = document.getElementsByTagName("r_score"); 931 if (nl.item(0) != null && nl.item(0).getFirstChild() != null) { 932 score = nl.item(0).getFirstChild().getNodeValue(); 933 } 934 935 CreditCardProcessorResponse orderResponse = new CreditCardProcessorResponse (approved, avs, code, error, message, ordernum, ref, score, tdate, time); 936 937 if (Config.getBooleanProperty("LP_LOG_ORDERS_RESPONSE")) 938 Logger.info(CreditCardProcessor.class, "Order Response: " + orderResponse.toString()); 939 940 941 return orderResponse; 942 943 } catch (Exception e) { 944 Logger.info(CreditCardProcessor.class, "CreditCardProcessorException=" + e.getMessage()); 945 throw new CreditCardProcessorException (CreditCardProcessorException.COMMUNICATION_ERROR, e.getMessage(), e); 946 } 947 948 } 949 950 } 951
| Popular Tags
|