// Assumption: // Product: T-Shirt // Quantity: 1 per purchase // Currency: USD // Price: 14.95 // Terminal number: as specified in configuration file // Merchant name, number: as specified in configuration file // Password file: as specified in configuration file // Acquirer: "FDC" // Slip: 1 per purchase // // Note: // If the terminal number and merchant number are changed in the middle, // things will go wrong. function PrintReceiptItem(label, val) { write("", label, "", val, "\n"); } function PrintReceipt(pay, desc) { write("

Thank you for shopping with us!.

"); write("
\n"); write("\n"); PrintReceiptItem("Date:", pay.eventTime); PrintReceiptItem("Merchant Reference:", pay.merchantReference); PrintReceiptItem("Authorization Code:", pay.authCode); PrintReceiptItem("Payment Service Data:", pay.paySvcData); PrintReceiptItem("AVS:", pay.avsResp); PrintReceiptItem("Description:", desc); PrintReceiptItem("Amount:", CentsToDollarStr(pay.amount)); write("
", "

Receipt of Purchase

\n"); write('

'); } function PrintFmtError(premsg, fmtmsg) { client.crErrno = 1; client.crMsg1 = premsg; client.crMsg2 = fmtmsg; redirect("error.html"); } function PrintError(premsg, info, postmsg) { client.crErrno = 2; client.crMsg1 = premsg; client.crMsg2 = info; client.crMsg3 = postmsg; redirect("error.html"); } function GetMerchantReference() { project.lock(); if (project.MerchantReference == null) project.MerchantReference = 0; project.MerchantReference = parseInt(project.MerchantReference) + 1; var merref = parseInt(project.MerchantReference); project.unlock(); return(merref); } function CentsToDollarStr(cents) { if (cents.length == 1) return("0.0"+cents); if (cents.length == 2) return("0."+cents); return(cents.substring(0, cents.length - 2) + "." + cents.substring(cents.length - 2, cents.length)); } function GenerateSlip(amount, currency, orderDesc, processor) { // // Create an initial slip object // slip = new Slip(request.cardNumber, request.cardExpYear + request.cardExpMonth, amount, currency); slip.billingStreet = request.billAddr1 + request.billAddr2; slip.billingZip = request.billZip; slip.cardType = request.cardType; slip.appendOrderDesc(orderDesc); // // Encode the slip // if (!slip.encode(processor)) { PrintFmtError("Failed to encode slip.", slip.getStatusMessage()); } // // Extract the encrypted slip in DER format // asciiDER = slip.getDER(); // // Recreate the slip from the extracted DER // slip2 = new Slip(asciiDER); if (slip2.bad()) { PrintFmtError("Failed to construct slip object from DER.", slip2.getStatusMessage()); } slip2.initMerchantOrderDesc(amount, currency); slip2.appendMerchantOrderDesc(orderDesc); return (slip2); } function CheckAVS(payevent) { var avsfail = 0; avs = payevent.avsResp; if (avs.substring(0, 1) == "N") { avsfail = 1; } if (avs.substring(1, 2) == "N") { avsfail = 2; } return (avsfail); } function Log(terminal, merchant, slip, processor, payevent, merref, currency, orderDesc, authGood, avsFail) { logFile = new File("/tmp/lpAuthOnly.log"); fileIsOpen = logFile.open("a"); if (fileIsOpen) { today = new Date(); logFile.write("Date: "); logFile.writeln(today); logFile.write("Merchant Reference: "); logFile.writeln(merref); logFile.write("Merchant: "); logFile.write(merchant.merchantNumber); logFile.write(" ("); logFile.write(merchant.name); logFile.writeln(")"); logFile.write("Terminal: "); logFile.writeln(terminal.terminalNumber); logFile.write("Name: "); logFile.writeln(request.billName); logFile.write("Address: "); logFile.writeln(request.billAddr1 + request.billAddr2); logFile.write("Zip: "); logFile.writeln(request.billZip); logFile.write("Card Type: "); logFile.writeln(request.cardType); logFile.write("Card Expiration Date: "); logFile.writeln(request.cardExpYear + request.cardExpMonth); logFile.write("Description: "); logFile.writeln(orderDesc); logFile.write("Amount: "); logFile.write(currency); logFile.writeln(CentsToDollarStr(payevent.amount)); logFile.write("Slip: "); logFile.writeln(slip.getDER()); logFile.write("\n"); if (authGood) { if (avsFail) { logFile.writeln("PURCHASE FAILED"); if (avsFail == 1) { logFile.writeln("Address mismatched."); } else { logFile.writeln("Zip code mismatched."); } logFile.write("\n\n"); } else { logFile.writeln("AUTHORIZATION APPROVED"); logFile.write("Event Time: "); logFile.writeln(payevent.eventTime); logFile.write("Authorization Code: "); logFile.writeln(payevent.authCode); logFile.write("Payment Service Data: "); logFile.writeln(payevent.paySvcData); logFile.write("AVS: "); logFile.writeln(payevent.avsResp); logFile.write("\n\n"); } } else { logFile.writeln("AUTHORIZATION FAILED"); logFile.writeln(processor.getStatusMessage()); logFile.write("\n\n"); } logFile.close(); } else { PrintError("Can't open log file ", logFile); } } // // main // registerLivePayment(); if (request.cardNumber.length && request.cardExpYear.length + request.cardExpMonth.length) { merchant = new Merchant(); terminal = new Terminal(); processor = new Processor("FDC"); if (processor.bad()) { PrintFmtError("Failed to construct processor", processor.getStatusMessage()); } // // Generate slip // amount = "1495"; currency = "USD"; orderDescription = "T-Shirt"; slip = GenerateSlip(amount, currency, orderDescription, processor); // // Create a payevent object // var merchantReference = GetMerchantReference(); payevent = new PayEvent(merchantReference); payevent.amount = amount; // // Authorize the transaction // var authGood = false; var avsFail = 0; if (processor.authorize(terminal, merchant, payevent, slip)) { authGood = true; avsFail = CheckAVS(payevent); } // // Log transaction to file // Log(terminal, merchant, slip, processor, payevent, merchantReference, currency, orderDescription, authGood, avsFail); if (authGood) { if (avsFail) { if (avsFail == 1) { PrintFmtError("Purchase Failed.", "Address mismatched."); } else { if (avsFail == 2) { PrintFmtError("Purchase Failed.", "Zip code mismatched."); } } } else { PrintReceipt(payevent, orderDescription); } } else { PrintFmtError("Credit Card Authorization Failed.", processor.getStatusMessage()); } } else { PrintError("Error in Purchase form
Please enter credit card number and expiration date"); }

Return Home