--- /dev/null
+<?php
+/**
+ * The AuthorizeNet PHP SDK. Include this file in your project.
+ *
+ * @package AuthorizeNet
+ */
+require dirname(__FILE__) . '/lib/shared/AuthorizeNetRequest.php';
+require dirname(__FILE__) . '/lib/shared/AuthorizeNetTypes.php';
+require dirname(__FILE__) . '/lib/shared/AuthorizeNetXMLResponse.php';
+require dirname(__FILE__) . '/lib/shared/AuthorizeNetResponse.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetAIM.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetARB.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetCIM.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetSIM.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetDPM.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetTD.php';
+require dirname(__FILE__) . '/lib/AuthorizeNetCP.php';
+
+if (class_exists("SoapClient")) {
+ require dirname(__FILE__) . '/lib/AuthorizeNetSOAP.php';
+}
+/**
+ * Exception class for AuthorizeNet PHP SDK.
+ *
+ * @package AuthorizeNet
+ */
+class AuthorizeNetException extends Exception
+{
+}
\ No newline at end of file
--- /dev/null
+By:
+ Authorize.Net
+ http://developer.authorize.net
+ http://community.developer.authorize.net
+
+License:
+ See License.pdf
+
+About:
+ A PHP library for working with all Authorize.Net APIs.
+
+Files:
+ - AuthorizeNet.php -> Includes all classes. Include this file in your project.
+ - lib/AuthorizeNetAIM.php -> AIM API.
+ - lib/AuthorizeNetARB.php -> ARB API.
+ - lib/AuthorizeNetCIM.php -> CIM API.
+ - lib/AuthorizeNetSIM.php -> SIM API.
+ - lib/AuthorizeNetTD.php -> Reporting API.
+ - lib/AuthorizeNetCP.php -> Card Present API.
+ - lib/AuthorizeNetDPM.php -> Direct Post Method Helpers.
+ - lib/AuthorizeNetSOAP.php -> Class to assist with using the SOAP API.
+ - lib/shared/AuthorizeNetRequest.php -> Class to connect to AuthorizeNet.
+ - lib/shared/AuthorizeNetTypes.php -> Classes for AuthorizeNet Datatypes.
+ - lib/shared/AuthorizeNetResponse.php -> Class to parse AuthorizeNet NVP Responses.
+ - lib/shared/AuthorizeNetXMLResponse.php -> Class to parse AuthorizeNet XML Responses.
+ - lib/ssl/cert.pem -> The AuthorizeNet Certificate bundle.
+ - tests/ -> Tests & examples for each of the API methods.
+ - README -> This file.
+ - README.html -> HTML version of this file.
+
+Requirements:
+ - cURL PHP Extension
+ - PHP 5.2+
+ - An Authorize.Net Merchant Account or Test Account. You can get a
+ free test account at http://developer.authorize.net/testaccount/
+
+Install:
+ - Include the 'AuthorizeNet.php' file in your application.
+ - Use your desired API.
+
+Usage Examples:
+ See below for basic usage examples. View the tests/ folder for more examples of each API.
+
+AuthorizeNetAIM.php Quick Usage Example:
+ <?php
+ require_once 'anet_php_sdk/AuthorizeNet.php';
+ define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+ define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+ define("AUTHORIZENET_SANDBOX", true);
+ $sale = new AuthorizeNetAIM;
+ $sale->amount = "5.99";
+ $sale->card_num = '6011000000000012';
+ $sale->exp_date = '04/15';
+ $response = $sale->authorizeAndCapture();
+ if ($response->approved) {
+ $transaction_id = $response->transaction_id;
+ }
+ ?>
+
+AuthorizeNetAIM.php Advanced Usage Example:
+ <?php
+ require_once 'anet_php_sdk/AuthorizeNet.php';
+ define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+ define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+ define("AUTHORIZENET_SANDBOX", true);
+ $auth = new AuthorizeNetAIM;
+ $auth->amount = "45.00";
+
+ // Use eCheck:
+ $auth->setECheck(
+ '121042882',
+ '123456789123',
+ 'CHECKING',
+ 'Bank of Earth',
+ 'Jane Doe',
+ 'WEB'
+ );
+
+ // Set multiple line items:
+ $auth->addLineItem('item1', 'Golf tees', 'Blue tees', '2', '5.00', 'N');
+ $auth->addLineItem('item2', 'Golf shirt', 'XL', '1', '40.00', 'N');
+
+ // Set Invoice Number:
+ $auth->invoice_num = time();
+
+ // Set a Merchant Defined Field:
+ $auth->setCustomField("entrance_source", "Search Engine");
+
+ // Authorize Only:
+ $response = $auth->authorizeOnly();
+
+ if ($response->approved) {
+ $auth_code = $response->transaction_id;
+
+ // Now capture:
+ $capture = new AuthorizeNetAIM;
+ $capture_response = $capture->priorAuthCapture($auth_code);
+
+ // Now void:
+ $void = new AuthorizeNetAIM;
+ $void_response = $void->void($capture_response->transaction_id);
+ }
+ ?>
+
+AuthorizeNetARB.php Usage Example:
+ <?php
+ require_once 'anet_php_sdk/AuthorizeNet.php';
+ define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+ define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+ $subscription = new AuthorizeNet_Subscription;
+ $subscription->name = "PHP Monthly Magazine";
+ $subscription->intervalLength = "1";
+ $subscription->intervalUnit = "months";
+ $subscription->startDate = "2011-03-12";
+ $subscription->totalOccurrences = "12";
+ $subscription->amount = "12.99");
+ $subscription->creditCardCardNumber = "6011000000000012";
+ $subscription->creditCardExpirationDate= "2018-10";
+ $subscription->creditCardCardCode = "123";
+ $subscription->billToFirstName = "Rasmus";
+ $subscription->billToLastName = "Doe";
+
+ // Create the subscription.
+ $request = new AuthorizeNetARB;
+ $response = $request->createSubscription($subscription);
+ $subscription_id = $response->getSubscriptionId();
+ ?>
+
+AuthorizeNetCIM.php Usage Example:
+ <?php
+ require_once 'anet_php_sdk/AuthorizeNet.php';
+ define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+ define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+ $request = new AuthorizeNetCIM;
+ // Create new customer profile
+ $customerProfile = new AuthorizeNetCustomer;
+ $customerProfile->description = "Description of customer";
+ $customerProfile->merchantCustomerId= time();
+ $customerProfile->email = "test@domain.com";
+ $response = $request->createCustomerProfile($customerProfile);
+ if ($response->isOk()) {
+ $customerProfileId = $response->getCustomerProfileId();
+ }
+ ?>
+
+AuthorizeNetSIM.php Usage Example:
+ <?php
+ require_once 'anet_php_sdk/AuthorizeNet.php';
+ define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+ define("AUTHORIZENET_MD5_SETTING", "");
+ $message = new AuthorizeNetSIM;
+ if ($message->isAuthorizeNet()) {
+ $transactionId = $message->transaction_id;
+ }
+ ?>
+
+AuthorizeNetDPM.php Usage Example:
+ <?php // Filename: direct_post.php
+ require_once 'anet_php_sdk/AuthorizeNet.php'; // The SDK
+ $url = "http://YOUR_DOMAIN.com/direct_post.php";
+ $api_login_id = 'YOUR_API_LOGIN_ID';
+ $transaction_key = 'YOUR_TRANSACTION_KEY';
+ $md5_setting = 'YOUR_MD5_SETTING'; // Your MD5 Setting
+ $amount = "5.99";
+ AuthorizeNetDPM::directPostDemo($url, $api_login_id, $transaction_key, $amount, $md5_setting);
+ ?>
+
+AuthorizeNetCP.php Usage Example:
+ <?php
+ require_once 'anet_php_sdk/AuthorizeNet.php';
+ define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+ define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+ define("AUTHORIZENET_MD5_SETTING", "");
+ $sale = new AuthorizeNetCP;
+ $sale->amount = '59.99';
+ $sale->device_type = '4';
+ $sale->setTrack1Data('%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?');
+ $response = $sale->authorizeAndCapture();
+ $trans_id = $response->transaction_id;
+ ?>
+
+AuthorizeNetTD.php Usage Example:
+ <?php
+ require_once 'anet_php_sdk/AuthorizeNet.php';
+ define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+ define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+ $request = new AuthorizeNetTD;
+ $response = $request->getTransactionDetails("12345");
+ echo $response->xml->transaction->transactionStatus;
+ ?>
+
+Test Credit Card Numbers:
+ - Set the expiration date to anytime in the future.
+ - American Express Test Card=> 370000000000002
+ - Discover Test Card => 6011000000000012
+ - Visa Test Card => 4007000000027
+ - Second Visa Test Card => 4012888818888
+ - JCB => 3088000000000017
+ - Diners Club/ Carte Blanche=> 38000000000006
+
+PHPDoc:
+ To autogenerate PHPDocs run:
+ phpdoc -t phpdocs/ -f AuthorizeNet.php -d lib
+
+Release Notes
+ Version 1.1.8
+ - Fixed an issue with validationMode in CIM::updateCustomerPaymentProfile.
+ Note: The behavior where validationMode persisted across transactions using the same request object
+ has been removed. This was unsupported behavior.
+ - Removed an unused validationMode argument in CIM::updateCustomerProfile. The parameter used to be ignored, now its removed.
+ - Enhanced the tests with checks for single digit months in expiration date support and SSL certificate validity.
+ Version 1.1.7
+ - Added getBatchStatisticsRequest and getUnsettledTransactionListRequest support to the SDK.
+ Version 1.1.6
+ - Added the HTML version of the README to the distributed bundle. It was missing in version 1.1.5.
+ Version 1.1.5
+ - Added HTML version of README.
+ Version 1.1.4
+ - Updated the cert.pem bundle to include the new secure.authorize.net SSL certificate.
+ Version 1.1.3
+ - Added more documentation
+ - Improved support for all Transaction Details API methods.
+ - Added support for the Card Present API.
+ - Added easier xpath support to XML Response class.
+ - Added ability to use DPM sample app with production account.
+ Version 1.1.2
+ - Added getValidationResponses method to CIM Response for parsing the validation results when validating payment profiles.
+ - Added support for UpdateSplitTenderGroup method to CIM request.
+ - Bug fix. In CIM requests using validation mode the the validation mode element should have been added to the end of the request.
+ - Bug fix. In AIM Response class where $response->account_number was returning the wrong value.
\ No newline at end of file
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html lang='en'>
+<head>
+<title> PHP SDK README </title>
+<style type="text/css">
+body {
+ min-width: 768px;
+ font-family: "Helvetica Neue","Lucida Grande","Segoe UI",Arial,Helvetica,Verdana,sans-serif;
+ color: #333333;
+ font-size: 0.8em;
+}
+code {
+ font-family: 'Courier New';
+ font-size: 1.0em;
+ color: #000000;
+ background-color: #f1f1f1;
+ white-space: pre;
+ line-height: 1;
+ display: block;
+ margin-left: 3%;
+ margin-right: 3%;
+ padding: 10px;
+}
+table {
+ border-collapse: collapse;
+ width: 94%;
+ margin: 3%;
+ margin-right: 3%;
+ margin-top: 0px;
+ margin-bottom: 0px;
+}
+td {
+ padding: 3px;
+ border: solid 1px #cccccc;
+}
+ul {
+ margin-top: 0px;
+}
+h1,h2,h3,h6 {
+ margin: 0px;
+ padding: 0px;
+ text-align: center;
+}
+h4,h5 {
+ margin-bottom: 0px;
+ padding-bottom: 5px;
+}
+.indent {
+ display: block;
+ margin-left: 3%;
+}
+.sc0 {
+ font-weight: bold;
+}
+.sc18 {
+ color: #FF0000;
+}
+.sc119 {
+ color: #808080;
+}
+.sc120 {
+ color: #808080;
+}
+.sc121 {
+ font-weight: bold;
+ color: #0000FF;
+}
+.sc123 {
+ color: #000080;
+}
+.sc125 {
+ color: #008000;
+}
+.sc127 {
+ color: #8000FF;
+}
+</style>
+</head>
+
+<body>
+<h1>Authorize.Net PHP SDK</h1>
+<h2>version 3.1.2</h2>
+<h6><a href='http://developer.authorize.net'>http://developer.authorize.net</a></h6>
+<h6><a href='http://community.developer.authorize.net'>http://community.developer.authorize.net</a></h6>
+
+<br/>
+<h4>License</h4>
+<span class='indent'>Authorize.Net<br />
+ See <a href='./License.pdf'>License.pdf</a>
+</span>
+
+<br/>
+<h4>About</h4>
+<span class='indent'>A PHP library for working with all Authorize.Net APIs.
+</span>
+
+<br/>
+<h4>Files</h4>
+<table>
+<tr><td>Authorize.Net.php</td><td>Includes all classes. Include this file in your project.</td></tr>
+<tr><td>AuthorizeNet.php</td><td>Includes all classes. Include this file in your project.</td></tr>
+<tr><td>lib/AuthorizeNetAIM.php</td><td>AIM API.</td></tr>
+<tr><td>lib/AuthorizeNetARB.php</td><td>-> ARB API.</td></tr>
+<tr><td>lib/AuthorizeNetCIM.php</td><td>CIM API.</td></tr>
+<tr><td>lib/AuthorizeNetSIM.php</td><td>SIM API.</td></tr>
+<tr><td>lib/AuthorizeNetTD.php</td><td>Reporting API.</td></tr>
+<tr><td>lib/AuthorizeNetCP.php</td><td>Card Present API.</td></tr>
+<tr><td>lib/AuthorizeNetDPM.php</td><td>Direct Post Method Helpers.</td></tr>
+<tr><td>lib/AuthorizeNetSOAP.php</td><td>Class to assist with using the SOAP API.</td></tr>
+<tr><td>lib/shared/AuthorizeNetRequest.php</td><td>Class to connect to AuthorizeNet.</td></tr>
+<tr><td>lib/shared/AuthorizeNetTypes.php</td><td>Classes for AuthorizeNet Datatypes.</td></tr>
+<tr><td>lib/shared/AuthorizeNetResponse.php</td><td>Class to parse AuthorizeNet NVP Responses.</td></tr>
+<tr><td>lib/shared/AuthorizeNetXMLResponse.php</td><td>Class to parse AuthorizeNet XML Responses.</td></tr>
+<tr><td>lib/ssl/cert.pem</td><td>The AuthorizeNet Certificate bundle.</td></tr>
+<tr><td>tests/</td><td>Tests & examples for each of the API methods.</td></tr>
+<tr><td>README</td><td>Plain text version of this file.</td></tr>
+<tr><td>README.html</td><td>This file.</td></tr>
+</table>
+
+<br />
+<h4>Requirements</h4>
+<ul>
+ <li>cURL PHP Extension</li>
+ <li>PHP 5.2+</li>
+ <li>An Authorize.Net Merchant Account or Test Account. You can get a free test account at <a href='http://developer.authorize.net/testaccount/'>http://developer.authorize.net/testaccount/</a></li>
+</ul>
+
+<h4>Install</h4>
+<ul>
+ <li>Include the 'AuthorizeNet.php' file in your application.
+ <li>Use your desired API.
+</ul>
+
+<h4>Usage Examples:</h4>
+ <span class='indent'>See below for basic usage examples. View the tests/ folder for more examples of each API.</span>
+
+<h5>AuthorizeNetAIM.php Quick Usage Example</h5>
+<code><span class="sc18"><?php</span><span class="sc118">
+ </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_TRANSACTION_KEY"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURKEY"</span><span class="sc127">);</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_SANDBOX"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc121">true</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc123">$sale</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetAIM</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$sale</span><span class="sc127">-></span><span class="sc118">amount </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"5.99"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$sale</span><span class="sc127">-></span><span class="sc118">card_num </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'6011000000000012'</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$sale</span><span class="sc127">-></span><span class="sc118">exp_date </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'04/15'</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$sale</span><span class="sc127">-></span><span class="sc118">authorizeAndCapture</span><span class="sc127">();</span><span class="sc118">
+ </span><span class="sc121">if</span><span class="sc118"> </span><span class="sc127">(</span><span class="sc123">$response</span><span class="sc127">-></span><span class="sc118">approved</span><span class="sc127">)</span><span class="sc118"> </span><span class="sc127">{</span><span class="sc118">
+ </span><span class="sc123">$transaction_id</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$response</span><span class="sc127">-></span><span class="sc118">transaction_id</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc127">}</span><span class="sc118">
+</span><span class="sc18">?></span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetAIM.php Advanced Usage Example</h5>
+<code><span class="sc18"><?php</span><span class="sc118">
+ </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_TRANSACTION_KEY"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURKEY"</span><span class="sc127">);</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_SANDBOX"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc121">true</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc123">$auth</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetAIM</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$auth</span><span class="sc127">-></span><span class="sc118">amount </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"45.00"</span><span class="sc127">;</span><span class="sc118">
+
+ </span><span class="sc125">// Use eCheck:</span><span class="sc118">
+ </span><span class="sc123">$auth</span><span class="sc127">-></span><span class="sc118">setECheck</span><span class="sc127">(</span><span class="sc118">
+ </span><span class="sc120">'121042882'</span><span class="sc127">,</span><span class="sc118">
+ </span><span class="sc120">'123456789123'</span><span class="sc127">,</span><span class="sc118">
+ </span><span class="sc120">'CHECKING'</span><span class="sc127">,</span><span class="sc118">
+ </span><span class="sc120">'Bank of Earth'</span><span class="sc127">,</span><span class="sc118">
+ </span><span class="sc120">'Jane Doe'</span><span class="sc127">,</span><span class="sc118">
+ </span><span class="sc120">'WEB'</span><span class="sc118">
+ </span><span class="sc127">);</span><span class="sc118">
+
+ </span><span class="sc125">// Set multiple line items:</span><span class="sc118">
+ </span><span class="sc123">$auth</span><span class="sc127">-></span><span class="sc118">addLineItem</span><span class="sc127">(</span><span class="sc120">'item1'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'Golf tees'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'Blue tees'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'2'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'5.00'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'N'</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc123">$auth</span><span class="sc127">-></span><span class="sc118">addLineItem</span><span class="sc127">(</span><span class="sc120">'item2'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'Golf shirt'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'XL'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'1'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'40.00'</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc120">'N'</span><span class="sc127">);</span><span class="sc118">
+
+ </span><span class="sc125">// Set Invoice Number:</span><span class="sc118">
+ </span><span class="sc123">$auth</span><span class="sc127">-></span><span class="sc118">invoice_num </span><span class="sc127">=</span><span class="sc118"> time</span><span class="sc127">();</span><span class="sc118">
+
+ </span><span class="sc125">// Set a Merchant Defined Field:</span><span class="sc118">
+ </span><span class="sc123">$auth</span><span class="sc127">-></span><span class="sc118">setCustomField</span><span class="sc127">(</span><span class="sc119">"entrance_source"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"Search Engine"</span><span class="sc127">);</span><span class="sc118">
+
+ </span><span class="sc125">// Authorize Only:</span><span class="sc118">
+ </span><span class="sc123">$response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$auth</span><span class="sc127">-></span><span class="sc118">authorizeOnly</span><span class="sc127">();</span><span class="sc118">
+
+ </span><span class="sc121">if</span><span class="sc118"> </span><span class="sc127">(</span><span class="sc123">$response</span><span class="sc127">-></span><span class="sc118">approved</span><span class="sc127">)</span><span class="sc118"> </span><span class="sc127">{</span><span class="sc118">
+ </span><span class="sc123">$auth_code</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$response</span><span class="sc127">-></span><span class="sc118">transaction_id</span><span class="sc127">;</span><span class="sc118">
+
+ </span><span class="sc125">// Now capture:</span><span class="sc118">
+ </span><span class="sc123">$capture</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetAIM</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$capture_response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$capture</span><span class="sc127">-></span><span class="sc118">priorAuthCapture</span><span class="sc127">(</span><span class="sc123">$auth_code</span><span class="sc127">);</span><span class="sc118">
+
+ </span><span class="sc125">// Now void:</span><span class="sc118">
+ </span><span class="sc123">$void</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetAIM</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$void_response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$void</span><span class="sc127">-></span><span class="sc118">void</span><span class="sc127">(</span><span class="sc123">$capture_response</span><span class="sc127">-></span><span class="sc118">transaction_id</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc127">}</span><span class="sc118">
+</span><span class="sc18">?></span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetARB.php Usage Example</h5>
+<code><span class="sc18"><?php</span><span class="sc118">
+ </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_TRANSACTION_KEY"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURKEY"</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc123">$subscription</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNet_Subscription</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$subscription</span><span class="sc127">-></span><span class="sc118">name </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"PHP Monthly Magazine"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$subscription</span><span class="sc127">-></span><span class="sc118">intervalLength </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"1"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$subscription</span><span class="sc127">-></span><span class="sc118">intervalUnit </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"months"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$subscription</span><span class="sc127">-></span><span class="sc118">startDate </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"2011-03-12"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$subscription</span><span class="sc127">-></span><span class="sc118">totalOccurrences </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"12"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$subscription</span><span class="sc127">-></span><span class="sc118">amount </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"12.99"</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc123">$subscription</span><span class="sc127">-></span><span class="sc118">creditCardCardNumber </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"6011000000000012"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$subscription</span><span class="sc127">-></span><span class="sc118">creditCardExpirationDate</span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"2018-10"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$subscription</span><span class="sc127">-></span><span class="sc118">creditCardCardCode </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"123"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$subscription</span><span class="sc127">-></span><span class="sc118">billToFirstName </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"Rasmus"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$subscription</span><span class="sc127">-></span><span class="sc118">billToLastName </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"Doe"</span><span class="sc127">;</span><span class="sc118">
+
+ </span><span class="sc125">// Create the subscription.</span><span class="sc118">
+ </span><span class="sc123">$request</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetARB</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$request</span><span class="sc127">-></span><span class="sc118">createSubscription</span><span class="sc127">(</span><span class="sc123">$subscription</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc123">$subscription_id</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$response</span><span class="sc127">-></span><span class="sc118">getSubscriptionId</span><span class="sc127">();</span><span class="sc118">
+</span><span class="sc18">?></span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetCIM.php Usage Example</h5>
+<code><span class="sc18"><?php</span><span class="sc118">
+ </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_TRANSACTION_KEY"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURKEY"</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc123">$request</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetCIM</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc125">// Create new customer profile</span><span class="sc118">
+ </span><span class="sc123">$customerProfile</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetCustomer</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$customerProfile</span><span class="sc127">-></span><span class="sc118">description </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"Description of customer"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$customerProfile</span><span class="sc127">-></span><span class="sc118">merchantCustomerId</span><span class="sc127">=</span><span class="sc118"> time</span><span class="sc127">();</span><span class="sc118">
+ </span><span class="sc123">$customerProfile</span><span class="sc127">-></span><span class="sc118">email </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"test@domain.com"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$request</span><span class="sc127">-></span><span class="sc118">createCustomerProfile</span><span class="sc127">(</span><span class="sc123">$customerProfile</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc121">if</span><span class="sc118"> </span><span class="sc127">(</span><span class="sc123">$response</span><span class="sc127">-></span><span class="sc118">isOk</span><span class="sc127">())</span><span class="sc118"> </span><span class="sc127">{</span><span class="sc118">
+ </span><span class="sc123">$customerProfileId</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$response</span><span class="sc127">-></span><span class="sc118">getCustomerProfileId</span><span class="sc127">();</span><span class="sc118">
+ </span><span class="sc127">}</span><span class="sc118">
+</span><span class="sc18">?></span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetSIM.php Usage Example</h5>
+<code><span class="sc18"><?php</span><span class="sc118">
+ </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_MD5_SETTING"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">""</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc123">$message</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetSIM</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc121">if</span><span class="sc118"> </span><span class="sc127">(</span><span class="sc123">$message</span><span class="sc127">-></span><span class="sc118">isAuthorizeNet</span><span class="sc127">())</span><span class="sc118"> </span><span class="sc127">{</span><span class="sc118">
+ </span><span class="sc123">$transactionId</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$message</span><span class="sc127">-></span><span class="sc118">transaction_id</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc127">}</span><span class="sc118">
+</span><span class="sc18">?></span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetDPM.php Usage Example</h5>
+<code><span class="sc18"><?php</span><span class="sc118"> </span><span class="sc125">// Filename: direct_post.php</span><span class="sc118">
+ </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118"> </span><span class="sc125">// The SDK</span><span class="sc118">
+ </span><span class="sc123">$url</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"http://YOUR_DOMAIN.com/direct_post.php"</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$api_login_id</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'YOUR_API_LOGIN_ID'</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$transaction_key</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'YOUR_TRANSACTION_KEY'</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$md5_setting</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'YOUR_MD5_SETTING'</span><span class="sc127">;</span><span class="sc118"> </span><span class="sc125">// Your MD5 Setting</span><span class="sc118">
+ </span><span class="sc123">$amount</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc119">"5.99"</span><span class="sc127">;</span><span class="sc118">
+ AuthorizeNetDPM</span><span class="sc127">::</span><span class="sc118">directPostDemo</span><span class="sc127">(</span><span class="sc123">$url</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc123">$api_login_id</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc123">$transaction_key</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc123">$amount</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc123">$md5_setting</span><span class="sc127">);</span><span class="sc118">
+</span><span class="sc18">?></span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetCP.php Usage Example</h5>
+<code><span class="sc18"><?php</span><span class="sc118">
+ </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_TRANSACTION_KEY"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURKEY"</span><span class="sc127">);</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_MD5_SETTING"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">""</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc123">$sale</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetCP</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$sale</span><span class="sc127">-></span><span class="sc118">amount </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'59.99'</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$sale</span><span class="sc127">-></span><span class="sc118">device_type </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc120">'4'</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$sale</span><span class="sc127">-></span><span class="sc118">setTrack1Data</span><span class="sc127">(</span><span class="sc120">'%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?'</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc123">$response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$sale</span><span class="sc127">-></span><span class="sc118">authorizeAndCapture</span><span class="sc127">();</span><span class="sc118">
+ </span><span class="sc123">$trans_id</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$response</span><span class="sc127">-></span><span class="sc118">transaction_id</span><span class="sc127">;</span><span class="sc118">
+</span><span class="sc18">?></span><span class="sc0"></span>
+</code>
+
+<h5>AuthorizeNetTD.php Usage Example</h5>
+<code><span class="sc18"><?php</span><span class="sc118">
+ </span><span class="sc121">require_once</span><span class="sc118"> </span><span class="sc120">'anet_php_sdk/AuthorizeNet.php'</span><span class="sc127">;</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_API_LOGIN_ID"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURLOGIN"</span><span class="sc127">);</span><span class="sc118">
+ define</span><span class="sc127">(</span><span class="sc119">"AUTHORIZENET_TRANSACTION_KEY"</span><span class="sc127">,</span><span class="sc118"> </span><span class="sc119">"YOURKEY"</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc123">$request</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc121">new</span><span class="sc118"> AuthorizeNetTD</span><span class="sc127">;</span><span class="sc118">
+ </span><span class="sc123">$response</span><span class="sc118"> </span><span class="sc127">=</span><span class="sc118"> </span><span class="sc123">$request</span><span class="sc127">-></span><span class="sc118">getTransactionDetails</span><span class="sc127">(</span><span class="sc119">"12345"</span><span class="sc127">);</span><span class="sc118">
+ </span><span class="sc121">echo</span><span class="sc118"> </span><span class="sc123">$response</span><span class="sc127">-></span><span class="sc118">xml</span><span class="sc127">-></span><span class="sc118">transaction</span><span class="sc127">-></span><span class="sc118">transactionStatus</span><span class="sc127">;</span><span class="sc118">
+</span><span class="sc18">?></span>
+</code>
+
+<br />
+<h4>Test Credit Card Numbers</h4>
+<table>
+ <tr><td>American Express Test Card</td><td>370000000000002</td></tr>
+ <tr><td>Discover Test Card</td><td>6011000000000012</td></tr>
+ <tr><td>Visa Test Card</td><td>4007000000027</td></tr>
+ <tr><td>Second Visa Test Card</td><td>4012888818888</td></tr>
+ <tr><td>JCB</td><td>3088000000000017</td></tr>
+ <tr><td>Diners Club/ Carte Blanche</td><td>38000000000006</td></tr>
+</table>
+<span class='indent'><small>Set the expiration date to anytime in the future.</small></span>
+<br />
+
+<h4>PHPDoc:</h4>
+ <span class='indent'>To autogenerate PHPDocs run</span>
+ <code>phpdoc -t phpdocs/ -f AuthorizeNet.php -d lib</code>
+
+<h4>Release Notes</h4>
+ <span class='indent'>
+ <em>Version 1.1.8</em>
+ <ul>
+ <li>
+ Fixed an issue with validationMode in CIM::updateCustomerPaymentProfile. Note: The behavior where validationMode persisted across transactions using the same request object has been removed. This was unsupported behavior.
+ </li>
+ <li>
+ Removed an unused validationMode argument in CIM::updateCustomerProfile. The parameter used to be ignored, now its removed.
+ </li>
+ <li>
+ Enhanced the tests with checks for single digit months in expiration date support and SSL certificate validity.
+ </li>
+ </ul>
+ <em>Version 1.1.7</em>
+ <ul>
+ <li>Added getBatchStatisticsRequest and getUnsettledTransactionListRequest support to the SDK.</li>
+ </ul>
+ <em>Version 1.1.6</em>
+ <ul>
+ <li>Added the HTML version of the README to the distributed bundle. It was missing in version 1.1.5.</li>
+ </ul>
+ <em>Version 1.1.5</em>
+ <ul>
+ <li>Added HTML version of README.</li>
+ </ul>
+ <em>Version 1.1.4</em>
+ <ul>
+ <li>Updated the cert.pem bundle to include the new secure.authorize.net SSL certificate.</li>
+ </ul>
+ <em>Version 1.1.3</em>
+ <ul>
+ <li>Added more documentation</li>
+ <li>Improved support for all Transaction Details API methods.</li>
+ <li>Added support for the Card Present API.</li>
+ <li>Added easier xpath support to XML Response class.</li>
+ <li>Added ability to use DPM sample app with production account.</li>
+ </ul>
+ <em>Version 1.1.2</em>
+ <ul>
+ <li>Added getValidationResponses method to CIM Response for parsing the validation results when validating payment profiles.</li>
+ <li>Added support for UpdateSplitTenderGroup method to CIM request.</li>
+ <li>Bug fix. In CIM requests using validation mode the the validation mode element should have been added to the end of the request.</li>
+ <li>Bug fix. In AIM Response class where $response->account_number was returning the wrong value.</li>
+ </ul>
+ </span>
+</body>
+</html>
\ No newline at end of file
--- /dev/null
+Advanced Integration Method
+===========================
+
+Basic Overview
+--------------
+
+The AuthorizeNetAIM class creates a request object for submitting transactions
+to the AuthorizeNetAIM API. To use, create an instance of the class, set the fields
+for your transaction, call the method you want to use (Authorize Only, Authorize &
+Capture, etc.) and you'll receive an AuthorizeNetAIM response object providing easy access
+to the results of the transaction.
+
+Including the SDK
+-----------------
+
+require_once 'anet_php_sdk/AuthorizeNet.php';
+
+Setting Merchant Credentials
+----------------------------
+The easiest way to set credentials is to define constants which the SDK uses:
+define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
+define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
+
+You can also set credentials manually per request like so:
+
+$sale = new AuthorizeNetAIM("YOUR_API_LOGIN_ID","YOUR_TRANSACTION_KEY");
+
+
+Setting the Transaction Post Location
+-------------------------------------
+
+To post transactions to the live Authorize.Net gateway:
+define("AUTHORIZENET_SANDBOX", false);
+
+To post transactions to the Authorize.Net test server:
+define("AUTHORIZENET_SANDBOX", true);
+
+You can also set the location manually per request:
+$sale->setSandbox(false);
+
+
+Setting Fields
+--------------
+
+An Authorize.Net AIM request is simply a set of name/value pairs. The PHP SDK
+allows you to set these fields in a few different ways depending on your
+preference.
+
+Note: to make things easier on the developer, the "x_" prefix attached to each
+field in the AIM API has been removed. Thus, instead of setting $sale->x_card_num,
+set $sale->card_num instead.
+
+1.) By Setting Fields Directly:
+$sale = new AuthorizeNetAIM;
+$sale->amount = "1999.99";
+$sale->card_num = '6011000000000012';
+$sale->exp_date = '04/15';
+$response = $sale->authorizeAndCapture();
+
+2.) By Setting Multiple Fields at Once:
+$sale = new AuthorizeNetAIM;
+$sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415'
+ )
+);
+
+3.) By Setting Special Items
+
+To add line items or set custom fields use the respective functions:
+
+Line Items:
+$sale->addLineItem(
+ 'item1', // Item Id
+ 'Golf tees', // Item Name
+ 'Blue tees', // Item Description
+ '2', // Item Quantity
+ '5.00', // Item Unit Price
+ 'N' // Item taxable
+ );
+
+Custom Fields:
+$sale->setCustomField("coupon_code", "SAVE2011");
+
+4.) By Passing in Objects
+
+Each property will be copied from the object to the AIM request.
+
+$sale = new AuthorizeNetAIM;
+$customer = (object)array();
+$customer->first_name = "Jane";
+$customer->last_name = "Smith";
+$customer->company = "Jane Smith Enterprises Inc.";
+$customer->address = "20 Main Street";
+$customer->city = "San Francisco";
+$customer->state = "CA";
+$customer->zip = "94110";
+$customer->country = "US";
+$customer->phone = "415-555-5557";
+$customer->fax = "415-555-5556";
+$customer->email = "foo@example.com";
+$customer->cust_id = "55";
+$customer->customer_ip = "98.5.5.5";
+$sale->setFields($customer);
+
+Submitting Transactions
+-----------------------
+To submit a transaction call one of the 7 methods:
+
+-authorizeAndCapture()
+-authorizeOnly()
+-priorAuthCapture()
+-void()
+-captureOnly()
+-credit()
+
+Each method has optional parameters which highlight the fields required by the
+Authorize.Net API for that transaction type.
+
+
+eCheck
+------
+To submit an electronic check transaction you can set the required fields individually
+or simply use the setECheck method:
+
+$sale = new AuthorizeNetAIM;
+$sale->amount = "45.00";
+$sale->setECheck(
+ '121042882', // bank_aba_code
+ '123456789123', // bank_acct_num
+ 'CHECKING', // bank_acct_type
+ 'Bank of Earth', // bank_name
+ 'Jane Doe', // bank_acct_name
+ 'WEB' // echeck_type
+);
+$response = $sale->authorizeAndCapture();
+
+
+Partial Authorization Transactions
+----------------------------------
+To enable partial authorization transactions set the partial_auth flag
+to true:
+
+$sale->allow_partial_auth = true;
+
+You should receive a split tender id in the response if a partial auth
+is made:
+
+$split_tender_id = $response->split_tender_id;
+
+
+Itemized Order Information
+--------------------------
+To add itemized order information use the addLineItem method:
+
+$auth->addLineItem(
+ 'item1', // Item Id
+ 'Golf tees', // Item Name
+ 'Blue tees', // Item Description
+ '2', // Item Quantity
+ '5.00', // Item Unit Price
+ 'N' // Item taxable
+ );
+
+
+Merchant Defined Fields
+-----------------------
+You can use the setCustomField method to set any custom merchant defined field(s):
+
+$sale->setCustomField("entrance_source", "Search Engine");
+$sale->setCustomField("coupon_code", "SAVE2011");
+
+
+Transaction Response
+--------------------
+When you submit an AIM transaction you receive an AuthorizeNetAIM_Response
+object in return. You can access each name/value pair in the response as
+you would normally expect:
+
+$response = $sale->authorizeAndCapture();
+$response->response_code;
+$response->response_subcode;
+$response->response_reason_code;
+$response->transaction_id;
+
--- /dev/null
+ARB API
+=======
+
+Basic Overview
+--------------
+
+The AuthorizeNetARB class creates a request object for submitting transactions
+to the AuthorizeNetARB API.
+
+
+Creating/Updating Subscriptions
+-------------------------------
+
+To create or update a subscription first create a subscription object:
+
+$subscription = new AuthorizeNet_Subscription;
+$subscription->name = "Short subscription";
+$subscription->intervalLength = "1";
+$subscription->intervalUnit = "months";
+$subscription->startDate = "2011-03-12";
+$subscription->totalOccurrences = "14";
+$subscription->amount = rand(1,100);
+$subscription->creditCardCardNumber = "6011000000000012";
+$subscription->creditCardExpirationDate = "2018-10";
+$subscription->creditCardCardCode = "123";
+$subscription->billToFirstName = "john";
+$subscription->billToLastName = "doe";
+
+Then create an AuthorizeNetARB object and call the appropriate method
+passing in your subscription object:
+
+$request = new AuthorizeNetARB;
+$response = $request->createSubscription($subscription);
+
+ or for updating a subscription:
+
+$response = $request->updateSubscription($subscription_id, $subscription);
+
+Getting Subscription Status
+---------------------------
+
+Create a new AuthorizeNetARB object and call the getSubscriptionStatus
+method with the subscription_id you want the status of as the parameter:
+
+$status_request = new AuthorizeNetARB;
+$status_response = $status_request->getSubscriptionStatus($subscription_id);
+
+Canceling a Subscription
+------------------------
+
+$cancellation = new AuthorizeNetARB;
+$cancel_response = $cancellation->cancelSubscription($subscription_id);
--- /dev/null
+CIM API
+=======
+
+Basic Overview
+--------------
+
+The AuthorizeNetCIM class creates a request object for submitting transactions
+to the Authorize.Net CIM API.
+
+
+Creating a Customer Profile
+---------------------------
+
+To create a new cusomter profile, first create a new AuthorizeNetCustomer
+object.
+
+$customerProfile = new AuthorizeNetCustomer;
+$customerProfile->description = "Description of customer";
+$customerProfile->merchantCustomerId = 123;
+$customerProfile->email = "user@domain.com";
+
+You can then create an add payment profiles and addresses to this
+customer object.
+
+// Add payment profile.
+$paymentProfile = new AuthorizeNetPaymentProfile;
+$paymentProfile->customerType = "individual";
+$paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+$paymentProfile->payment->creditCard->expirationDate = "2015-10";
+$customerProfile->paymentProfiles[] = $paymentProfile;
+
+// Add another payment profile.
+$paymentProfile2 = new AuthorizeNetPaymentProfile;
+$paymentProfile2->customerType = "business";
+$paymentProfile2->payment->bankAccount->accountType = "businessChecking";
+$paymentProfile2->payment->bankAccount->routingNumber = "121042882";
+$paymentProfile2->payment->bankAccount->accountNumber = "123456789123";
+$paymentProfile2->payment->bankAccount->nameOnAccount = "Jane Doe";
+$paymentProfile2->payment->bankAccount->echeckType = "WEB";
+$paymentProfile2->payment->bankAccount->bankName = "Pandora Bank";
+$customerProfile->paymentProfiles[] = $paymentProfile2;
+
+
+// Add shipping address.
+$address = new AuthorizeNetAddress;
+$address->firstName = "john";
+$address->lastName = "Doe";
+$address->company = "John Doe Company";
+$address->address = "1 Main Street";
+$address->city = "Boston";
+$address->state = "MA";
+$address->zip = "02412";
+$address->country = "USA";
+$address->phoneNumber = "555-555-5555";
+$address->faxNumber = "555-555-5556";
+$customerProfile->shipToList[] = $address;
+
+// Add another shipping address.
+$address2 = new AuthorizeNetAddress;
+$address2->firstName = "jane";
+$address2->lastName = "Doe";
+$address2->address = "11 Main Street";
+$address2->city = "Boston";
+$address2->state = "MA";
+$address2->zip = "02412";
+$address2->country = "USA";
+$address2->phoneNumber = "555-512-5555";
+$address2->faxNumber = "555-523-5556";
+$customerProfile->shipToList[] = $address2;
+
+
+Next, create an AuthorizeNetCIM object:
+
+$request = new AuthorizeNetCIM;
+
+Finally, call the createCustomerProfile method and pass in your
+customer object:
+
+$response = $request->createCustomerProfile($customerProfile);
+
+The response object provides some helper methods for easy access to the
+results of the transaction:
+
+$new_customer_id = $response->getCustomerProfileId();
+
+The response object also stores the XML response as a SimpleXml element
+which you can access like so:
+
+$new_customer_id = $response->xml->customerProfileId
+
+You can also run xpath queries against the result:
+
+$array = $response->xpath('customerProfileId');
+$new_customer_id = $array[0];
+
+
+Deleting a Customer Profile
+---------------------------
+
+To delete a customer profile first create a new AuthorizeNetCIM object:
+
+$request = new AuthorizeNetCIM;
+
+Then call the deleteCustomerProfile method:
+
+request->deleteCustomerProfile($customer_id);
+
+
+Retrieving a Customer Profile
+-----------------------------
+
+To retrieve a customer profile call the getCustomerProfile method:
+
+$response = $request->getCustomerProfile($customerProfileId);
+
+
+Validation Mode
+---------------
+
+Validation mode allows you to generate a test transaction at the time you create a customer profile. In Test Mode, only field validation is performed. In Live Mode, a transaction is generated and submitted to the processor with the amount of $0.00 or $0.01. If successful, the transaction is immediately voided.
+
+To create a customer profile with Validation mode, simply pass in the
+a value for the validation mode parameter on the createCustomerProfile method:
+
+$response = $request->createCustomerProfile($customerProfile, "testMode");
+
+You can access the validation response for each payment profile via xpath,
+the SimpleXML element or the getValidationResponses method:
+
+$validationResponses = $response->getValidationResponses();
+ foreach ($validationResponses as $vr) {
+ echo $vr->approved;
+}
+
+
+Updating a Customer Profile
+---------------------------
+
+Call the updateCustomerProfile method with the customerProfileId and customerProfile
+parameters:
+
+$response = $request->updateCustomerProfile($customerProfileId, $customerProfile);
+
+
+Adding a Payment Profile
+------------------------
+
+
+$paymentProfile = new AuthorizeNetPaymentProfile;
+$paymentProfile->customerType = "individual";
+$paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+$paymentProfile->payment->creditCard->expirationDate = "2015-10";
+$response = $request->createCustomerPaymentProfile($customerProfileId, $paymentProfile);
+
+
+Updating a Payment Profile
+--------------------------
+
+$paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+$paymentProfile->payment->creditCard->expirationDate = "2017-11";
+$response = $request->updateCustomerPaymentProfile($customerProfileId,$paymentProfileId, $paymentProfile);
+
+Adding a Shipping Address
+-------------------------
+
+
+
+$address = new AuthorizeNetAddress;
+$address->firstName = "john";
+$address->lastName = "Doe";
+$address->company = "John Doe Company";
+$address->address = "1 Main Street";
+$address->city = "Boston";
+$address->state = "MA";
+$address->zip = "02412";
+$address->country = "USA";
+$address->phoneNumber = "555-555-5555";
+$address->faxNumber = "555-555-5556";
+$response = $request->createCustomerShippingAddress($customerProfileId, $address);
+$customerAddressId = $response->getCustomerAddressId();
+
+Updating a Shipping Address
+---------------------------
+
+// Update shipping address.
+$address->address = "2 First Street";
+$response = $request->updateCustomerShippingAddress($customerProfileId, $customerAddressId, $address);
+
+
+Creating Transactions
+---------------------
+
+// Create Auth & Capture Transaction
+$transaction = new AuthorizeNetTransaction;
+$transaction->amount = "9.79";
+$transaction->customerProfileId = $customerProfileId;
+$transaction->customerPaymentProfileId = $paymentProfileId;
+$transaction->customerShippingAddressId = $customerAddressId;
+
+$lineItem = new AuthorizeNetLineItem;
+$lineItem->itemId = "4";
+$lineItem->name = "Cookies";
+$lineItem->description = "Chocolate Chip";
+$lineItem->quantity = "4";
+$lineItem->unitPrice = "1.00";
+$lineItem->taxable = "true";
+
+$lineItem2 = new AuthorizeNetLineItem;
+$lineItem2->itemId = "4";
+$lineItem2->name = "Cookies";
+$lineItem2->description= "Peanut Butter";
+$lineItem2->quantity = "4";
+$lineItem2->unitPrice = "1.00";
+$lineItem2->taxable = "true";
+
+$transaction->lineItems[] = $lineItem;
+$transaction->lineItems[] = $lineItem2;
+
+
+$response = $request->createCustomerProfileTransaction("AuthCapture", $transaction);
+$transactionResponse = $response->getTransactionResponse();
+$transactionId = $transactionResponse->transaction_id;
+
+
+Voiding a Transaction
+---------------------
+
+$transaction = new AuthorizeNetTransaction;
+$transaction->transId = $transactionId;
+$response = $request->createCustomerProfileTransaction("Void", $transaction);
+
+
+Deleting a Shipping Address
+---------------------------
+
+$response = $request->deleteCustomerShippingAddress($customerProfileId, $customerAddressId);
+
+
+Deleting a Payment Profile
+--------------------------
+
+$response = $request->deleteCustomerPaymentProfile($customerProfileId, $paymentProfileId);
+
+
+
+Getting Customer Profile IDs
+----------------------------
+
+$response = $request->getCustomerProfileIds();
\ No newline at end of file
--- /dev/null
+Card Present API
+================
+
+Basic Overview
+--------------
+
+The AuthorizeNetCP class creates a request object for submitting transactions
+to the AuthorizeNetCP API. The AuthorizeNetCP class extends the AuthorizeNetAIM
+class. See the AIM.markdown for help with the basics. This document contains
+information regarding the special features of the AuthorizeNetCP class.
+
+
+Merchant Credentials
+--------------------
+
+Please note that if you are using both the CNP and CP APIs your merchant
+credentials will be different.
+
+Setting Track Data
+------------------
+
+To set Track 1 and/or Track 2 data, use the respective methods like so:
+
+$sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+$sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'device_type' => '4',
+ )
+);
+$sale->setTrack1Data('%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?');
+$response = $sale->authorizeAndCapture();
+
+$sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+$sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'device_type' => '4',
+ )
+);
+$sale->setTrack2Data('4111111111111111=1803101000020000831?');
+$response = $sale->authorizeAndCapture();
+
--- /dev/null
+Direct Post Method
+==================
+
+Basic Overview
+--------------
+
+The Authorize.Net PHP SDK includes a class that demonstrates one way
+of implementing the Direct Post Method.
+
+While it is not necessary to use the AuthorizeNetDPM class to implement
+DPM, it may serve as a handy reference.
+
+The AuthorizeNetDPM class extends the AuthorizeNetSIM_Form class.
+See the SIM.markdown for additional documentation.
+
+Relay Response Snippet
+----------------------
+
+The AuthorizeNetDPM class contains a getRelayResponseSnippet($redirect_url)
+which generates a snippet of HTML that will redirect a user back to your
+site after submitting a checkout form using DPM/SIM.
+
+Use this method(or just grab the html) if you want to create a checkout
+experience where the user only interacts with pages on your site.
\ No newline at end of file
--- /dev/null
+Server Integration Method
+=========================
+
+Basic Overview
+--------------
+
+The Authorize.Net PHP SDK includes classes that can speed up implementing
+a Server Integration Method solution.
+
+
+Hosted Order/Receipt Page
+-------------------------
+
+The AuthorizeNetSIM_Form class aims to make it easier to setup the hidden
+fields necessary for creating a SIM experience. While it is not necessary
+to use the AuthorizeNetSIM_Form class to implement SIM, it may be handy for
+reference.
+
+The code below will generate a buy now button that leads to a hosted order page:
+
+<form method="post" action="https://test.authorize.net/gateway/transact.dll">
+<?php
+$amount = "9.99";
+$fp_sequence = "123";
+$time = time();
+
+$fingerprint = AuthorizeNetSIM_Form::getFingerprint($api_login_id, $transaction_key, $amount, $fp_sequence, $time);
+$sim = new AuthorizeNetSIM_Form(
+ array(
+ 'x_amount' => $amount,
+ 'x_fp_sequence' => $fp_sequence,
+ 'x_fp_hash' => $fingerprint,
+ 'x_fp_timestamp' => $time,
+ 'x_relay_response'=> "FALSE",
+ 'x_login' => $api_login_id,
+ )
+);
+echo $sim->getHiddenFieldString();?>
+<input type="submit" value="Buy Now">
+</form>
+
+Fingerprint Generation
+----------------------
+
+To generate the fingerprint needed for a SIM transaction call the getFingerprint method:
+
+$fingerprint = AuthorizeNetSIM_Form::getFingerprint($api_login_id, $transaction_key, $amount, $fp_sequence, $fp_timestamp);
+
+
+Relay Response
+--------------
+
+The PHP SDK includes a AuthorizeNetSIM class for handling a relay response from
+Authorize.Net.
+
+To receive a relay response from Authorize.Net you can either configure the
+url in the Merchant Interface or specify the url when submitting a transaction
+with SIM using the "x_relay_url" field.
+
+When a transaction occurs, Authorize.Net will post the transaction details to
+this url. You can then craete a page on your server at a url such as
+http://yourdomain.com/response_handler.php and execute any logic you want
+when a transaction occurs. The AuthorizeNetSIM class makes it easy to verify
+the transaction came from Authorize.Net and parse the response:
+
+$response = new AuthorizeNetSIM;
+if ($response->isAuthorizeNet())
+{
+ if ($response->approved)
+ {
+ // Activate magazine subscription
+ magazine_subscription_activate($response->cust_id);
+ }
+}
--- /dev/null
+SOAP
+====
+
+Basic Overview
+--------------
+
+The AuthorizeNetSOAP class provides a very basic wrapper to PHP's bundled
+SoapClient class. The AuthorizeNetSOAP class merely contains the WSDL,
+Sandbox, and Live Production server urls to make it easier to connect
+to the Authorize.Net SOAP API.
\ No newline at end of file
--- /dev/null
+Transaction Details API
+=======================
+
+Basic Overview
+--------------
+
+The AuthorizeNetTD class creates a request object for submitting requests
+to the Authorize.Net Transaction Details API.
+
+The AuthorizeNetTD class returns a response that uses PHP's bundled SimpleXML
+class for accessing it's members.
+
+The AuthorizeNetTD response provides two ways to access response elements:
+
+1.) A SimpleXml object:
+
+$response->xml->transaction->payment->creditCard->cardType
+
+2.) Xpath:
+
+$batches = $response->xpath("batchList/batch");
+
+3.) AuthorizeNet Objects (todo)
+
+
+
+Get Transaction Details
+-----------------------
+
+$request = new AuthorizeNetTD;
+$response = $request->getTransactionDetails($transId);
+echo "Amount: {$response->xml->transaction->authAmount}";
+
+Get Settled Batch List
+----------------------
+$request = new AuthorizeNetTD;
+$response = $request->getSettledBatchList();
+$batches = $response->xpath("batchList/batch");
+echo "Batch 1: {$batches[0]->batchId}";
+
+Get Transaction List
+--------------------
+$request = new AuthorizeNetTD;
+$response = $request->getTransactionList($batch_id);
+$transactions = $response->xpath("transactions/transaction")
+
+There are two additional helper methods in the PHP SDK which
+will make multiple calls to retrieve a day's worth of
+transactions or a month's worth of batches:
+
+getTransactionsForDay($month, $day, $year = false)
+getSettledBatchListForMonth($month , $year)
+
+If you don't pass parameters into these methods they will default
+to the current day/month.
--- /dev/null
+<?php
+/**
+ * Easily interact with the Authorize.Net AIM API.
+ *
+ * Example Authorize and Capture Transaction against the Sandbox:
+ * <code>
+ * <?php require_once 'AuthorizeNet.php'
+ * $sale = new AuthorizeNetAIM;
+ * $sale->setFields(
+ * array(
+ * 'amount' => '4.99',
+ * 'card_num' => '411111111111111',
+ * 'exp_date' => '0515'
+ * )
+ * );
+ * $response = $sale->authorizeAndCapture();
+ * if ($response->approved) {
+ * echo "Sale successful!"; } else {
+ * echo $response->error_message;
+ * }
+ * ?>
+ * </code>
+ *
+ * Note: To send requests to the live gateway, either define this:
+ * define("AUTHORIZENET_SANDBOX", false);
+ * -- OR --
+ * $sale = new AuthorizeNetAIM;
+ * $sale->setSandbox(false);
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetAIM
+ * @link http://www.authorize.net/support/AIM_guide.pdf AIM Guide
+ */
+
+
+/**
+ * Builds and sends an AuthorizeNet AIM Request.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetAIM
+ */
+class AuthorizeNetAIM extends AuthorizeNetRequest
+{
+
+ const LIVE_URL = 'https://secure.authorize.net/gateway/transact.dll';
+ const SANDBOX_URL = 'https://test.authorize.net/gateway/transact.dll';
+
+ /**
+ * Holds all the x_* name/values that will be posted in the request.
+ * Default values are provided for best practice fields.
+ */
+ protected $_x_post_fields = array(
+ "version" => "3.1",
+ "delim_char" => ",",
+ "delim_data" => "TRUE",
+ "relay_response" => "FALSE",
+ "encap_char" => "|",
+ );
+
+ /**
+ * Only used if merchant wants to send multiple line items about the charge.
+ */
+ private $_additional_line_items = array();
+
+ /**
+ * Only used if merchant wants to send custom fields.
+ */
+ private $_custom_fields = array();
+
+ /**
+ * Checks to make sure a field is actually in the API before setting.
+ * Set to false to skip this check.
+ */
+ public $verify_x_fields = true;
+
+ /**
+ * A list of all fields in the AIM API.
+ * Used to warn user if they try to set a field not offered in the API.
+ */
+ private $_all_aim_fields = array("address","allow_partial_auth","amount",
+ "auth_code","authentication_indicator", "bank_aba_code","bank_acct_name",
+ "bank_acct_num","bank_acct_type","bank_check_number","bank_name",
+ "card_code","card_num","cardholder_authentication_value","city","company",
+ "country","cust_id","customer_ip","delim_char","delim_data","description",
+ "duplicate_window","duty","echeck_type","email","email_customer",
+ "encap_char","exp_date","fax","first_name","footer_email_receipt",
+ "freight","header_email_receipt","invoice_num","last_name","line_item",
+ "login","method","phone","po_num","recurring_billing","relay_response",
+ "ship_to_address","ship_to_city","ship_to_company","ship_to_country",
+ "ship_to_first_name","ship_to_last_name","ship_to_state","ship_to_zip",
+ "split_tender_id","state","tax","tax_exempt","test_request","tran_key",
+ "trans_id","type","version","zip"
+ );
+
+ /**
+ * Do an AUTH_CAPTURE transaction.
+ *
+ * Required "x_" fields: card_num, exp_date, amount
+ *
+ * @param string $amount The dollar amount to charge
+ * @param string $card_num The credit card number
+ * @param string $exp_date CC expiration date
+ *
+ * @return AuthorizeNetAIM_Response
+ */
+ public function authorizeAndCapture($amount = false, $card_num = false, $exp_date = false)
+ {
+ ($amount ? $this->amount = $amount : null);
+ ($card_num ? $this->card_num = $card_num : null);
+ ($exp_date ? $this->exp_date = $exp_date : null);
+ $this->type = "AUTH_CAPTURE";
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Do a PRIOR_AUTH_CAPTURE transaction.
+ *
+ * Required "x_" field: trans_id(The transaction id of the prior auth, unless split
+ * tender, then set x_split_tender_id manually.)
+ * amount (only if lesser than original auth)
+ *
+ * @param string $trans_id Transaction id to charge
+ * @param string $amount Dollar amount to charge if lesser than auth
+ *
+ * @return AuthorizeNetAIM_Response
+ */
+ public function priorAuthCapture($trans_id = false, $amount = false)
+ {
+ ($trans_id ? $this->trans_id = $trans_id : null);
+ ($amount ? $this->amount = $amount : null);
+ $this->type = "PRIOR_AUTH_CAPTURE";
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Do an AUTH_ONLY transaction.
+ *
+ * Required "x_" fields: card_num, exp_date, amount
+ *
+ * @param string $amount The dollar amount to charge
+ * @param string $card_num The credit card number
+ * @param string $exp_date CC expiration date
+ *
+ * @return AuthorizeNetAIM_Response
+ */
+ public function authorizeOnly($amount = false, $card_num = false, $exp_date = false)
+ {
+ ($amount ? $this->amount = $amount : null);
+ ($card_num ? $this->card_num = $card_num : null);
+ ($exp_date ? $this->exp_date = $exp_date : null);
+ $this->type = "AUTH_ONLY";
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Do a VOID transaction.
+ *
+ * Required "x_" field: trans_id(The transaction id of the prior auth, unless split
+ * tender, then set x_split_tender_id manually.)
+ *
+ * @param string $trans_id Transaction id to void
+ *
+ * @return AuthorizeNetAIM_Response
+ */
+ public function void($trans_id = false)
+ {
+ ($trans_id ? $this->trans_id = $trans_id : null);
+ $this->type = "VOID";
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Do a CAPTURE_ONLY transaction.
+ *
+ * Required "x_" fields: auth_code, amount, card_num , exp_date
+ *
+ * @param string $auth_code The auth code
+ * @param string $amount The dollar amount to charge
+ * @param string $card_num The last 4 of credit card number
+ * @param string $exp_date CC expiration date
+ *
+ * @return AuthorizeNetAIM_Response
+ */
+ public function captureOnly($auth_code = false, $amount = false, $card_num = false, $exp_date = false)
+ {
+ ($auth_code ? $this->auth_code = $auth_code : null);
+ ($amount ? $this->amount = $amount : null);
+ ($card_num ? $this->card_num = $card_num : null);
+ ($exp_date ? $this->exp_date = $exp_date : null);
+ $this->type = "CAPTURE_ONLY";
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Do a CREDIT transaction.
+ *
+ * Required "x_" fields: trans_id, amount, card_num (just the last 4)
+ *
+ * @param string $trans_id Transaction id to credit
+ * @param string $amount The dollar amount to credit
+ * @param string $card_num The last 4 of credit card number
+ *
+ * @return AuthorizeNetAIM_Response
+ */
+ public function credit($trans_id = false, $amount = false, $card_num = false)
+ {
+ ($trans_id ? $this->trans_id = $trans_id : null);
+ ($amount ? $this->amount = $amount : null);
+ ($card_num ? $this->card_num = $card_num : null);
+ $this->type = "CREDIT";
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Alternative syntax for setting x_ fields.
+ *
+ * Usage: $sale->method = "echeck";
+ *
+ * @param string $name
+ * @param string $value
+ */
+ public function __set($name, $value)
+ {
+ $this->setField($name, $value);
+ }
+
+ /**
+ * Quickly set multiple fields.
+ *
+ * Note: The prefix x_ will be added to all fields. If you want to set a
+ * custom field without the x_ prefix, use setCustomField or setCustomFields.
+ *
+ * @param array $fields Takes an array or object.
+ */
+ public function setFields($fields)
+ {
+ $array = (array)$fields;
+ foreach ($array as $key => $value) {
+ $this->setField($key, $value);
+ }
+ }
+
+ /**
+ * Quickly set multiple custom fields.
+ *
+ * @param array $fields
+ */
+ public function setCustomFields($fields)
+ {
+ $array = (array)$fields;
+ foreach ($array as $key => $value) {
+ $this->setCustomField($key, $value);
+ }
+ }
+
+ /**
+ * Add a line item.
+ *
+ * @param string $item_id
+ * @param string $item_name
+ * @param string $item_description
+ * @param string $item_quantity
+ * @param string $item_unit_price
+ * @param string $item_taxable
+ */
+ public function addLineItem($item_id, $item_name, $item_description, $item_quantity, $item_unit_price, $item_taxable)
+ {
+ $line_item = "";
+ $delimiter = "";
+ foreach (func_get_args() as $key => $value) {
+ $line_item .= $delimiter . $value;
+ $delimiter = "<|>";
+ }
+ $this->_additional_line_items[] = $line_item;
+ }
+
+ /**
+ * Use ECHECK as payment type.
+ */
+ public function setECheck($bank_aba_code, $bank_acct_num, $bank_acct_type, $bank_name, $bank_acct_name, $echeck_type = 'WEB')
+ {
+ $this->setFields(
+ array(
+ 'method' => 'echeck',
+ 'bank_aba_code' => $bank_aba_code,
+ 'bank_acct_num' => $bank_acct_num,
+ 'bank_acct_type' => $bank_acct_type,
+ 'bank_name' => $bank_name,
+ 'bank_acct_name' => $bank_acct_type,
+ 'echeck_type' => $echeck_type,
+ )
+ );
+ }
+
+ /**
+ * Set an individual name/value pair. This will append x_ to the name
+ * before posting.
+ *
+ * @param string $name
+ * @param string $value
+ */
+ public function setField($name, $value)
+ {
+ if ($this->verify_x_fields) {
+ if (in_array($name, $this->_all_aim_fields)) {
+ $this->_x_post_fields[$name] = $value;
+ } else {
+ throw new AuthorizeNetException("Error: no field $name exists in the AIM API.
+ To set a custom field use setCustomField('field','value') instead.");
+ }
+ } else {
+ $this->_x_post_fields[$name] = $value;
+ }
+ }
+
+ /**
+ * Set a custom field. Note: the x_ prefix will not be added to
+ * your custom field if you use this method.
+ *
+ * @param string $name
+ * @param string $value
+ */
+ public function setCustomField($name, $value)
+ {
+ $this->_custom_fields[$name] = $value;
+ }
+
+ /**
+ * Unset an x_ field.
+ *
+ * @param string $name Field to unset.
+ */
+ public function unsetField($name)
+ {
+ unset($this->_x_post_fields[$name]);
+ }
+
+ /**
+ *
+ *
+ * @param string $response
+ *
+ * @return AuthorizeNetAIM_Response
+ */
+ protected function _handleResponse($response)
+ {
+ return new AuthorizeNetAIM_Response($response, $this->_x_post_fields['delim_char'], $this->_x_post_fields['encap_char'], $this->_custom_fields);
+ }
+
+ /**
+ * @return string
+ */
+ protected function _getPostUrl()
+ {
+ return ($this->_sandbox ? self::SANDBOX_URL : self::LIVE_URL);
+ }
+
+ /**
+ * Converts the x_post_fields array into a string suitable for posting.
+ */
+ protected function _setPostString()
+ {
+ $this->_x_post_fields['login'] = $this->_api_login;
+ $this->_x_post_fields['tran_key'] = $this->_transaction_key;
+ $this->_post_string = "";
+ foreach ($this->_x_post_fields as $key => $value) {
+ $this->_post_string .= "x_$key=" . urlencode($value) . "&";
+ }
+ // Add line items
+ foreach ($this->_additional_line_items as $key => $value) {
+ $this->_post_string .= "x_line_item=" . urlencode($value) . "&";
+ }
+ // Add custom fields
+ foreach ($this->_custom_fields as $key => $value) {
+ $this->_post_string .= "$key=" . urlencode($value) . "&";
+ }
+ $this->_post_string = rtrim($this->_post_string, "& ");
+ }
+}
+
+/**
+ * Parses an AuthorizeNet AIM Response.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetAIM
+ */
+class AuthorizeNetAIM_Response extends AuthorizeNetResponse
+{
+ private $_response_array = array(); // An array with the split response.
+
+ /**
+ * Constructor. Parses the AuthorizeNet response string.
+ *
+ * @param string $response The response from the AuthNet server.
+ * @param string $delimiter The delimiter used (default is ",")
+ * @param string $encap_char The encap_char used (default is "|")
+ * @param array $custom_fields Any custom fields set in the request.
+ */
+ public function __construct($response, $delimiter, $encap_char, $custom_fields)
+ {
+ if ($response) {
+
+ // Split Array
+ $this->response = $response;
+ if ($encap_char) {
+ $this->_response_array = explode($encap_char.$delimiter.$encap_char, substr($response, 1, -1));
+ } else {
+ $this->_response_array = explode($delimiter, $response);
+ }
+
+ /**
+ * If AuthorizeNet doesn't return a delimited response.
+ */
+ if (count($this->_response_array) < 10) {
+ $this->approved = false;
+ $this->error = true;
+ $this->error_message = "Unrecognized response from AuthorizeNet: $response";
+ return;
+ }
+
+
+
+ // Set all fields
+ $this->response_code = $this->_response_array[0];
+ $this->response_subcode = $this->_response_array[1];
+ $this->response_reason_code = $this->_response_array[2];
+ $this->response_reason_text = $this->_response_array[3];
+ $this->authorization_code = $this->_response_array[4];
+ $this->avs_response = $this->_response_array[5];
+ $this->transaction_id = $this->_response_array[6];
+ $this->invoice_num = $this->_response_array[7];
+ $this->description = $this->_response_array[8];
+ $this->amount = $this->_response_array[9];
+ $this->method = $this->_response_array[10];
+ $this->transaction_type = $this->_response_array[11];
+ $this->customer_id = $this->_response_array[12];
+ $this->first_name = $this->_response_array[13];
+ $this->last_name = $this->_response_array[14];
+ $this->company = $this->_response_array[15];
+ $this->address = $this->_response_array[16];
+ $this->city = $this->_response_array[17];
+ $this->state = $this->_response_array[18];
+ $this->zip_code = $this->_response_array[19];
+ $this->country = $this->_response_array[20];
+ $this->phone = $this->_response_array[21];
+ $this->fax = $this->_response_array[22];
+ $this->email_address = $this->_response_array[23];
+ $this->ship_to_first_name = $this->_response_array[24];
+ $this->ship_to_last_name = $this->_response_array[25];
+ $this->ship_to_company = $this->_response_array[26];
+ $this->ship_to_address = $this->_response_array[27];
+ $this->ship_to_city = $this->_response_array[28];
+ $this->ship_to_state = $this->_response_array[29];
+ $this->ship_to_zip_code = $this->_response_array[30];
+ $this->ship_to_country = $this->_response_array[31];
+ $this->tax = $this->_response_array[32];
+ $this->duty = $this->_response_array[33];
+ $this->freight = $this->_response_array[34];
+ $this->tax_exempt = $this->_response_array[35];
+ $this->purchase_order_number= $this->_response_array[36];
+ $this->md5_hash = $this->_response_array[37];
+ $this->card_code_response = $this->_response_array[38];
+ $this->cavv_response = $this->_response_array[39];
+ $this->account_number = $this->_response_array[50];
+ $this->card_type = $this->_response_array[51];
+ $this->split_tender_id = $this->_response_array[52];
+ $this->requested_amount = $this->_response_array[53];
+ $this->balance_on_card = $this->_response_array[54];
+
+ $this->approved = ($this->response_code == self::APPROVED);
+ $this->declined = ($this->response_code == self::DECLINED);
+ $this->error = ($this->response_code == self::ERROR);
+ $this->held = ($this->response_code == self::HELD);
+
+ // Set custom fields
+ if ($count = count($custom_fields)) {
+ $custom_fields_response = array_slice($this->_response_array, -$count, $count);
+ $i = 0;
+ foreach ($custom_fields as $key => $value) {
+ $this->$key = $custom_fields_response[$i];
+ $i++;
+ }
+ }
+
+ if ($this->error) {
+ $this->error_message = "AuthorizeNet Error:
+ Response Code: ".$this->response_code."
+ Response Subcode: ".$this->response_subcode."
+ Response Reason Code: ".$this->response_reason_code."
+ Response Reason Text: ".$this->response_reason_text."
+ ";
+ }
+ } else {
+ $this->approved = false;
+ $this->error = true;
+ $this->error_message = "Error connecting to AuthorizeNet";
+ }
+ }
+
+}
--- /dev/null
+<?php
+/**
+ * Easily interact with the Authorize.Net ARB XML API.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetARB
+ * @link http://www.authorize.net/support/ARB_guide.pdf ARB Guide
+ */
+
+
+/**
+ * A class to send a request to the ARB XML API.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetARB
+ */
+class AuthorizeNetARB extends AuthorizeNetRequest
+{
+
+ const LIVE_URL = "https://api.authorize.net/xml/v1/request.api";
+ const SANDBOX_URL = "https://apitest.authorize.net/xml/v1/request.api";
+
+ private $_request_type;
+ private $_request_payload;
+
+ /**
+ * Optional. Used if the merchant wants to set a reference ID.
+ *
+ * @param string $refId
+ */
+ public function setRefId($refId)
+ {
+ $this->_request_payload = ($refId ? "<refId>$refId</refId>" : "");
+ }
+
+ /**
+ * Create an ARB subscription
+ *
+ * @param AuthorizeNet_Subscription $subscription
+ *
+ * @return AuthorizeNetARB_Response
+ */
+ public function createSubscription(AuthorizeNet_Subscription $subscription)
+ {
+ $this->_request_type = "CreateSubscriptionRequest";
+ $this->_request_payload .= $subscription->getXml();
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Update an ARB subscription
+ *
+ * @param int $subscriptionId
+ * @param AuthorizeNet_Subscription $subscription
+ *
+ * @return AuthorizeNetARB_Response
+ */
+ public function updateSubscription($subscriptionId, AuthorizeNet_Subscription $subscription)
+ {
+ $this->_request_type = "UpdateSubscriptionRequest";
+ $this->_request_payload .= "<subscriptionId>$subscriptionId</subscriptionId>";
+ $this->_request_payload .= $subscription->getXml();
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Get status of a subscription
+ *
+ * @param int $subscriptionId
+ *
+ * @return AuthorizeNetARB_Response
+ */
+ public function getSubscriptionStatus($subscriptionId)
+ {
+ $this->_request_type = "GetSubscriptionStatusRequest";
+ $this->_request_payload .= "<subscriptionId>$subscriptionId</subscriptionId>";
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Cancel a subscription
+ *
+ * @param int $subscriptionId
+ *
+ * @return AuthorizeNetARB_Response
+ */
+ public function cancelSubscription($subscriptionId)
+ {
+ $this->_request_type = "CancelSubscriptionRequest";
+ $this->_request_payload .= "<subscriptionId>$subscriptionId</subscriptionId>";
+ return $this->_sendRequest();
+ }
+
+ /**
+ *
+ *
+ * @param string $response
+ *
+ * @return AuthorizeNetARB_Response
+ */
+ protected function _handleResponse($response)
+ {
+ return new AuthorizeNetARB_Response($response);
+ }
+
+ /**
+ * @return string
+ */
+ protected function _getPostUrl()
+ {
+ return ($this->_sandbox ? self::SANDBOX_URL : self::LIVE_URL);
+ }
+
+ /**
+ * Prepare the XML document for posting.
+ */
+ protected function _setPostString()
+ {
+ $this->_post_string =<<<XML
+<?xml version="1.0" encoding="utf-8"?>
+<ARB{$this->_request_type} xmlns= "AnetApi/xml/v1/schema/AnetApiSchema.xsd">
+ <merchantAuthentication>
+ <name>{$this->_api_login}</name>
+ <transactionKey>{$this->_transaction_key}</transactionKey>
+ </merchantAuthentication>
+ {$this->_request_payload}
+</ARB{$this->_request_type}>
+XML;
+ }
+
+}
+
+
+/**
+ * A class to parse a response from the ARB XML API.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetARB
+ */
+class AuthorizeNetARB_Response extends AuthorizeNetXMLResponse
+{
+
+ /**
+ * @return int
+ */
+ public function getSubscriptionId()
+ {
+ return $this->_getElementContents("subscriptionId");
+ }
+
+ /**
+ * @return string
+ */
+ public function getSubscriptionStatus()
+ {
+ return $this->_getElementContents("Status");
+ }
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * Easily interact with the Authorize.Net CIM XML API.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ * @link http://www.authorize.net/support/CIM_XML_guide.pdf CIM XML Guide
+ */
+
+
+
+/**
+ * A class to send a request to the CIM XML API.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetCIM extends AuthorizeNetRequest
+{
+
+ const LIVE_URL = "https://api.authorize.net/xml/v1/request.api";
+ const SANDBOX_URL = "https://apitest.authorize.net/xml/v1/request.api";
+
+
+ private $_xml;
+ private $_refId = false;
+ private $_validationMode = "none"; // "none","testMode","liveMode"
+ private $_extraOptions;
+ private $_transactionTypes = array(
+ 'AuthOnly',
+ 'AuthCapture',
+ 'CaptureOnly',
+ 'PriorAuthCapture',
+ 'Refund',
+ 'Void',
+ );
+
+ /**
+ * Optional. Used if the merchant wants to set a reference ID.
+ *
+ * @param string $refId
+ */
+ public function setRefId($refId)
+ {
+ $this->_refId = $refId;
+ }
+
+ /**
+ * Create a customer profile.
+ *
+ * @param AuthorizeNetCustomer $customerProfile
+ * @param string $validationMode
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function createCustomerProfile($customerProfile, $validationMode = "none")
+ {
+ $this->_validationMode = $validationMode;
+ $this->_constructXml("createCustomerProfileRequest");
+ $profile = $this->_xml->addChild("profile");
+ $this->_addObject($profile, $customerProfile);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Create a customer payment profile.
+ *
+ * @param int $customerProfileId
+ * @param AuthorizeNetPaymentProfile $paymentProfile
+ * @param string $validationMode
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function createCustomerPaymentProfile($customerProfileId, $paymentProfile, $validationMode = "none")
+ {
+ $this->_validationMode = $validationMode;
+ $this->_constructXml("createCustomerPaymentProfileRequest");
+ $this->_xml->addChild("customerProfileId", $customerProfileId);
+ $profile = $this->_xml->addChild("paymentProfile");
+ $this->_addObject($profile, $paymentProfile);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Create a shipping address.
+ *
+ * @param int $customerProfileId
+ * @param AuthorizeNetAddress $shippingAddress
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function createCustomerShippingAddress($customerProfileId, $shippingAddress)
+ {
+ $this->_constructXml("createCustomerShippingAddressRequest");
+ $this->_xml->addChild("customerProfileId", $customerProfileId);
+ $address = $this->_xml->addChild("address");
+ $this->_addObject($address, $shippingAddress);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Create a transaction.
+ *
+ * @param string $transactionType
+ * @param AuthorizeNetTransaction $transaction
+ * @param string $extraOptionsString
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function createCustomerProfileTransaction($transactionType, $transaction, $extraOptionsString = "")
+ {
+ $this->_constructXml("createCustomerProfileTransactionRequest");
+ $transactionParent = $this->_xml->addChild("transaction");
+ $transactionChild = $transactionParent->addChild("profileTrans" . $transactionType);
+ $this->_addObject($transactionChild, $transaction);
+ $this->_extraOptions = $extraOptionsString;
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Delete a customer profile.
+ *
+ * @param int $customerProfileId
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function deleteCustomerProfile($customerProfileId)
+ {
+ $this->_constructXml("deleteCustomerProfileRequest");
+ $this->_xml->addChild("customerProfileId", $customerProfileId);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Delete a payment profile.
+ *
+ * @param int $customerProfileId
+ * @param int $customerPaymentProfileId
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function deleteCustomerPaymentProfile($customerProfileId, $customerPaymentProfileId)
+ {
+ $this->_constructXml("deleteCustomerPaymentProfileRequest");
+ $this->_xml->addChild("customerProfileId", $customerProfileId);
+ $this->_xml->addChild("customerPaymentProfileId", $customerPaymentProfileId);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Delete a shipping address.
+ *
+ * @param int $customerProfileId
+ * @param int $customerAddressId
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function deleteCustomerShippingAddress($customerProfileId, $customerAddressId)
+ {
+ $this->_constructXml("deleteCustomerShippingAddressRequest");
+ $this->_xml->addChild("customerProfileId", $customerProfileId);
+ $this->_xml->addChild("customerAddressId", $customerAddressId);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Get all customer profile ids.
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function getCustomerProfileIds()
+ {
+ $this->_constructXml("getCustomerProfileIdsRequest");
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Get a customer profile.
+ *
+ * @param int $customerProfileId
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function getCustomerProfile($customerProfileId)
+ {
+ $this->_constructXml("getCustomerProfileRequest");
+ $this->_xml->addChild("customerProfileId", $customerProfileId);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Get a payment profile.
+ *
+ * @param int $customerProfileId
+ * @param int $customerPaymentProfileId
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function getCustomerPaymentProfile($customerProfileId, $customerPaymentProfileId)
+ {
+ $this->_constructXml("getCustomerPaymentProfileRequest");
+ $this->_xml->addChild("customerProfileId", $customerProfileId);
+ $this->_xml->addChild("customerPaymentProfileId", $customerPaymentProfileId);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Get a shipping address.
+ *
+ * @param int $customerProfileId
+ * @param int $customerAddressId
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function getCustomerShippingAddress($customerProfileId, $customerAddressId)
+ {
+ $this->_constructXml("getCustomerShippingAddressRequest");
+ $this->_xml->addChild("customerProfileId", $customerProfileId);
+ $this->_xml->addChild("customerAddressId", $customerAddressId);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Update a profile.
+ *
+ * @param int $customerProfileId
+ * @param AuthorizeNetCustomer $customerProfile
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function updateCustomerProfile($customerProfileId, $customerProfile)
+ {
+ $this->_constructXml("updateCustomerProfileRequest");
+ $customerProfile->customerProfileId = $customerProfileId;
+ $profile = $this->_xml->addChild("profile");
+ $this->_addObject($profile, $customerProfile);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Update a payment profile.
+ *
+ * @param int $customerProfileId
+ * @param int $customerPaymentProfileId
+ * @param AuthorizeNetPaymentProfile $paymentProfile
+ * @param string $validationMode
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function updateCustomerPaymentProfile($customerProfileId, $customerPaymentProfileId, $paymentProfile, $validationMode = "none")
+ {
+ $this->_validationMode = $validationMode;
+ $this->_constructXml("updateCustomerPaymentProfileRequest");
+ $this->_xml->addChild("customerProfileId", $customerProfileId);
+ $paymentProfile->customerPaymentProfileId = $customerPaymentProfileId;
+ $profile = $this->_xml->addChild("paymentProfile");
+ $this->_addObject($profile, $paymentProfile);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Update a shipping address.
+ *
+ * @param int $customerProfileId
+ * @param int $customerShippingAddressId
+ * @param AuthorizeNetAddress $shippingAddress
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function updateCustomerShippingAddress($customerProfileId, $customerShippingAddressId, $shippingAddress)
+ {
+
+ $this->_constructXml("updateCustomerShippingAddressRequest");
+ $this->_xml->addChild("customerProfileId", $customerProfileId);
+ $shippingAddress->customerAddressId = $customerShippingAddressId;
+ $sa = $this->_xml->addChild("address");
+ $this->_addObject($sa, $shippingAddress);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Update the status of an existing order that contains multiple transactions with the same splitTenderId.
+ *
+ * @param int $splitTenderId
+ * @param string $splitTenderStatus
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function updateSplitTenderGroup($splitTenderId, $splitTenderStatus)
+ {
+ $this->_constructXml("updateSplitTenderGroupRequest");
+ $this->_xml->addChild("splitTenderId", $splitTenderId);
+ $this->_xml->addChild("splitTenderStatus", $splitTenderStatus);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Validate a customer payment profile.
+ *
+ * @param int $customerProfileId
+ * @param int $customerPaymentProfileId
+ * @param int $customerShippingAddressId
+ * @param int $cardCode
+ * @param string $validationMode
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ public function validateCustomerPaymentProfile($customerProfileId, $customerPaymentProfileId, $customerShippingAddressId, $cardCode, $validationMode = "testMode")
+ {
+ $this->_validationMode = $validationMode;
+ $this->_constructXml("validateCustomerPaymentProfileRequest");
+ $this->_xml->addChild("customerProfileId",$customerProfileId);
+ $this->_xml->addChild("customerPaymentProfileId",$customerPaymentProfileId);
+ $this->_xml->addChild("customerShippingAddressId",$customerShippingAddressId);
+ $this->_xml->addChild("cardCode",$cardCode);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * @return string
+ */
+ protected function _getPostUrl()
+ {
+ return ($this->_sandbox ? self::SANDBOX_URL : self::LIVE_URL);
+ }
+
+ /**
+ *
+ *
+ * @param string $response
+ *
+ * @return AuthorizeNetCIM_Response
+ */
+ protected function _handleResponse($response)
+ {
+ return new AuthorizeNetCIM_Response($response);
+ }
+
+ /**
+ * Prepare the XML post string.
+ */
+ protected function _setPostString()
+ {
+ ($this->_validationMode != "none" ? $this->_xml->addChild('validationMode',$this->_validationMode) : "");
+ $this->_post_string = $this->_xml->asXML();
+
+ // Add extraOptions CDATA
+ if ($this->_extraOptions) {
+ $this->_xml->addChild("extraOptions");
+ $this->_post_string = str_replace("<extraOptions></extraOptions>",'<extraOptions><![CDATA[' . $this->_extraOptions . ']]></extraOptions>', $this->_xml->asXML());
+ $this->_extraOptions = false;
+ }
+ // Blank out our validation mode, so that we don't include it in calls that
+ // don't use it.
+ $this->_validationMode = "none";
+ }
+
+ /**
+ * Start the SimpleXMLElement that will be posted.
+ *
+ * @param string $request_type The action to be performed.
+ */
+ private function _constructXml($request_type)
+ {
+ $string = '<?xml version="1.0" encoding="utf-8"?><'.$request_type.' xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"></'.$request_type.'>';
+ $this->_xml = @new SimpleXMLElement($string);
+ $merchant = $this->_xml->addChild('merchantAuthentication');
+ $merchant->addChild('name',$this->_api_login);
+ $merchant->addChild('transactionKey',$this->_transaction_key);
+ ($this->_refId ? $this->_xml->addChild('refId',$this->_refId) : "");
+ }
+
+ /**
+ * Add an object to an SimpleXMLElement parent element.
+ *
+ * @param SimpleXMLElement $destination The parent element.
+ * @param Object $object An object, array or value.
+ */
+ private function _addObject($destination, $object)
+ {
+ $array = (array)$object;
+ foreach ($array as $key => $value) {
+ if ($value && !is_object($value)) {
+ if (is_array($value) && count($value)) {
+ foreach ($value as $index => $item) {
+ $items = $destination->addChild($key);
+ $this->_addObject($items, $item);
+ }
+ } else {
+ $destination->addChild($key,$value);
+ }
+ } elseif (is_object($value) && self::_notEmpty($value)) {
+ $dest = $destination->addChild($key);
+ $this->_addObject($dest, $value);
+ }
+ }
+ }
+
+ /**
+ * Checks whether an array or object contains any values.
+ *
+ * @param Object $object
+ *
+ * @return bool
+ */
+ private static function _notEmpty($object)
+ {
+ $array = (array)$object;
+ foreach ($array as $key => $value) {
+ if ($value && !is_object($value)) {
+ return true;
+ } elseif (is_object($value)) {
+ if (self::_notEmpty($value)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+}
+
+/**
+ * A class to parse a response from the CIM XML API.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetCIM_Response extends AuthorizeNetXMLResponse
+{
+ /**
+ * @return AuthorizeNetAIM_Response
+ */
+ public function getTransactionResponse()
+ {
+ return new AuthorizeNetAIM_Response($this->_getElementContents("directResponse"), ",", "", array());
+ }
+
+ /**
+ * @return array Array of AuthorizeNetAIM_Response objects for each payment profile.
+ */
+ public function getValidationResponses()
+ {
+ $responses = (array)$this->xml->validationDirectResponseList;
+ $return = array();
+ foreach ((array)$responses["string"] as $response) {
+ $return[] = new AuthorizeNetAIM_Response($response, ",", "", array());
+ }
+ return $return;
+ }
+
+ /**
+ * @return AuthorizeNetAIM_Response
+ */
+ public function getValidationResponse()
+ {
+ return new AuthorizeNetAIM_Response($this->_getElementContents("validationDirectResponse"), ",", "", array());
+ }
+
+ /**
+ * @return array
+ */
+ public function getCustomerProfileIds()
+ {
+ $ids = (array)$this->xml->ids;
+ return $ids["numericString"];
+ }
+
+ /**
+ * @return array
+ */
+ public function getCustomerPaymentProfileIds()
+ {
+ $ids = (array)$this->xml->customerPaymentProfileIdList;
+ return $ids["numericString"];
+ }
+
+ /**
+ * @return array
+ */
+ public function getCustomerShippingAddressIds()
+ {
+ $ids = (array)$this->xml->customerShippingAddressIdList;
+ return $ids["numericString"];
+ }
+
+ /**
+ * @return string
+ */
+ public function getCustomerAddressId()
+ {
+ return $this->_getElementContents("customerAddressId");
+ }
+
+ /**
+ * @return string
+ */
+ public function getCustomerProfileId()
+ {
+ return $this->_getElementContents("customerProfileId");
+ }
+
+ /**
+ * @return string
+ */
+ public function getPaymentProfileId()
+ {
+ return $this->_getElementContents("customerPaymentProfileId");
+ }
+
+}
--- /dev/null
+<?php
+/**
+ * Easily interact with the Authorize.Net Card Present API.
+ *
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCP
+ * @link http://www.authorize.net/support/CP_guide.pdf Card Present Guide
+ */
+
+
+/**
+ * Builds and sends an AuthorizeNet CP Request.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCP
+ */
+class AuthorizeNetCP extends AuthorizeNetAIM
+{
+
+ const LIVE_URL = 'https://cardpresent.authorize.net/gateway/transact.dll';
+
+ public $verify_x_fields = false;
+
+ /**
+ * Holds all the x_* name/values that will be posted in the request.
+ * Default values are provided for best practice fields.
+ */
+ protected $_x_post_fields = array(
+ "cpversion" => "1.0",
+ "delim_char" => ",",
+ "encap_char" => "|",
+ "market_type" => "2",
+ "response_format" => "1", // 0 - XML, 1 - NVP
+ );
+
+ /**
+ * Device Types (x_device_type)
+ * 1 = Unknown
+ * 2 = Unattended Terminal
+ * 3 = Self Service Terminal
+ * 4 = Electronic Cash Register
+ * 5 = Personal Computer- Based Terminal
+ * 6 = AirPay
+ * 7 = Wireless POS
+ * 8 = Website
+ * 9 = Dial Terminal
+ * 10 = Virtual Terminal
+ */
+
+ /**
+ * Strip sentinels and set track1 field.
+ *
+ * @param string $track1data
+ */
+ public function setTrack1Data($track1data) {
+ if (preg_match('/^%.*\?$/', $track1data)) {
+ $this->track1 = substr($track1data, 1, -1);
+ } else {
+ $this->track1 = $track1data;
+ }
+ }
+
+ /**
+ * Strip sentinels and set track2 field.
+ *
+ * @param string $track2data
+ */
+ public function setTrack2Data($track2data) {
+ if (preg_match('/^;.*\?$/', $track2data)) {
+ $this->track2 = substr($track2data, 1, -1);
+ } else {
+ $this->track2 = $track2data;
+ }
+ }
+
+ /**
+ *
+ *
+ * @param string $response
+ *
+ * @return AuthorizeNetAIM_Response
+ */
+ protected function _handleResponse($response)
+ {
+ return new AuthorizeNetCP_Response($response, $this->_x_post_fields['delim_char'], $this->_x_post_fields['encap_char'], $this->_custom_fields);
+ }
+
+}
+
+
+/**
+ * Parses an AuthorizeNet Card Present Response.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCP
+ */
+class AuthorizeNetCP_Response extends AuthorizeNetResponse
+{
+ private $_response_array = array(); // An array with the split response.
+
+ /**
+ * Constructor. Parses the AuthorizeNet response string.
+ *
+ * @param string $response The response from the AuthNet server.
+ * @param string $delimiter The delimiter used (default is ",")
+ * @param string $encap_char The encap_char used (default is "|")
+ * @param array $custom_fields Any custom fields set in the request.
+ */
+ public function __construct($response, $delimiter, $encap_char, $custom_fields)
+ {
+ if ($response) {
+
+ // If it's an XML response
+ if (substr($response, 0, 5) == "<?xml") {
+
+ $this->xml = @simplexml_load_string($response);
+ // Set all fields
+ $this->version = array_pop(array_slice(explode('"', $response), 1,1));
+ $this->response_code = (string)$this->xml->ResponseCode;
+
+ if ($this->response_code == 1) {
+ $this->response_reason_code = (string)$this->xml->Messages->Message->Code;
+ $this->response_reason_text = (string)$this->xml->Messages->Message->Description;
+ } else {
+ $this->response_reason_code = (string)$this->xml->Errors->Error->ErrorCode;
+ $this->response_reason_text = (string)$this->xml->Errors->Error->ErrorText;
+ }
+
+ $this->authorization_code = (string)$this->xml->AuthCode;
+ $this->avs_code = (string)$this->xml->AVSResultCode;
+ $this->card_code_response = (string)$this->xml->CVVResultCode;
+ $this->transaction_id = (string)$this->xml->TransID;
+ $this->md5_hash = (string)$this->xml->TransHash;
+ $this->user_ref = (string)$this->xml->UserRef;
+ $this->card_num = (string)$this->xml->AccountNumber;
+ $this->card_type = (string)$this->xml->AccountType;
+ $this->test_mode = (string)$this->xml->TestMode;
+ $this->ref_trans_id = (string)$this->xml->RefTransID;
+
+
+ } else { // If it's an NVP response
+
+ // Split Array
+ $this->response = $response;
+ if ($encap_char) {
+ $this->_response_array = explode($encap_char.$delimiter.$encap_char, substr($response, 1, -1));
+ } else {
+ $this->_response_array = explode($delimiter, $response);
+ }
+
+ /**
+ * If AuthorizeNet doesn't return a delimited response.
+ */
+ if (count($this->_response_array) < 10) {
+ $this->approved = false;
+ $this->error = true;
+ $this->error_message = "Unrecognized response from AuthorizeNet: $response";
+ return;
+ }
+
+
+
+ // Set all fields
+ $this->version = $this->_response_array[0];
+ $this->response_code = $this->_response_array[1];
+ $this->response_reason_code = $this->_response_array[2];
+ $this->response_reason_text = $this->_response_array[3];
+ $this->authorization_code = $this->_response_array[4];
+ $this->avs_code = $this->_response_array[5];
+ $this->card_code_response = $this->_response_array[6];
+ $this->transaction_id = $this->_response_array[7];
+ $this->md5_hash = $this->_response_array[8];
+ $this->user_ref = $this->_response_array[9];
+ $this->card_num = $this->_response_array[20];
+ $this->card_type = $this->_response_array[21];
+ $this->split_tender_id = $this->_response_array[22];
+ $this->requested_amount = $this->_response_array[23];
+ $this->approved_amount = $this->_response_array[24];
+ $this->card_balance = $this->_response_array[25];
+
+
+
+ }
+ $this->approved = ($this->response_code == self::APPROVED);
+ $this->declined = ($this->response_code == self::DECLINED);
+ $this->error = ($this->response_code == self::ERROR);
+ $this->held = ($this->response_code == self::HELD);
+
+
+ if ($this->error) {
+ $this->error_message = "AuthorizeNet Error:
+ Response Code: ".$this->response_code."
+ Response Reason Code: ".$this->response_reason_code."
+ Response Reason Text: ".$this->response_reason_text."
+ ";
+ }
+
+ } else {
+ $this->approved = false;
+ $this->error = true;
+ $this->error_message = "Error connecting to AuthorizeNet";
+ }
+ }
+
+ /**
+ * Is the MD5 provided correct?
+ *
+ * @param string $api_login_id
+ * @param string $md5_setting
+ * @return bool
+ */
+ public function isAuthorizeNet($api_login_id = false, $md5_setting = false)
+ {
+ $amount = ($this->amount ? $this->amount : '0.00');
+ $api_login_id = ($api_login_id ? $api_login_id : AUTHORIZENET_API_LOGIN_ID);
+ $md5_setting = ($md5_setting ? $md5_setting : AUTHORIZENET_MD5_SETTING);
+ return ($this->md5_hash == strtoupper(md5($md5_setting . $api_login_id . $this->transaction_id . $amount)));
+ }
+
+}
+
--- /dev/null
+<?php
+/**
+ * Demonstrates the Direct Post Method.
+ *
+ * To implement the Direct Post Method you need to implement 3 steps:
+ *
+ * Step 1: Add necessary hidden fields to your checkout form and make your form is set to post to AuthorizeNet.
+ *
+ * Step 2: Receive a response from AuthorizeNet, do your business logic, and return
+ * a relay response snippet with a url to redirect the customer to.
+ *
+ * Step 3: Show a receipt page to your customer.
+ *
+ * This class is more for demonstration purposes than actual production use.
+ *
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetDPM
+ */
+
+/**
+ * A class that demonstrates the DPM method.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetDPM
+ */
+class AuthorizeNetDPM extends AuthorizeNetSIM_Form
+{
+
+ const LIVE_URL = 'https://secure.authorize.net/gateway/transact.dll';
+ const SANDBOX_URL = 'https://test.authorize.net/gateway/transact.dll';
+
+ /**
+ * Implements all 3 steps of the Direct Post Method for demonstration
+ * purposes.
+ */
+ public static function directPostDemo($url, $api_login_id, $transaction_key, $amount = "0.00", $md5_setting = "")
+ {
+
+ // Step 1: Show checkout form to customer.
+ if (!count($_POST) && !count($_GET))
+ {
+ $fp_sequence = time(); // Any sequential number like an invoice number.
+ echo AuthorizeNetDPM::getCreditCardForm($amount, $fp_sequence, $url, $api_login_id, $transaction_key);
+ }
+ // Step 2: Handle AuthorizeNet Transaction Result & return snippet.
+ elseif (count($_POST))
+ {
+ $response = new AuthorizeNetSIM($api_login_id, $md5_setting);
+ if ($response->isAuthorizeNet())
+ {
+ if ($response->approved)
+ {
+ // Do your processing here.
+ $redirect_url = $url . '?response_code=1&transaction_id=' . $response->transaction_id;
+ }
+ else
+ {
+ // Redirect to error page.
+ $redirect_url = $url . '?response_code='.$response->response_code . '&response_reason_text=' . $response->response_reason_text;
+ }
+ // Send the Javascript back to AuthorizeNet, which will redirect user back to your site.
+ echo AuthorizeNetDPM::getRelayResponseSnippet($redirect_url);
+ }
+ else
+ {
+ echo "Error -- not AuthorizeNet. Check your MD5 Setting.";
+ }
+ }
+ // Step 3: Show receipt page to customer.
+ elseif (!count($_POST) && count($_GET))
+ {
+ if ($_GET['response_code'] == 1)
+ {
+ echo "Thank you for your purchase! Transaction id: " . htmlentities($_GET['transaction_id']);
+ }
+ else
+ {
+ echo "Sorry, an error occurred: " . htmlentities($_GET['response_reason_text']);
+ }
+ }
+ }
+
+ /**
+ * A snippet to send to AuthorizeNet to redirect the user back to the
+ * merchant's server. Use this on your relay response page.
+ *
+ * @param string $redirect_url Where to redirect the user.
+ *
+ * @return string
+ */
+ public static function getRelayResponseSnippet($redirect_url)
+ {
+ return "<html><head><script language=\"javascript\">
+ <!--
+ window.location=\"{$redirect_url}\";
+ //-->
+ </script>
+ </head><body><noscript><meta http-equiv=\"refresh\" content=\"1;url={$redirect_url}\"></noscript></body></html>";
+ }
+
+ /**
+ * Generate a sample form for use in a demo Direct Post implementation.
+ *
+ * @param string $amount Amount of the transaction.
+ * @param string $fp_sequence Sequential number(ie. Invoice #)
+ * @param string $relay_response_url The Relay Response URL
+ * @param string $api_login_id Your API Login ID
+ * @param string $transaction_key Your API Tran Key.
+ * @param bool $test_mode Use the sandbox?
+ * @param bool $prefill Prefill sample values(for test purposes).
+ *
+ * @return string
+ */
+ public static function getCreditCardForm($amount, $fp_sequence, $relay_response_url, $api_login_id, $transaction_key, $test_mode = true, $prefill = true)
+ {
+ $time = time();
+ $fp = self::getFingerprint($api_login_id, $transaction_key, $amount, $fp_sequence, $time);
+ $sim = new AuthorizeNetSIM_Form(
+ array(
+ 'x_amount' => $amount,
+ 'x_fp_sequence' => $fp_sequence,
+ 'x_fp_hash' => $fp,
+ 'x_fp_timestamp' => $time,
+ 'x_relay_response'=> "TRUE",
+ 'x_relay_url' => $relay_response_url,
+ 'x_login' => $api_login_id,
+ )
+ );
+ $hidden_fields = $sim->getHiddenFieldString();
+ $post_url = ($test_mode ? self::SANDBOX_URL : self::LIVE_URL);
+
+ $form = '
+ <style>
+ fieldset {
+ overflow: auto;
+ border: 0;
+ margin: 0;
+ padding: 0; }
+
+ fieldset div {
+ float: left; }
+
+ fieldset.centered div {
+ text-align: center; }
+
+ label {
+ color: #183b55;
+ display: block;
+ margin-bottom: 5px; }
+
+ label img {
+ display: block;
+ margin-bottom: 5px; }
+
+ input.text {
+ border: 1px solid #bfbab4;
+ margin: 0 4px 8px 0;
+ padding: 6px;
+ color: #1e1e1e;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+ -webkit-box-shadow: inset 0px 5px 5px #eee;
+ -moz-box-shadow: inset 0px 5px 5px #eee;
+ box-shadow: inset 0px 5px 5px #eee; }
+ .submit {
+ display: block;
+ background-color: #76b2d7;
+ border: 1px solid #766056;
+ color: #3a2014;
+ margin: 13px 0;
+ padding: 8px 16px;
+ -webkit-border-radius: 12px;
+ -moz-border-radius: 12px;
+ border-radius: 12px;
+ font-size: 14px;
+ -webkit-box-shadow: inset 3px -3px 3px rgba(0,0,0,.5), inset 0 3px 3px rgba(255,255,255,.5), inset -3px 0 3px rgba(255,255,255,.75);
+ -moz-box-shadow: inset 3px -3px 3px rgba(0,0,0,.5), inset 0 3px 3px rgba(255,255,255,.5), inset -3px 0 3px rgba(255,255,255,.75);
+ box-shadow: inset 3px -3px 3px rgba(0,0,0,.5), inset 0 3px 3px rgba(255,255,255,.5), inset -3px 0 3px rgba(255,255,255,.75); }
+ </style>
+ <form method="post" action="'.$post_url.'">
+ '.$hidden_fields.'
+ <fieldset>
+ <div>
+ <label>Credit Card Number</label>
+ <input type="text" class="text" size="15" name="x_card_num" value="'.($prefill ? '6011000000000012' : '').'"></input>
+ </div>
+ <div>
+ <label>Exp.</label>
+ <input type="text" class="text" size="4" name="x_exp_date" value="'.($prefill ? '04/17' : '').'"></input>
+ </div>
+ <div>
+ <label>CCV</label>
+ <input type="text" class="text" size="4" name="x_card_code" value="'.($prefill ? '782' : '').'"></input>
+ </div>
+ </fieldset>
+ <fieldset>
+ <div>
+ <label>First Name</label>
+ <input type="text" class="text" size="15" name="x_first_name" value="'.($prefill ? 'John' : '').'"></input>
+ </div>
+ <div>
+ <label>Last Name</label>
+ <input type="text" class="text" size="14" name="x_last_name" value="'.($prefill ? 'Doe' : '').'"></input>
+ </div>
+ </fieldset>
+ <fieldset>
+ <div>
+ <label>Address</label>
+ <input type="text" class="text" size="26" name="x_address" value="'.($prefill ? '123 Main Street' : '').'"></input>
+ </div>
+ <div>
+ <label>City</label>
+ <input type="text" class="text" size="15" name="x_city" value="'.($prefill ? 'Boston' : '').'"></input>
+ </div>
+ </fieldset>
+ <fieldset>
+ <div>
+ <label>State</label>
+ <input type="text" class="text" size="4" name="x_state" value="'.($prefill ? 'MA' : '').'"></input>
+ </div>
+ <div>
+ <label>Zip Code</label>
+ <input type="text" class="text" size="9" name="x_zip" value="'.($prefill ? '02142' : '').'"></input>
+ </div>
+ <div>
+ <label>Country</label>
+ <input type="text" class="text" size="22" name="x_country" value="'.($prefill ? 'US' : '').'"></input>
+ </div>
+ </fieldset>
+ <input type="submit" value="BUY" class="submit buy">
+ </form>';
+ return $form;
+ }
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * Easily use the Authorize.Net Server Integration Method(SIM).
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetSIM
+ * @link http://www.authorize.net/support/SIM_guide.pdf SIM Guide
+ */
+
+/**
+ * Easily parse an AuthorizeNet SIM Response.
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetSIM
+ */
+class AuthorizeNetSIM extends AuthorizeNetResponse
+{
+
+ // For ARB transactions
+ public $subscription_id;
+ public $subscription_paynum;
+
+ /**
+ * Constructor.
+ *
+ * @param string $api_login_id
+ * @param string $md5_setting For verifying an Authorize.Net message.
+ */
+ public function __construct($api_login_id = false, $md5_setting = false)
+ {
+ $this->api_login_id = ($api_login_id ? $api_login_id : (defined('AUTHORIZENET_API_LOGIN_ID') ? AUTHORIZENET_API_LOGIN_ID : ""));
+ $this->md5_setting = ($md5_setting ? $md5_setting : (defined('AUTHORIZENET_MD5_SETTING') ? AUTHORIZENET_MD5_SETTING : ""));
+ $this->response = $_POST;
+
+ // Set fields without x_ prefix
+ foreach ($_POST as $key => $value) {
+ $name = substr($key, 2);
+ $this->$name = $value;
+ }
+
+ // Set some human readable fields
+ $map = array(
+ 'avs_response' => 'x_avs_code',
+ 'authorization_code' => 'x_auth_code',
+ 'transaction_id' => 'x_trans_id',
+ 'customer_id' => 'x_cust_id',
+ 'md5_hash' => 'x_MD5_Hash',
+ 'card_code_response' => 'x_cvv2_resp_code',
+ 'cavv_response' => 'x_cavv_response',
+ );
+ foreach ($map as $key => $value) {
+ $this->$key = (isset($_POST[$value]) ? $_POST[$value] : "");
+ }
+
+ $this->approved = ($this->response_code == self::APPROVED);
+ $this->declined = ($this->response_code == self::DECLINED);
+ $this->error = ($this->response_code == self::ERROR);
+ $this->held = ($this->response_code == self::HELD);
+ }
+
+ /**
+ * Verify the request is AuthorizeNet.
+ *
+ * @return bool
+ */
+ public function isAuthorizeNet()
+ {
+ return count($_POST) && $this->md5_hash && ($this->generateHash() == $this->md5_hash);
+ }
+
+ /**
+ * Generates an Md5 hash to compare against Authorize.Net's.
+ *
+ * @return string Hash
+ */
+ public function generateHash()
+ {
+ $amount = ($this->amount ? $this->amount : "0.00");
+ return strtoupper(md5($this->md5_setting . $this->api_login_id . $this->transaction_id . $amount));
+ }
+
+}
+
+/**
+ * A helper class for using hosted order page.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetSIM
+ */
+class AuthorizeNetSIM_Form
+{
+ public $x_address;
+ public $x_amount;
+ public $x_background_url;
+ public $x_card_num;
+ public $x_city;
+ public $x_color_background;
+ public $x_color_link;
+ public $x_color_text;
+ public $x_company;
+ public $x_country;
+ public $x_cust_id;
+ public $x_customer_ip;
+ public $x_description;
+ public $x_delim_data;
+ public $x_duplicate_window;
+ public $x_duty;
+ public $x_email;
+ public $x_email_customer;
+ public $x_fax;
+ public $x_first_name;
+ public $x_footer_email_receipt;
+ public $x_footer_html_payment_form;
+ public $x_footer_html_receipt;
+ public $x_fp_hash;
+ public $x_fp_sequence;
+ public $x_fp_timestamp;
+ public $x_freight;
+ public $x_header_email_receipt;
+ public $x_header_html_payment_form;
+ public $x_header_html_receipt;
+ public $x_invoice_num;
+ public $x_last_name;
+ public $x_line_item;
+ public $x_login;
+ public $x_logo_url;
+ public $x_method;
+ public $x_phone;
+ public $x_po_num;
+ public $x_receipt_link_method;
+ public $x_receipt_link_text;
+ public $x_receipt_link_url;
+ public $x_recurring_billing;
+ public $x_relay_response;
+ public $x_relay_url;
+ public $x_rename;
+ public $x_ship_to_address;
+ public $x_ship_to_company;
+ public $x_ship_to_country;
+ public $x_ship_to_city;
+ public $x_ship_to_first_name;
+ public $x_ship_to_last_name;
+ public $x_ship_to_state;
+ public $x_ship_to_zip;
+ public $x_show_form;
+ public $x_state;
+ public $x_tax;
+ public $x_tax_exempt;
+ public $x_test_request;
+ public $x_trans_id;
+ public $x_type;
+ public $x_version;
+ public $x_zip;
+
+ /**
+ * Constructor
+ *
+ * @param array $fields Fields to set.
+ */
+ public function __construct($fields = false)
+ {
+ // Set some best practice fields
+ $this->x_relay_response = "FALSE";
+ $this->x_version = "3.1";
+ $this->x_delim_char = ",";
+ $this->x_delim_data = "TRUE";
+
+ if ($fields) {
+ foreach ($fields as $key => $value) {
+ $this->$key = $value;
+ }
+ }
+ }
+
+ /**
+ * Get a string of HTML hidden fields for use in a form.
+ *
+ * @return string
+ */
+ public function getHiddenFieldString()
+ {
+ $array = (array)$this;
+ $string = "";
+ foreach ($array as $key => $value) {
+ if ($value) {
+ $string .= '<input type="hidden" name="'.$key.'" value="'.$value.'">';
+ }
+ }
+ return $string;
+ }
+
+ /**
+ * Generates a fingerprint needed for a hosted order form or DPM.
+ *
+ * @param string $api_login_id Login ID.
+ * @param string $transaction_key API key.
+ * @param string $amount Amount of transaction.
+ * @param string $fp_sequence An invoice number or random number.
+ * @param string $fp_timestamp Timestamp.
+ *
+ * @return string The fingerprint.
+ */
+ public static function getFingerprint($api_login_id, $transaction_key, $amount, $fp_sequence, $fp_timestamp)
+ {
+ $api_login_id = ($api_login_id ? $api_login_id : (defined('AUTHORIZENET_API_LOGIN_ID') ? AUTHORIZENET_API_LOGIN_ID : ""));
+ $transaction_key = ($transaction_key ? $transaction_key : (defined('AUTHORIZENET_TRANSACTION_KEY') ? AUTHORIZENET_TRANSACTION_KEY : ""));
+ if (function_exists('hash_hmac')) {
+ return hash_hmac("md5", $api_login_id . "^" . $fp_sequence . "^" . $fp_timestamp . "^" . $amount . "^", $transaction_key);
+ }
+ return bin2hex(mhash(MHASH_MD5, $api_login_id . "^" . $fp_sequence . "^" . $fp_timestamp . "^" . $amount . "^", $transaction_key));
+ }
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * A simple wrapper for the SOAP API as well as a helper function
+ * to generate a documentation file from the WSDL.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetSoap
+ */
+
+/**
+ * A simple wrapper for the SOAP API as well as a helper function
+ * to generate a documentation file from the WSDL.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetSoap
+ * @todo Make the doc file a usable class.
+ */
+class AuthorizeNetSOAP extends SoapClient
+{
+ const WSDL_URL = "https://api.authorize.net/soap/v1/Service.asmx?WSDL";
+ const LIVE_URL = "https://api.authorize.net/soap/v1/Service.asmx";
+ const SANDBOX_URL = "https://apitest.authorize.net/soap/v1/Service.asmx";
+
+ public $sandbox;
+
+ /**
+ * Constructor
+ */
+ public function __construct()
+ {
+ parent::__construct(self::WSDL_URL);
+ $this->__setLocation(self::SANDBOX_URL);
+ }
+
+ /**
+ * Switch between the sandbox or production gateway.
+ *
+ * @param bool
+ */
+ public function setSandbox($bool)
+ {
+ $this->__setLocation(($bool ? self::SANDBOX_URL : self::LIVE_URL));
+ }
+
+ /**
+ * Get all types as PHP Code.
+ * @return string
+ */
+ public function getSoapTypes()
+ {
+ $string = "";
+ $types = $this->__getTypes();
+ foreach ($types as $type) {
+ if (preg_match("/struct /",$type)) {
+ $type = preg_replace("/struct /","class ",$type);
+ $type = preg_replace("/ (\w+) (\w+);/"," // $1\n public \$$2;",$type);
+ $string .= $type ."\n";
+ }
+ }
+ return $string;
+ }
+
+ /**
+ * Get all methods as PHP Code.
+ * @return string
+ */
+ public function getSoapMethods()
+ {
+ $string = "";
+ $functions = array();
+ $methods = $this->__getFunctions();
+ foreach ($methods as $index => $method) {
+ $sig = explode(" ", $method, 2);
+ if (!isset($functions[$sig[1]])) {
+ $string .= " /**\n * @return {$sig[0]}\n */\n public function {$sig[1]} {}\n\n";
+ $functions[$sig[1]] = true;
+ }
+ }
+ return $string;
+ }
+
+ /**
+ * Create a file from the WSDL for reference.
+ */
+ public function saveSoapDocumentation($path)
+ {
+ $string = "<?php\n";
+ $string .= "/**\n";
+ $string .= " * Auto generated documentation for the AuthorizeNetSOAP API.\n";
+ $string .= " * Generated " . date("m/d/Y") . "\n";
+ $string .= " */\n";
+ $string .= "class AuthorizeNetSOAP\n";
+ $string .= "{\n" . $this->getSoapMethods() . "\n}\n\n" . $this->getSoapTypes() ."\n\n ?>";
+ return file_put_contents($path, $string);
+ }
+
+
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * Easily interact with the Authorize.Net Transaction Details XML API.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetTD
+ * @link http://www.authorize.net/support/ReportingGuide_XML.pdf Transaction Details XML Guide
+ */
+
+
+/**
+ * A class to send a request to the Transaction Details XML API.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetTD
+ */
+class AuthorizeNetTD extends AuthorizeNetRequest
+{
+
+ const LIVE_URL = "https://api.authorize.net/xml/v1/request.api";
+ const SANDBOX_URL = "https://apitest.authorize.net/xml/v1/request.api";
+
+ private $_xml;
+
+ /**
+ * This function returns information about a settled batch: Batch ID, Settlement Time, &
+ * Settlement State. If you specify includeStatistics, you also receive batch statistics
+ * by payment type.
+ *
+ *
+ * The detault date range is one day (the previous 24 hour period). The maximum date range is 31
+ * days. The merchant time zone is taken into consideration when calculating the batch date range,
+ * unless the Z is specified in the first and last settlement date
+ *
+ * @param bool $includeStatistics
+ * @param string $firstSettlementDate // yyyy-mmddTHH:MM:SS
+ * @param string $lastSettlementDate // yyyy-mmddTHH:MM:SS
+ * @param bool $utc // Use UTC instead of merchant time zone setting
+ *
+ * @return AuthorizeNetTD_Response
+ */
+ public function getSettledBatchList($includeStatistics = false, $firstSettlementDate = false, $lastSettlementDate = false, $utc = true)
+ {
+ $utc = ($utc ? "Z" : "");
+ $this->_constructXml("getSettledBatchListRequest");
+ ($includeStatistics ?
+ $this->_xml->addChild("includeStatistics", $includeStatistics) : null);
+ ($firstSettlementDate ?
+ $this->_xml->addChild("firstSettlementDate", $firstSettlementDate . $utc) : null);
+ ($lastSettlementDate ?
+ $this->_xml->addChild("lastSettlementDate", $lastSettlementDate . $utc) : null);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Return all settled batches for a certain month.
+ *
+ * @param int $month
+ * @param int $year
+ *
+ * @return AuthorizeNetTD_Response
+ */
+ public function getSettledBatchListForMonth($month = false, $year = false)
+ {
+ $month = ($month ? $month : date('m'));
+ $year = ($year ? $year : date('Y'));
+ $firstSettlementDate = substr(date('c',mktime(0, 0, 0, $month, 1, $year)),0,-6);
+ $lastSettlementDate = substr(date('c',mktime(0, 0, 0, $month+1, 0, $year)),0,-6);
+ return $this->getSettledBatchList(true, $firstSettlementDate, $lastSettlementDate);
+ }
+
+ /**
+ * This function returns limited transaction details for a specified batch ID
+ *
+ * @param int $batchId
+ *
+ * @return AuthorizeNetTD_Response
+ */
+ public function getTransactionList($batchId)
+ {
+ $this->_constructXml("getTransactionListRequest");
+ $this->_xml->addChild("batchId", $batchId);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * Return all transactions for a certain day.
+ *
+ * @param int $month
+ * @param int $day
+ * @param int $year
+ *
+ * @return array Array of SimpleXMLElments
+ */
+ public function getTransactionsForDay($month = false, $day = false, $year = false)
+ {
+ $transactions = array();
+ $month = ($month ? $month : date('m'));
+ $day = ($day ? $day : date('d'));
+ $year = ($year ? $year : date('Y'));
+ $firstSettlementDate = substr(date('c',mktime(0, 0, 0, (int)$month, (int)$day, (int)$year)),0,-6);
+ $lastSettlementDate = substr(date('c',mktime(0, 0, 0, (int)$month, (int)$day, (int)$year)),0,-6);
+ $response = $this->getSettledBatchList(true, $firstSettlementDate, $lastSettlementDate);
+ $batches = $response->xpath("batchList/batch");
+ foreach ($batches as $batch) {
+ $batch_id = (string)$batch->batchId;
+ $request = new AuthorizeNetTD;
+ $tran_list = $request->getTransactionList($batch_id);
+ $transactions = array_merge($transactions, $tran_list->xpath("transactions/transaction"));
+ }
+ return $transactions;
+ }
+
+ /**
+ * This function returns full transaction details for a specified transaction ID.
+ *
+ * @param int $transId
+ *
+ * @return AuthorizeNetTD_Response
+ */
+ public function getTransactionDetails($transId)
+ {
+ $this->_constructXml("getTransactionDetailsRequest");
+ $this->_xml->addChild("transId", $transId);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * This function returns statistics about the settled batch specified by $batchId.
+ *
+ * @param int $batchId
+ *
+ * @return AuthorizeNetTD_Response
+ */
+ public function getBatchStatistics($batchId)
+ {
+ $this->_constructXml("getBatchStatisticsRequest");
+ $this->_xml->addChild("batchId", $batchId);
+ return $this->_sendRequest();
+ }
+
+ /**
+ * This function returns the last 1000 unsettled transactions.
+ *
+ *
+ * @return AuthorizeNetTD_Response
+ */
+ public function getUnsettledTransactionList()
+ {
+ $this->_constructXml("getUnsettledTransactionListRequest");
+ return $this->_sendRequest();
+ }
+
+ /**
+ * @return string
+ */
+ protected function _getPostUrl()
+ {
+ return ($this->_sandbox ? self::SANDBOX_URL : self::LIVE_URL);
+ }
+
+ /**
+ *
+ *
+ * @param string $response
+ *
+ * @return AuthorizeNetTransactionDetails_Response
+ */
+ protected function _handleResponse($response)
+ {
+ return new AuthorizeNetTD_Response($response);
+ }
+
+ /**
+ * Prepare the XML post string.
+ */
+ protected function _setPostString()
+ {
+ $this->_post_string = $this->_xml->asXML();
+
+ }
+
+ /**
+ * Start the SimpleXMLElement that will be posted.
+ *
+ * @param string $request_type The action to be performed.
+ */
+ private function _constructXml($request_type)
+ {
+ $string = '<?xml version="1.0" encoding="utf-8"?><'.$request_type.' xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"></'.$request_type.'>';
+ $this->_xml = @new SimpleXMLElement($string);
+ $merchant = $this->_xml->addChild('merchantAuthentication');
+ $merchant->addChild('name',$this->_api_login);
+ $merchant->addChild('transactionKey',$this->_transaction_key);
+ }
+
+}
+
+/**
+ * A class to parse a response from the Transaction Details XML API.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetTD
+ */
+class AuthorizeNetTD_Response extends AuthorizeNetXMLResponse
+{
+
+
+}
--- /dev/null
+<?php\r
+/**\r
+ * Sends requests to the Authorize.Net gateways.\r
+ *\r
+ * @package AuthorizeNet\r
+ * @subpackage AuthorizeNetRequest\r
+ */\r
+abstract class AuthorizeNetRequest\r
+{\r
+ \r
+ protected $_api_login;\r
+ protected $_transaction_key;\r
+ protected $_post_string; \r
+ public $VERIFY_PEER = true; // Set to false if getting connection errors.\r
+ protected $_sandbox = true;\r
+ protected $_log_file = false;\r
+ \r
+ /**\r
+ * Set the _post_string\r
+ */\r
+ abstract protected function _setPostString();\r
+ \r
+ /**\r
+ * Handle the response string\r
+ */\r
+ abstract protected function _handleResponse($string);\r
+ \r
+ /**\r
+ * Get the post url. We need this because until 5.3 you\r
+ * you could not access child constants in a parent class.\r
+ */\r
+ abstract protected function _getPostUrl();\r
+ \r
+ /**\r
+ * Constructor.\r
+ *\r
+ * @param string $api_login_id The Merchant's API Login ID.\r
+ * @param string $transaction_key The Merchant's Transaction Key.\r
+ */\r
+ public function __construct($api_login_id = false, $transaction_key = false)\r
+ {\r
+ $this->_api_login = ($api_login_id ? $api_login_id : (defined('AUTHORIZENET_API_LOGIN_ID') ? AUTHORIZENET_API_LOGIN_ID : "9q52ab6YPsL"));\r
+ $this->_transaction_key = ($transaction_key ? $transaction_key : (defined('AUTHORIZENET_TRANSACTION_KEY') ? AUTHORIZENET_TRANSACTION_KEY : "728872Hz3aZ7Jqy9"));\r
+ $this->_sandbox = (defined('AUTHORIZENET_SANDBOX') ? AUTHORIZENET_SANDBOX : false);\r
+ $this->_log_file = (defined('AUTHORIZENET_LOG_FILE') ? AUTHORIZENET_LOG_FILE : true);\r
+ }\r
+ \r
+ /**\r
+ * Alter the gateway url.\r
+ *\r
+ * @param bool $bool Use the Sandbox.\r
+ */\r
+ public function setSandbox($bool)\r
+ {\r
+ $this->_sandbox = $bool;\r
+ }\r
+ \r
+ /**\r
+ * Set a log file.\r
+ *\r
+ * @param string $filepath Path to log file.\r
+ */\r
+ public function setLogFile($filepath)\r
+ {\r
+ $this->_log_file = $filepath;\r
+ }\r
+ \r
+ /**\r
+ * Return the post string.\r
+ *\r
+ * @return string\r
+ */\r
+ public function getPostString()\r
+ {\r
+ return $this->_post_string;\r
+ }\r
+ \r
+ /**\r
+ * Posts the request to AuthorizeNet & returns response.\r
+ *\r
+ * @return AuthorizeNetARB_Response The response.\r
+ */\r
+ protected function _sendRequest()\r
+ {\r
+ $this->_setPostString();\r
+ $post_url = $this->_getPostUrl();\r
+ $curl_request = curl_init($post_url);\r
+ curl_setopt($curl_request, CURLOPT_POSTFIELDS, $this->_post_string);\r
+ curl_setopt($curl_request, CURLOPT_HEADER, 0);\r
+ curl_setopt($curl_request, CURLOPT_TIMEOUT, 45);\r
+ curl_setopt($curl_request, CURLOPT_RETURNTRANSFER, 1);\r
+ curl_setopt($curl_request, CURLOPT_SSL_VERIFYHOST, 2);\r
+ if ($this->VERIFY_PEER) {\r
+ curl_setopt($curl_request, CURLOPT_CAINFO, dirname(dirname(__FILE__)) . '/ssl/cert.pem');\r
+ } else {\r
+ curl_setopt($curl_request, CURLOPT_SSL_VERIFYPEER, false);\r
+ }\r
+ \r
+ if (preg_match('/xml/',$post_url)) {\r
+ curl_setopt($curl_request, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));\r
+ }\r
+ \r
+ $response = curl_exec($curl_request);\r
+ \r
+ if ($this->_log_file) {\r
+ \r
+ if ($curl_error = curl_error($curl_request)) {\r
+ file_put_contents($this->_log_file, "----CURL ERROR----\n$curl_error\n\n", FILE_APPEND);\r
+ }\r
+ // Do not log requests that could contain CC info.\r
+ // file_put_contents($this->_log_file, "----Request----\n{$this->_post_string}\n", FILE_APPEND);\r
+ \r
+ file_put_contents($this->_log_file, "----Response----\n$response\n\n", FILE_APPEND);\r
+ }\r
+ curl_close($curl_request);\r
+ \r
+ return $this->_handleResponse($response);\r
+ }\r
+\r
+}\r
--- /dev/null
+<?php
+/**
+ * Base class for the AuthorizeNet AIM & SIM Responses.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetResponse
+ */
+
+
+/**
+ * Parses an AuthorizeNet Response.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetResponse
+ */
+class AuthorizeNetResponse
+{
+
+ const APPROVED = 1;
+ const DECLINED = 2;
+ const ERROR = 3;
+ const HELD = 4;
+
+ public $approved;
+ public $declined;
+ public $error;
+ public $held;
+ public $response_code;
+ public $response_subcode;
+ public $response_reason_code;
+ public $response_reason_text;
+ public $authorization_code;
+ public $avs_response;
+ public $transaction_id;
+ public $invoice_num;
+ public $description;
+ public $amount;
+ public $method;
+ public $transaction_type;
+ public $customer_id;
+ public $first_name;
+ public $last_name;
+ public $company;
+ public $address;
+ public $city;
+ public $state;
+ public $zip_code;
+ public $country;
+ public $phone;
+ public $fax;
+ public $email_address;
+ public $ship_to_first_name;
+ public $ship_to_last_name;
+ public $ship_to_company;
+ public $ship_to_address;
+ public $ship_to_city;
+ public $ship_to_state;
+ public $ship_to_zip_code;
+ public $ship_to_country;
+ public $tax;
+ public $duty;
+ public $freight;
+ public $tax_exempt;
+ public $purchase_order_number;
+ public $md5_hash;
+ public $card_code_response;
+ public $cavv_response; // cardholder_authentication_verification_response
+ public $account_number;
+ public $card_type;
+ public $split_tender_id;
+ public $requested_amount;
+ public $balance_on_card;
+ public $response; // The response string from AuthorizeNet.
+
+}
--- /dev/null
+<?php
+/**
+ * Classes for the various AuthorizeNet data types.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+
+
+/**
+ * A class that contains all fields for a CIM Customer Profile.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetCustomer
+{
+ public $merchantCustomerId;
+ public $description;
+ public $email;
+ public $paymentProfiles = array();
+ public $shipToList = array();
+ public $customerProfileId;
+
+}
+
+/**
+ * A class that contains all fields for a CIM Address.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetAddress
+{
+ public $firstName;
+ public $lastName;
+ public $company;
+ public $address;
+ public $city;
+ public $state;
+ public $zip;
+ public $country;
+ public $phoneNumber;
+ public $faxNumber;
+ public $customerAddressId;
+}
+
+/**
+ * A class that contains all fields for a CIM Payment Profile.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetPaymentProfile
+{
+
+ public $customerType;
+ public $billTo;
+ public $payment;
+ public $customerPaymentProfileId;
+
+ public function __construct()
+ {
+ $this->billTo = new AuthorizeNetAddress;
+ $this->payment = new AuthorizeNetPayment;
+ }
+
+}
+
+/**
+ * A class that contains all fields for a CIM Payment Type.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetPayment
+{
+ public $creditCard;
+ public $bankAccount;
+
+ public function __construct()
+ {
+ $this->creditCard = new AuthorizeNetCreditCard;
+ $this->bankAccount = new AuthorizeNetBankAccount;
+ }
+}
+
+/**
+ * A class that contains all fields for a CIM Transaction.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetTransaction
+{
+ public $amount;
+ public $tax;
+ public $shipping;
+ public $duty;
+ public $lineItems = array();
+ public $customerProfileId;
+ public $customerPaymentProfileId;
+ public $customerShippingAddressId;
+ public $creditCardNumberMasked;
+ public $bankRoutingNumberMasked;
+ public $bankAccountNumberMasked;
+ public $order;
+ public $taxExempt;
+ public $recurringBilling;
+ public $cardCode;
+ public $splitTenderId;
+ public $approvalCode;
+ public $transId;
+
+ public function __construct()
+ {
+ $this->tax = (object)array();
+ $this->tax->amount = "";
+ $this->tax->name = "";
+ $this->tax->description = "";
+
+ $this->shipping = (object)array();
+ $this->shipping->amount = "";
+ $this->shipping->name = "";
+ $this->shipping->description = "";
+
+ $this->duty = (object)array();
+ $this->duty->amount = "";
+ $this->duty->name = "";
+ $this->duty->description = "";
+
+ // line items
+
+ $this->order = (object)array();
+ $this->order->invoiceNumber = "";
+ $this->order->description = "";
+ $this->order->purchaseOrderNumber = "";
+ }
+
+}
+
+/**
+ * A class that contains all fields for a CIM Transaction Line Item.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetLineItem
+{
+ public $itemId;
+ public $name;
+ public $description;
+ public $quantity;
+ public $unitPrice;
+ public $taxable;
+
+}
+
+/**
+ * A class that contains all fields for a CIM Credit Card.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetCreditCard
+{
+ public $cardNumber;
+ public $expirationDate;
+ public $cardCode;
+}
+
+/**
+ * A class that contains all fields for a CIM Bank Account.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetCIM
+ */
+class AuthorizeNetBankAccount
+{
+ public $accountType;
+ public $routingNumber;
+ public $accountNumber;
+ public $nameOnAccount;
+ public $echeckType;
+ public $bankName;
+}
+
+/**
+ * A class that contains all fields for an AuthorizeNet ARB Subscription.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetARB
+ */
+class AuthorizeNet_Subscription
+{
+
+ public $name;
+ public $intervalLength;
+ public $intervalUnit;
+ public $startDate;
+ public $totalOccurrences;
+ public $trialOccurrences;
+ public $amount;
+ public $trialAmount;
+ public $creditCardCardNumber;
+ public $creditCardExpirationDate;
+ public $creditCardCardCode;
+ public $bankAccountAccountType;
+ public $bankAccountRoutingNumber;
+ public $bankAccountAccountNumber;
+ public $bankAccountNameOnAccount;
+ public $bankAccountEcheckType;
+ public $bankAccountBankName;
+ public $orderInvoiceNumber;
+ public $orderDescription;
+ public $customerId;
+ public $customerEmail;
+ public $customerPhoneNumber;
+ public $customerFaxNumber;
+ public $billToFirstName;
+ public $billToLastName;
+ public $billToCompany;
+ public $billToAddress;
+ public $billToCity;
+ public $billToState;
+ public $billToZip;
+ public $billToCountry;
+ public $shipToFirstName;
+ public $shipToLastName;
+ public $shipToCompany;
+ public $shipToAddress;
+ public $shipToCity;
+ public $shipToState;
+ public $shipToZip;
+ public $shipToCountry;
+
+ public function getXml()
+ {
+ $xml = "<subscription>
+ <name>{$this->name}</name>
+ <paymentSchedule>
+ <interval>
+ <length>{$this->intervalLength}</length>
+ <unit>{$this->intervalUnit}</unit>
+ </interval>
+ <startDate>{$this->startDate}</startDate>
+ <totalOccurrences>{$this->totalOccurrences}</totalOccurrences>
+ <trialOccurrences>{$this->trialOccurrences}</trialOccurrences>
+ </paymentSchedule>
+ <amount>{$this->amount}</amount>
+ <trialAmount>{$this->trialAmount}</trialAmount>
+ <payment>
+ <creditCard>
+ <cardNumber>{$this->creditCardCardNumber}</cardNumber>
+ <expirationDate>{$this->creditCardExpirationDate}</expirationDate>
+ <cardCode>{$this->creditCardCardCode}</cardCode>
+ </creditCard>
+ <bankAccount>
+ <accountType>{$this->bankAccountAccountType}</accountType>
+ <routingNumber>{$this->bankAccountRoutingNumber}</routingNumber>
+ <accountNumber>{$this->bankAccountAccountNumber}</accountNumber>
+ <nameOnAccount>{$this->bankAccountNameOnAccount}</nameOnAccount>
+ <echeckType>{$this->bankAccountEcheckType}</echeckType>
+ <bankName>{$this->bankAccountBankName}</bankName>
+ </bankAccount>
+ </payment>
+ <order>
+ <invoiceNumber>{$this->orderInvoiceNumber}</invoiceNumber>
+ <description>{$this->orderDescription}</description>
+ </order>
+ <customer>
+ <id>{$this->customerId}</id>
+ <email>{$this->customerEmail}</email>
+ <phoneNumber>{$this->customerPhoneNumber}</phoneNumber>
+ <faxNumber>{$this->customerFaxNumber}</faxNumber>
+ </customer>
+ <billTo>
+ <firstName>{$this->billToFirstName}</firstName>
+ <lastName>{$this->billToLastName}</lastName>
+ <company>{$this->billToCompany}</company>
+ <address>{$this->billToAddress}</address>
+ <city>{$this->billToCity}</city>
+ <state>{$this->billToState}</state>
+ <zip>{$this->billToZip}</zip>
+ <country>{$this->billToCountry}</country>
+ </billTo>
+ <shipTo>
+ <firstName>{$this->shipToFirstName}</firstName>
+ <lastName>{$this->shipToLastName}</lastName>
+ <company>{$this->shipToCompany}</company>
+ <address>{$this->shipToAddress}</address>
+ <city>{$this->shipToCity}</city>
+ <state>{$this->shipToState}</state>
+ <zip>{$this->shipToZip}</zip>
+ <country>{$this->shipToCountry}</country>
+ </shipTo>
+</subscription>";
+
+ $xml_clean = "";
+ // Remove any blank child elements
+ foreach (preg_split("/(\r?\n)/", $xml) as $key => $line) {
+ if (!preg_match('/><\//', $line)) {
+ $xml_clean .= $line . "\n";
+ }
+ }
+
+ // Remove any blank parent elements
+ $element_removed = 1;
+ // Recursively repeat if a change is made
+ while ($element_removed) {
+ $element_removed = 0;
+ if (preg_match('/<[a-z]+>[\r?\n]+\s*<\/[a-z]+>/i', $xml_clean)) {
+ $xml_clean = preg_replace('/<[a-z]+>[\r?\n]+\s*<\/[a-z]+>/i', '', $xml_clean);
+ $element_removed = 1;
+ }
+ }
+
+ // Remove any blank lines
+ // $xml_clean = preg_replace('/\r\n[\s]+\r\n/','',$xml_clean);
+ return $xml_clean;
+ }
+}
+
--- /dev/null
+<?php
+/**
+ * Base class for the AuthorizeNet ARB & CIM Responses.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetXML
+ */
+
+/**
+ * Base class for the AuthorizeNet ARB & CIM Responses.
+ *
+ * @package AuthorizeNet
+ * @subpackage AuthorizeNetXML
+ */
+class AuthorizeNetXMLResponse
+{
+
+ public $xml; // Holds a SimpleXML Element with response.
+
+ /**
+ * Constructor. Parses the AuthorizeNet response string.
+ *
+ * @param string $response The response from the AuthNet server.
+ */
+ public function __construct($response)
+ {
+ $this->response = $response;
+ if ($response) {
+ $this->xml = @simplexml_load_string($response);
+
+ // Remove namespaces for use with XPath.
+ $this->xpath_xml = @simplexml_load_string(preg_replace('/ xmlns:xsi[^>]+/','',$response));
+ }
+ }
+
+ /**
+ * Was the transaction successful?
+ *
+ * @return bool
+ */
+ public function isOk()
+ {
+ return ($this->getResultCode() == "Ok");
+ }
+
+ /**
+ * Run an xpath query on the cleaned XML response
+ *
+ * @param string $path
+ * @return array Returns an array of SimpleXMLElement objects or FALSE in case of an error.
+ */
+ public function xpath($path)
+ {
+ return $this->xpath_xml->xpath($path);
+ }
+
+ /**
+ * Was there an error?
+ *
+ * @return bool
+ */
+ public function isError()
+ {
+ return ($this->getResultCode() == "Error");
+ }
+
+ /**
+ * @return string
+ */
+ public function getErrorMessage()
+ {
+ return "Error: {$this->getResultCode()}
+ Message: {$this->getMessageText()}
+ {$this->getMessageCode()}";
+ }
+
+ /**
+ * @return string
+ */
+ public function getRefID()
+ {
+ return $this->_getElementContents("refId");
+ }
+
+ /**
+ * @return string
+ */
+ public function getResultCode()
+ {
+ return $this->_getElementContents("resultCode");
+ }
+
+ /**
+ * @return string
+ */
+ public function getMessageCode()
+ {
+ return $this->_getElementContents("code");
+ }
+
+ /**
+ * @return string
+ */
+ public function getMessageText()
+ {
+ return $this->_getElementContents("text");
+ }
+
+ /**
+ * Grabs the contents of a unique element.
+ *
+ * @param string
+ * @return string
+ */
+ protected function _getElementContents($elementName)
+ {
+ $start = "<$elementName>";
+ $end = "</$elementName>";
+ if (strpos($this->response,$start) === false || strpos($this->response,$end) === false) {
+ return false;
+ } else {
+ $start_position = strpos($this->response, $start)+strlen($start);
+ $end_position = strpos($this->response, $end);
+ return substr($this->response, $start_position, $end_position-$start_position);
+ }
+ }
+
+}
\ No newline at end of file
--- /dev/null
+-----BEGIN CERTIFICATE-----
+MIIEYTCCA0mgAwIBAgIESyDOMjANBgkqhkiG9w0BAQUFADCBsTELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
+Lm5ldC9ycGEgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
+KGMpIDIwMDkgRW50cnVzdCwgSW5jLjEuMCwGA1UEAxMlRW50cnVzdCBDZXJ0aWZp
+Y2F0aW9uIEF1dGhvcml0eSAtIEwxQzAeFw0xMDAzMzExNzA0MDBaFw0xMjAzMzAx
+NzMzNTdaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQG
+A1UEBxMNTW91bnRhaW4gVmlldzEgMB4GA1UEChMXQ3liZXJzb3VyY2UgQ29ycG9y
+YXRpb24xHTAbBgNVBAsTFFBsYXRpbnVtU1NMIFdpbGRjYXJkMRgwFgYDVQQDFA8q
+LmF1dGhvcml6ZS5uZXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOSIsv0X
+OFMm2cV74o2jSF7zkNGeLHkPsI10xsFXTG1xqjzq4eImAReA3eIp1oHvLmji4kea
+rmTbxoURYdsRsWkx61b2vDrKJwjGU+hPvTYna0M4I9fpDgmp7e/Q5TJBWqI7BX9N
+2ccL95/2rV0g021JJhkqYMDFERTYRqkLFLfNAgMBAAGjggEdMIIBGTALBgNVHQ8E
+BAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwMwYDVR0fBCwwKjAooCagJIYiaHR0
+cDovL2NybC5lbnRydXN0Lm5ldC9sZXZlbDFjLmNybDAzBggrBgEFBQcBAQQnMCUw
+IwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MEAGA1UdIAQ5MDcw
+NQYJKoZIhvZ9B0sCMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cuZW50cnVzdC5u
+ZXQvcnBhMB8GA1UdIwQYMBaAFB7xq4kG+EkPATN37hR67hl8kyhNMB0GA1UdDgQW
+BBQ/gzreJ5piCG2MLGy5XOBCVB9iTTAJBgNVHRMEAjAAMA0GCSqGSIb3DQEBBQUA
+A4IBAQCK6J1LZ3kGde6kzS4aGnPq5WUnJTdwB/ASIB15OOdK20Mdi7D0zF0Aevew
++f73shY3f7eozVmh8aCb7uDRojrBgLGdtj0vcRiqUm+e1LKf9p0XPdFMLGzh2E2W
++eLhBTMEYOgGPQDY/sf2MEKHRIgobccFI3LUUXylncY6+UKtUWJQ114duoZH0+o+
+RIlSRgGsGNYkWJ9+jeI6acvG15ahIzIfUx8m0vQp0Nri9/3p/HOezQjNdN0knTlR
+pRbXZJ65zOig2wjt4an0OfYnOcqpJ/2yslCv0/jKwumHeygVt68l3J4rH7nUwUzs
+B+JUkDiJgBD/+BFADuJkTJLMcn6t
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE8jCCA9qgAwIBAgIEOGPp/DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
+RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
+bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
+IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
+ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw0wOTEyMTAyMDQzNTRaFw0xOTEy
+MTAyMTEzNTRaMIGxMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNRW50cnVzdCwgSW5j
+LjE5MDcGA1UECxMwd3d3LmVudHJ1c3QubmV0L3JwYSBpcyBpbmNvcnBvcmF0ZWQg
+YnkgcmVmZXJlbmNlMR8wHQYDVQQLExYoYykgMjAwOSBFbnRydXN0LCBJbmMuMS4w
+LAYDVQQDEyVFbnRydXN0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gTDFDMIIB
+IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAl6MtPJ7eBdoTwhGNnY7jf8dL
+flqfs/9iq3PIKGu6EGSChxPNVxj/KM7A5g4GkVApg9Hywyrb2NtOBMwA64u2lty8
+qvpSdwTB2xnkrpz9PIsD7028GgNl+cGxP3KG8jiqGa4QiHgo2nXDPQKCApy5wWV3
+diRMmPdtMTj72/7bNwJ2oRiXpszeIAlJNiRpQvbkN2LxWW2pPO00nKOO29w61/cK
+b+8u2NWTWnrtCElo4kHjWpDBhlX8UUOd4LLEZ7TLMjEl8FSfS9Fv29Td/K9ebHiQ
+ld7KOki5eTybGdZ1BaD5iNfB6KUJ5BoV3IcjqrJ1jGMlh9j4PabCzGb/pWZoVQID
+AQABo4IBCzCCAQcwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wMwYI
+KwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5lbnRydXN0Lm5l
+dDAyBgNVHR8EKzApMCegJaAjhiFodHRwOi8vY3JsLmVudHJ1c3QubmV0LzIwNDhj
+YS5jcmwwOwYDVR0gBDQwMjAwBgRVHSAAMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly93
+d3cuZW50cnVzdC5uZXQvcnBhMB0GA1UdDgQWBBQe8auJBvhJDwEzd+4Ueu4ZfJMo
+TTAfBgNVHSMEGDAWgBRV5IHREYC+2Im5CKMx+aEkCRa5cDANBgkqhkiG9w0BAQUF
+AAOCAQEAB/ZfgoR/gEDHkDRGQiQDzi+ruoOeJXMN7awFacaH7aNc8lfBsUl2mk3y
+P93kDv4LPrmY2TKVHTL0Ae6cyMjlP+BTdmL83attPZSQ8sCzPJgnNl4olyL8G0DT
+Kw2ttVdt3w/jS+9zAhBl+hvQrDHV4w/oujIwg+5K0L/fIpB6vuw6G8RJBB3xroB3
+PEII26c7KKaAAQPmOaPr34BZG/MsvtxyRHmgbAelbU1EjkJoypR8Lja6hZ7NqsRe
+PFS+/i/qaZ0cHimbltjI/lGQ8SSmkAaz8Cmi/3gud1xFIdlEADHzvjJP9QoyDfz8
+uhZ2VrLWSJLyi6Y+t6xcaeoLP2ZFuQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEnzCCBAigAwIBAgIERp6RGjANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wOTAz
+MjMxNTE4MjdaFw0xOTAzMjMxNTQ4MjdaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5l
+dDFAMD4GA1UECxQ3d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkg
+cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5u
+ZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBB
+dXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+rU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
+Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3ed
+Vc3kw37XamSrhRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4
+LeksyZB2ZnuU4q941mVTXTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5
+CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N
+328mz8MYIWJmQ3DW1cAH4QIDAQABo4IBJzCCASMwDgYDVR0PAQH/BAQDAgEGMA8G
+A1UdEwEB/wQFMAMBAf8wMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdodHRw
+Oi8vb2NzcC5lbnRydXN0Lm5ldDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8vY3Js
+LmVudHJ1c3QubmV0L3NlcnZlcjEuY3JsMDsGA1UdIAQ0MDIwMAYEVR0gADAoMCYG
+CCsGAQUFBwIBFhpodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NQUzAdBgNVHQ4EFgQU
+VeSB0RGAvtiJuQijMfmhJAkWuXAwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX
+8+1i0BowGQYJKoZIhvZ9B0EABAwwChsEVjcuMQMCAIEwDQYJKoZIhvcNAQEFBQAD
+gYEAj2WiMI4mq4rsNRaY6QPwjRdfvExsAvZ0UuDCxh/O8qYRDKixDk2Ei3E277M1
+RfPB+JbFi1WkzGuDFiAy2r77r5u3n+F+hJ+ePFCnP1zCvouGuAiS7vhCKw0T43aF
+SApKv9ClOwqwVLht4wj5NI0LjosSzBcaM4eVyJ4K3FBTF3s=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
+MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
+ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
+b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
+bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
+U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
+A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
+I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
+wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
+AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
+oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
+BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
+dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
+MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
+b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
+dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
+MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
+E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
+MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
+hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
+95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
+2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDSTCCArKgAwIBAgIQfmO9EP9/fYY45sRzhqgfGzANBgkqhkiG9w0BAQUFADBM
+MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
+THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTA0MDkwMDAwMDBaFw0x
+MTA0MTEyMzU5NTlaMIGPMQswCQYDVQQGEwJVUzENMAsGA1UECBMEVXRhaDEWMBQG
+A1UEBxMNQW1lcmljYW4gRm9yazEcMBoGA1UEChMTQXV0aG9yaXplLk5ldCBDb3Jw
+LjEcMBoGA1UECxMTQVVUSE9SSVpFLk5FVCBDT1JQLjEdMBsGA1UEAxMUc2VjdXJl
+LmF1dGhvcml6ZS5uZXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAN0dh86L
+70MHbun7wTNGV0pNXsnebt3z9mCpndLUiBp5J/b57hQO5/HvevkhkDyCrky/Dn7y
+4SEJh6RHYuP4ZBk30DS8iH5dWCRHqSQgpMKhUl/+D7KHbVqgPzOpOR44TiSa1P5m
+Fv0qicvRR3iwSK/6ESywNvEJk1iiYPnpnnlvAgMBAAGjgecwgeQwDAYDVR0TAQH/
+BAIwADA2BgNVHR8ELzAtMCugKaAnhiVodHRwOi8vY3JsLnRoYXd0ZS5jb20vVGhh
+d3RlU0dDQ0EuY3JsMCgGA1UdJQQhMB8GCCsGAQUFBwMBBggrBgEFBQcDAgYJYIZI
+AYb4QgQBMHIGCCsGAQUFBwEBBGYwZDAiBggrBgEFBQcwAYYWaHR0cDovL29jc3Au
+dGhhd3RlLmNvbTA+BggrBgEFBQcwAoYyaHR0cDovL3d3dy50aGF3dGUuY29tL3Jl
+cG9zaXRvcnkvVGhhd3RlX1NHQ19DQS5jcnQwDQYJKoZIhvcNAQEFBQADgYEARa0l
+PaGn4TOw3KOMVu8eiSdho4Nmal6u9AWE3rWHDakO2/a1AkZTM2/Wpt6KI3fp6WWK
+LSsa9wLoVYSJ6pI7bmiJTvyx42yPP0PZXQSz05PHgTEGyW2jAn4N1hFvbTj28mZT
+jv2jd12xgrmX34nulLdydNaM8J7CauhMvqwwvZ0=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIDIzCCAoygAwIBAgIEMAAAAjANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJV
+UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVi
+bGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNTEzMDAw
+MDAwWhcNMTQwNTEyMjM1OTU5WjBMMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhh
+d3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBD
+QTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1NNn0I0Vf67NMf59HZGhPwtx
+PKzMyGT7Y/wySweUvW+Aui/hBJPAM/wJMyPpC3QrccQDxtLN4i/1CWPN/0ilAL/g
+5/OIty0y3pg25gqtAHvEZEo7hHUD8nCSfQ5i9SGraTaEMXWQ+L/HbIgbBpV8yeWo
+3nWhLHpo39XKHIdYYBkCAwEAAaOB/jCB+zASBgNVHRMBAf8ECDAGAQH/AgEAMAsG
+A1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAQYwKAYDVR0RBCEwH6QdMBsxGTAX
+BgNVBAMTEFByaXZhdGVMYWJlbDMtMTUwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDov
+L2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwMgYIKwYBBQUHAQEEJjAkMCIGCCsG
+AQUFBzABhhZodHRwOi8vb2NzcC50aGF3dGUuY29tMDQGA1UdJQQtMCsGCCsGAQUF
+BwMBBggrBgEFBQcDAgYJYIZIAYb4QgQBBgpghkgBhvhFAQgBMA0GCSqGSIb3DQEB
+BQUAA4GBAFWsY+reod3SkF+fC852vhNRj5PZBSvIG3dLrWlQoe7e3P3bB+noOZTc
+q3J5Lwa/q4FwxKjt6lM07e8eU9kGx1Yr0Vz00YqOtCuxN5BICEIlxT6Ky3/rbwTR
+bcV0oveifHtgPHfNDs5IAn8BL7abN+AqKjbc1YXWrOU/VG+WHgWv
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
+A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
+cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
+MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
+BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
+YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
+ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
+BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
+I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
+CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
+lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
+AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFCjCCA/KgAwIBAgIERWua3DANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
+VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
+Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
+KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
+cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA5MTIxMDIwNTU0M1oXDTE5MTIxMDIx
+MjU0M1owgbExCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
+NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvcnBhIGlzIGluY29ycG9yYXRlZCBieSBy
+ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA5IEVudHJ1c3QsIEluYy4xLjAsBgNV
+BAMTJUVudHJ1c3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBMMUUwggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2WwRUd90OJGbcKqHbgMxdx1/9UhZY
+2l+UBqm4trljDEcgguzHlU6LuHdSaj21h6nW4cx05abIwNRWT40u1gg+DExDPvBB
+k15G7znn2WUqDHZQJ71bDTMzB+D3oqmc4REzrWb80ix6qqNzFr6ThXUP1zeM+iO3
+ZPjjTG7tswW94jbbfN52RNqCcna2bv+UodCG9xDNSlqLsHWMZlKATkhMSYOmQNd3
+gRNNXnJ+SEYiqg/iPmWUOOFycf5KcQm6NX9ViT2B1bgoARB3NloQhdK9YIQrSWGU
+DN5MQGoqxHlghCSCMmlKmEviVhC6A0VRINPP2o5UG0W2erqXmlrYxtFfAgMBAAGj
+ggEnMIIBIzAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAzBggrBgEF
+BQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmVudHJ1c3QubmV0MDMG
+A1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZW50cnVzdC5uZXQvcm9vdGNhMS5j
+cmwwOwYDVR0gBDQwMjAwBgRVHSAAMCgwJgYIKwYBBQUHAgEWGmh0dHA6Ly93d3cu
+ZW50cnVzdC5uZXQvQ1BTMB0GA1UdDgQWBBRbQYqyxEPBvb/IVEFVneCWrf+5oTAf
+BgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAZBgkqhkiG9n0HQQAEDDAK
+GwRWNy4xAwIAgTANBgkqhkiG9w0BAQUFAAOCAQEAsjvSnsG8O0i23NhaGGZTw701
+DUhCLDUB2BCi4uONLLqmAxHta7FJy1/N7GCzutQC62FPTn7435BfTtOQAhxS2hIA
+L5tx2gQSFMGQgy4o0hBAEYsmLeuZVVRvYI7Fgx3Aoz/VihQ5ahsN79NadznPabS9
+aW9PeNOhhqObt9f7qi3w+iah+WcsiEulNNWD+0zxW3AiZhubWU9NzpjbQaT+GqPr
+OOb58TkCnUa2ycKePoK2H5/KSqixBl8QNDv92nusM07tprdL85H1nAsRktwTasjV
+8TttlmsB5CNMscHg0hIhnynUrZU9pvfnMsV1twtX2KT5wOzsMjMMTa7oCNXsqg==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEmzCCBASgAwIBAgIEQoctTDANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNzAx
+MDUxOTIwMzlaFw0xNzAxMDUxOTUwMzlaMIGwMQswCQYDVQQGEwJVUzEWMBQGA1UE
+ChMNRW50cnVzdCwgSW5jLjE5MDcGA1UECxMwd3d3LmVudHJ1c3QubmV0L0NQUyBp
+cyBpbmNvcnBvcmF0ZWQgYnkgcmVmZXJlbmNlMR8wHQYDVQQLExYoYykgMjAwNiBF
+bnRydXN0LCBJbmMuMS0wKwYDVQQDEyRFbnRydXN0IFJvb3QgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC2lbZD
+QvrGbSpvSN+UTDlXBe7DeRFBaDbt7P6aAY+hOCj89xBGZi5NHhqxGk7G0cCViLDJ
+/zGLMwPbt4N7PiCEXu2yViin+OC5QHE3xctHDpcqaMAilWIV20fZ9dAr/4JLya0+
+3kzbkIBQPwmKhADsMAo9GM37/SpZmiOVFyxFnh9uQ3ltDFyY/kinxSNHXF79buce
+tPZoRdGGg1uiio2x4ymA/iVxiK2+vI+sUpZLqlGN5BMxGehOTZ/brLNq1bw5VHHK
+enp/kN19HYDZgbtZJsIR/uaT4veA5GX7NDcOKYBwTa84hi6ef1evnheu6xzLKCFf
+thzY56IEIvnT2tjLAgMBAAGjggEnMIIBIzAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T
+AQH/BAUwAwEB/zAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9v
+Y3NwLmVudHJ1c3QubmV0MDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZW50
+cnVzdC5uZXQvc2VydmVyMS5jcmwwOwYDVR0gBDQwMjAwBgRVHSAAMCgwJgYIKwYB
+BQUHAgEWGmh0dHA6Ly93d3cuZW50cnVzdC5uZXQvQ1BTMB0GA1UdDgQWBBRokORn
+pKZTgMeGZqTx90tD+4S9bTAfBgNVHSMEGDAWgBTwF2ITVT2z/woAa/tQhJfz7WLQ
+GjAZBgkqhkiG9n0HQQAEDDAKGwRWNy4xAwIAgTANBgkqhkiG9w0BAQUFAAOBgQAM
+sIR8LRP+mj2/GAWVPSBIoxaBhxVQFaSIjZ9g1Dpv6y1uOoakqdLBnYl6CBykLbNH
+jg9kSm9mA4M/TzSUNqopbYuNAiIrjM13pXCVhpHRtr9SvjNqa5n5b+ESvgTLM7/1
+EhpORLpbFk0wufO0dM5u8mhWWN3Yof1UBfQjkYXJ+Q==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIFdDCCBFygAwIBAgIETCA3bTANBgkqhkiG9w0BAQUFADCBsTELMAkGA1UE
+BhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5l
+bnRydXN0Lm5ldC9ycGEgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEf
+MB0GA1UECxMWKGMpIDIwMDkgRW50cnVzdCwgSW5jLjEuMCwGA1UEAxMlRW50
+cnVzdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEwxRTAeFw0xMTAzMjMx
+NjQ4MzhaFw0xMzAzMjIyMzE4MDFaMIH4MQswCQYDVQQGEwJVUzETMBEGA1UE
+CBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzETMBEGCysG
+AQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgECEwhEZWxhd2FyZTEgMB4G
+A1UEChMXQ3liZXJzb3VyY2UgQ29ycG9yYXRpb24xHTAbBgNVBA8TFFByaXZh
+dGUgT3JnYW5pemF0aW9uMRwwGgYDVQQLExNBVVRIT1JJWkUuTkVUIENPUlAu
+MS0wDgYDVQQFEwcyODM4OTIxMBsGA1UEAxMUc2VjdXJlLmF1dGhvcml6ZS5u
+ZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvrwbLk7kDJnja
+13i9lcXhYlHIwCTKHegPRuAkGDO6hNH0yNVv10kQSWjKhZ6KnoEA2p0F92FN
+HwFTUfm0QGlaXW9kPc8nUi94hgY05iYwh96FHNdibqeO2r73GGol/RJkUO69
+ekqP1f+ABi7qWguL29cadX1DmOVQSkIeWc0xn9IVgS8dxnDzKwJ+41M5gLfM
+YAJQ/FOwjOpt0j/Kg+38iHZ71FM7ehceYFggn+7y0ZcAcDUx4l6sKBuqFXq7
+viMqP2/Np0TpzmJMi2X8Wy0FDYoilHb9qBJWkl2AYxfjLTTSu27OMAJYyvEM
+RmjOkLn7hQBPoSE6u3UKevtF2WPtAgMBAAGjggFJMIIBRTALBgNVHQ8EBAMC
+BaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMDMGCCsGAQUFBwEB
+BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZW50cnVzdC5uZXQwMwYD
+VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5lbnRydXN0Lm5ldC9sZXZlbDFl
+LmNybDBBBgNVHSAEOjA4MDYGCmCGSAGG+mwKAQIwKDAmBggrBgEFBQcCARYa
+aHR0cDovL3d3dy5lbnRydXN0Lm5ldC9ycGEwHwYDVR0RBBgwFoIUc2VjdXJl
+LmF1dGhvcml6ZS5uZXQwHwYDVR0jBBgwFoAUW0GKssRDwb2/yFRBVZ3glq3/
+uaEwHQYDVR0OBBYEFGZazQ8qcWqAiT+oFpV/D7WTbcGlMAkGA1UdEwQCMAAw
+DQYJKoZIhvcNAQEFBQADggEBAEG1lvV2JQXDXRmEXkDp5qpF6uj1eNfffViE
+QR6XCLPWIuaEcgnieTfFzRPEYbxzUY9jCqM62U37hUTDdMKjZas7fwaZ8RjE
+wQASNPrIsHFsXEb0Nbz58g3cY00teCH3qQ9N9uW3TC+OXiSz9aSBxYkHD/63
+2D1rzaZLVHXUoReMMbjwf69zLDN7qsy6VDksHMVjqQugZF0ZCLFPPH5jfdAx
+sOtocx7eyUovzO387ve8UMTdw6Anr9Ai7iVaYf4MpMqcuaHVet3QeE97Koy1
+mT3q9FmUGbXM+nCqSs/TQ4jSqOo4zqDnkK/cOgbzjsuJJZ/rCPSxaKvz3b/n
+wMWH7kM=
+-----END CERTIFICATE-----
\ No newline at end of file
--- /dev/null
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+class AuthorizeNetAIM_Sandbox_Test extends PHPUnit_Framework_TestCase
+{
+
+ public function testAuthCapture()
+ {
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '4111111111111111',
+ 'exp_date' => '0415'
+ )
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ }
+
+ public function testAuthCaptureSingleDigitMonth()
+ {
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '4111111111111111',
+ 'exp_date' => '415'
+ )
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ }
+
+ public function testAuthCaptureSingleDigitMonthWithSlash()
+ {
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '4111111111111111',
+ 'exp_date' => '4/15'
+ )
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ }
+
+ public function testAuthCaptureTwoDigitMonthWithSlash()
+ {
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '4111111111111111',
+ 'exp_date' => '04/15'
+ )
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ }
+
+ public function testAuthCaptureAlternate()
+ {
+ $sale = new AuthorizeNetAIM;
+ $sale->amount = rand(1, 10000);
+ $sale->card_num = '6011000000000012';
+ $sale->exp_date = '04/15';
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ }
+
+ public function testAuthCaptureShort()
+ {
+ $sale = new AuthorizeNetAIM;
+ $response = $sale->authorizeAndCapture(rand(1, 100), '6011000000000012', '04/16');
+ $this->assertTrue($response->approved);
+ }
+
+ public function testAuthCapturePartial()
+ {
+ $amount = 3.69;
+
+ $sale = new AuthorizeNetAIM;
+ $sale->amount = $amount;
+ $sale->card_num = '4222222222222';
+ $sale->zip = "46225";
+ $sale->exp_date = '04/15';
+ $sale->allow_partial_auth = true;
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->held);
+ $this->assertEquals("1.23", $response->amount);
+ $this->assertEquals($amount, $response->requested_amount);
+ $split_tender_id = $response->split_tender_id;
+
+ // Pay the balance with a different card
+ $sale = new AuthorizeNetAIM;
+ $sale->amount = $amount - $response->amount;
+ $sale->card_num = '6011000000000012';
+ $sale->exp_date = '04/20';
+ $sale->split_tender_id = $split_tender_id;
+ $sale->allow_partial_auth = true;
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+
+
+ }
+
+ public function testAuthCaptureShortNoVerify()
+ {
+ $sale = new AuthorizeNetAIM;
+ $sale->VERIFY_PEER = false;
+ $response = $sale->authorizeAndCapture(rand(1, 100), '6011000000000012', '04/19');
+ $this->assertTrue($response->approved);
+ }
+
+ // public function testVisaVerify()
+ // {
+ // return; // Remove to enable test
+ // $verify = new AuthorizeNetAIM;
+ // $verify->amount = "0.00";
+ // $verify->card_num = '4012888818888';
+ // $verify->exp_date = "0517";
+ // $verify->address = "123 Main Street";
+ // $verify->zip = "94110";
+ // $verify->authentication_indicator = "5";
+ // $verify->cardholder_authentication_value = "512";
+ // $response = $verify->authorizeOnly();
+ // $this->assertTrue($response->approved);
+ // }
+ //
+ // public function testVisaVerifyFail()
+ // {
+ // return; // Remove to enable test
+ // $verify = new AuthorizeNetAIM;
+ // $verify->amount = "0.00";
+ // $verify->card_num = '4012888818888';
+ // $verify->exp_date = "0517";
+ // $verify->address = "123 Main Street";
+ // $verify->zip = "94110";
+ // $verify->authentication_indicator = "5";
+ // $verify->cardholder_authentication_value = "";
+ // $response = $verify->authorizeOnly();
+ // $this->assertTrue($response->declined);
+ // }
+ //
+ // public function testMastercardVerify()
+ // {
+ // return; // Remove to enable test
+ // $verify = new AuthorizeNetAIM;
+ // $verify->amount = "0.00";
+ // $verify->card_num = '5424000000000015';
+ // $verify->exp_date = "0517";
+ // $verify->address = "123 Main Street";
+ // $verify->zip = "94110";
+ // $verify->authentication_indicator = "2";
+ // $verify->cardholder_authentication_value = "512";
+ // $response = $verify->authorizeOnly();
+ // $this->assertTrue($response->approved);
+ // }
+ //
+ // public function testMastercardVerifyFail()
+ // {
+ // return; // Remove to enable test
+ // $verify = new AuthorizeNetAIM;
+ // $verify->amount = "0.00";
+ // $verify->card_num = '5424000000000015';
+ // $verify->exp_date = "0517";
+ // $verify->address = "123 Main Street";
+ // $verify->zip = "94110";
+ // $verify->authentication_indicator = "2";
+ // $verify->cardholder_authentication_value = "";
+ // $response = $verify->authorizeOnly();
+ // $this->assertTrue($response->declined);
+ // }
+
+ public function testAimResponseFields()
+ {
+
+ $sale = new AuthorizeNetAIM;
+ $sale->card_num = '4111111111111111';
+ $sale->exp_date = '04/16';
+ $sale->amount = $amount = rand(1,99);
+ $sale->description = $description = "Sale description";
+ $sale->first_name = $first_name = "Jane";
+ $sale->last_name = $last_name = "Smith";
+ $sale->company = $company = "Jane Smith Enterprises Inc.";
+ $sale->address = $address = "20 Main Street";
+ $sale->city = $city = "San Francisco";
+ $sale->state = $state = "CA";
+ $sale->zip = $zip = "94110";
+ $sale->country = $country = "US";
+ $sale->phone = $phone = "415-555-5557";
+ $sale->fax = $fax = "415-555-5556";
+ $sale->email = $email = "foo@example.com";
+ $sale->cust_id = $customer_id = "55";
+ $sale->customer_ip = "98.5.5.5";
+ $sale->invoice_num = $invoice_num = "123";
+ $sale->ship_to_first_name = $ship_to_first_name = "John";
+ $sale->ship_to_last_name = $ship_to_last_name = "Smith";
+ $sale->ship_to_company = $ship_to_company = "Smith Enterprises Inc.";
+ $sale->ship_to_address = $ship_to_address = "10 Main Street";
+ $sale->ship_to_city = $ship_to_city = "San Francisco";
+ $sale->ship_to_state = $ship_to_state = "CA";
+ $sale->ship_to_zip = $ship_to_zip_code = "94110";
+ $sale->ship_to_country = $ship_to_country = "US";
+ $sale->tax = $tax = "0.00";
+ $sale->freight = $freight = "Freight<|>ground overnight<|>12.95";
+ $sale->duty = $duty = "Duty1<|>export<|>15.00";
+ $sale->tax_exempt = $tax_exempt = "FALSE";
+ $sale->po_num = $po_num = "12";
+
+
+
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ $this->assertEquals("1", $response->response_code);
+ $this->assertEquals("1", $response->response_subcode);
+ $this->assertEquals("1", $response->response_reason_code);
+ $this->assertEquals("This transaction has been approved.", $response->response_reason_text);
+ $this->assertGreaterThan(1, strlen($response->authorization_code));
+ $this->assertEquals("Y", $response->avs_response);
+ $this->assertGreaterThan(1, strlen($response->transaction_id));
+ $this->assertEquals($invoice_num, $response->invoice_num);
+ $this->assertEquals($description, $response->description);
+ $this->assertEquals($amount, $response->amount);
+ $this->assertEquals("CC", $response->method);
+ $this->assertEquals("auth_capture", $response->transaction_type);
+ $this->assertEquals($customer_id, $response->customer_id);
+ $this->assertEquals($first_name, $response->first_name);
+ $this->assertEquals($last_name, $response->last_name);
+ $this->assertEquals($company, $response->company);
+ $this->assertEquals($address, $response->address);
+ $this->assertEquals($city, $response->city);
+ $this->assertEquals($state, $response->state);
+ $this->assertEquals($zip, $response->zip_code);
+ $this->assertEquals($country, $response->country);
+ $this->assertEquals($phone, $response->phone);
+ $this->assertEquals($fax, $response->fax);
+ $this->assertEquals($email, $response->email_address);
+ $this->assertEquals($ship_to_first_name, $response->ship_to_first_name);
+ $this->assertEquals($ship_to_last_name, $response->ship_to_last_name);
+ $this->assertEquals($ship_to_company, $response->ship_to_company);
+ $this->assertEquals($ship_to_address, $response->ship_to_address);
+ $this->assertEquals($ship_to_city, $response->ship_to_city);
+ $this->assertEquals($ship_to_state, $response->ship_to_state);
+ $this->assertEquals($ship_to_zip_code, $response->ship_to_zip_code);
+ $this->assertEquals($ship_to_country, $response->ship_to_country);
+ $this->assertEquals($tax, $response->tax);
+ $this->assertEquals("15.00", $response->duty);
+ $this->assertEquals("12.95", $response->freight);
+ $this->assertEquals($tax_exempt, $response->tax_exempt);
+ $this->assertEquals($po_num, $response->purchase_order_number);
+ $this->assertGreaterThan(1, strlen($response->md5_hash));
+ $this->assertEquals("", $response->card_code_response);
+ $this->assertEquals("2", $response->cavv_response);
+ $this->assertEquals("XXXX1111", $response->account_number);
+ $this->assertEquals("Visa", $response->card_type);
+ $this->assertEquals("", $response->split_tender_id);
+ $this->assertEquals("", $response->requested_amount);
+ $this->assertEquals("", $response->balance_on_card);
+
+
+ }
+
+
+ public function testVoid()
+ {
+ // First create transaction to void.
+ $amount = rand(1, 1000);
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields(
+ array(
+ 'amount' => $amount,
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415'
+ )
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+
+ $void = new AuthorizeNetAIM;
+ $void->setFields(
+ array(
+ 'amount' => $amount,
+ 'card_num' => '6011000000000012',
+ 'trans_id' => $response->transaction_id,
+ )
+ );
+ $void_response = $void->Void();
+ $this->assertTrue($void_response->approved);
+ }
+
+ public function testVoidShort()
+ {
+ // First create transaction to void.
+ $amount = rand(1, 1000);
+ $card_num = '6011000000000012';
+ $exp_date = '0415';
+ $sale = new AuthorizeNetAIM;
+ $response = $sale->authorizeAndCapture($amount, $card_num, $exp_date);
+ $this->assertTrue($response->approved);
+
+ $void = new AuthorizeNetAIM;
+ $void_response = $void->void($response->transaction_id);
+ $this->assertTrue($void_response->approved);
+ }
+
+ public function testAuthCaptureECheckSandbox()
+ {
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'method' => 'echeck',
+ 'bank_aba_code' => '121042882',
+ 'bank_acct_num' => '123456789123',
+ 'bank_acct_type' => 'CHECKING',
+ 'bank_name' => 'Bank of Earth',
+ 'bank_acct_name' => 'Jane Doe',
+ 'echeck_type' => 'WEB',
+ )
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertEquals("ECHECK", $response->method);
+ $this->assertTrue($response->approved);
+
+ }
+
+ public function testAmex()
+ {
+ $sale = new AuthorizeNetAIM;
+ $response = $sale->authorizeAndCapture(rand(1, 100), '370000000000002', '04/16');
+ $this->assertTrue($response->approved);
+ }
+
+ public function testDiscover()
+ {
+ $sale = new AuthorizeNetAIM;
+ $response = $sale->authorizeAndCapture(rand(1, 100), '6011000000000012', '04/16');
+ $this->assertTrue($response->approved);
+ }
+
+ public function testVisa()
+ {
+ $sale = new AuthorizeNetAIM;
+ $response = $sale->authorizeAndCapture(rand(1, 100), '4012888818888', '04/16');
+ $this->assertTrue($response->approved);
+ }
+
+ // public function testJCB()
+ // {
+ // return; // Remove to enable test
+ // $sale = new AuthorizeNetAIM;
+ // $response = $sale->authorizeAndCapture(rand(1, 100), '3088000000000017', '0905');
+ // $this->assertTrue($response->approved);
+ // }
+ //
+ // public function testDinersClub()
+ // {
+ // return; // Remove to enable test
+ // $sale = new AuthorizeNetAIM;
+ // $response = $sale->authorizeAndCapture(rand(1, 100), '38000000000006', '0905');
+ // $this->assertTrue($response->approved);
+ // }
+
+ public function testAuthOnly()
+ {
+ $auth = new AuthorizeNetAIM;
+ $auth->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415'
+ )
+ );
+ $response = $auth->authorizeOnly();
+ $this->assertTrue($response->approved);
+ }
+
+ public function testAuthCaptureVoid()
+ {
+ $amount = rand(1, 1000);
+ $auth = new AuthorizeNetAIM;
+ $auth->setFields(
+ array(
+ 'amount' => $amount,
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415'
+ )
+ );
+ $auth_response = $auth->authorizeOnly();
+ $this->assertTrue($auth_response->approved);
+
+ // Now capture.
+ $capture = new AuthorizeNetAIM;
+ $capture->setFields(
+ array(
+ 'amount' => $amount,
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415',
+ 'trans_id' => $auth_response->transaction_id,
+ )
+ );
+ $capture_response = $capture->priorAuthCapture();
+ $this->assertTrue($capture_response->approved);
+
+ // Now void
+ $void = new AuthorizeNetAIM;
+ $void->setFields(
+ array(
+ 'amount' => $amount,
+ 'card_num' => '0012',
+ 'trans_id' => $auth_response->transaction_id,
+ )
+ );
+ $void_response = $void->void();
+ $this->assertTrue($void_response->approved);
+ }
+
+ // public function testCredit()
+ // {
+ //
+ // }
+ //
+ // public function testPriorAuthCapture()
+ // {
+ //
+ // }
+ //
+ // public function testCaptureOnly()
+ // {
+ //
+ // }
+
+ public function testAdvancedAIM()
+ {
+ $auth = new AuthorizeNetAIM;
+ $auth->amount = "45.00";
+
+ // Use eCheck:
+ $auth->setECheck(
+ '121042882',
+ '123456789123',
+ 'CHECKING',
+ 'Bank of Earth',
+ 'Jane Doe',
+ 'WEB'
+ );
+
+ // Set multiple line items:
+ $auth->addLineItem('item1', 'Golf tees', 'Blue tees', '2', '5.00', 'N');
+ $auth->addLineItem('item2', 'Golf shirt', 'XL', '1', '40.00', 'N');
+
+ // Set Invoice Number:
+ $auth->invoice_num = time();
+
+ // Set a Merchant Defined Field:
+ $auth->setCustomField("entrance_source", "Search Engine");
+
+ // Authorize Only:
+ $response = $auth->authorizeOnly();
+ $this->assertTrue($response->approved);
+ if ($response->approved) {
+ $auth_code = $response->transaction_id;
+
+ // Now capture:
+ $capture = new AuthorizeNetAIM;
+ $capture_response = $capture->priorAuthCapture($auth_code);
+ $this->assertTrue($capture_response->approved);
+
+ // Now void:
+ $void = new AuthorizeNetAIM;
+ $void_response = $void->void($capture_response->transaction_id);
+ $this->assertTrue($void_response->approved);
+ }
+ }
+
+ public function testAuthCaptureCustomFields()
+ {
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415'
+ )
+ );
+ $sale->setCustomField("foo", "bar");
+ $sale->setCustomField("foo2", "bar2");
+ $sale->setCustomField("foo3", "bar3");
+ $sale->setCustomField("foo4", "bar4");
+ $sale->setCustomField("foo5", "bar5");
+ $sale->setCustomField("My_MerchantField6", "My Merchant Value6");
+ $sale->setCustomField("foo7", "bar7");
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ $this->assertEquals("bar", $response->foo);
+ $this->assertEquals("bar2", $response->foo2);
+ }
+
+ public function testEncapCharacter()
+ {
+ $description = "john doe's present, with comma";
+ $amount = rand(1, 1000);
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields(
+ array(
+ 'amount' => $amount,
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415',
+ 'encap_char' => '$',
+ 'description' => $description,
+ )
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ $this->assertEquals($amount, $response->amount);
+ $this->assertEquals($description, $response->description);
+ }
+
+ public function testAuthCaptureSetMultipleCustomFields()
+ {
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415'
+ )
+ );
+ $sale->setCustomFields(array("foo" => "bar", "foo2" => "bar2"));
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ $this->assertEquals("bar", $response->foo);
+ $this->assertEquals("bar2", $response->foo2);
+ }
+
+ public function testInvalidMerchantCredentials()
+ {
+ $auth = new AuthorizeNetAIM('d', 'd');
+ $response = $auth->AuthorizeOnly();
+ $this->assertTrue($response->error);
+ $this->assertEquals($response->response_subcode, 2);
+ $this->assertEquals($response->response_reason_code, 13);
+ }
+
+ public function testInvalidCreditCard()
+ {
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '123',
+ 'exp_date' => '0415'
+ )
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertFalse($response->approved);
+ $this->assertTrue($response->error);
+ }
+
+ public function testError()
+ {
+ $sale = new AuthorizeNetAIM;
+ $sale->unsetField("login");
+ $sale->unsetField("tran_key");
+ $sale->unsetField("delim_data");
+
+ $sale->unsetField("version");
+ $sale->unsetField("relay_response");
+
+ $response = $sale->authorizeAndCapture();
+ // An exception should have been thrown.
+ $this->assertFalse($response->approved);
+ $this->assertTrue($response->error);
+
+ }
+
+ public function testMultipleLineItems()
+ {
+ $merchant = (object)array();
+ $merchant->login = AUTHORIZENET_API_LOGIN_ID;
+ $merchant->tran_key = AUTHORIZENET_TRANSACTION_KEY;
+ $merchant->allow_partial_auth = "false";
+
+ $creditCard = array(
+ 'exp_date' => '02/2012',
+ 'card_num' => '6011000000000012',
+ 'card_code' => '452',
+ );
+
+ $transaction = array(
+ 'amount' => rand(100, 1000),
+ 'duplicate_window' => '10',
+ // 'email_customer' => 'true',
+ 'footer_email_receipt' => 'thank you for your business!',
+ 'header_email_receipt' => 'a copy of your receipt is below',
+ );
+
+ $order = array(
+ 'description' => 'Johns Bday Gift',
+ 'invoice_num' => '3123',
+ 'line_item' => 'item1<|>golf balls<|><|>2<|>18.95<|>Y',
+ );
+
+ $customer = (object)array();
+ $customer->first_name = "Jane";
+ $customer->last_name = "Smith";
+ $customer->company = "Jane Smith Enterprises Inc.";
+ $customer->address = "20 Main Street";
+ $customer->city = "San Francisco";
+ $customer->state = "CA";
+ $customer->zip = "94110";
+ $customer->country = "US";
+ $customer->phone = "415-555-5557";
+ $customer->fax = "415-555-5556";
+ $customer->email = "foo@example.com";
+ $customer->cust_id = "55";
+ $customer->customer_ip = "98.5.5.5";
+
+ $shipping_info = (object)array();
+ $shipping_info->ship_to_first_name = "John";
+ $shipping_info->ship_to_last_name = "Smith";
+ $shipping_info->ship_to_company = "Smith Enterprises Inc.";
+ $shipping_info->ship_to_address = "10 Main Street";
+ $shipping_info->ship_to_city = "San Francisco";
+ $shipping_info->ship_to_state = "CA";
+ $shipping_info->ship_to_zip = "94110";
+ $shipping_info->ship_to_country = "US";
+ $shipping_info->tax = "CA";
+ $shipping_info->freight = "Freight<|>ground overnight<|>12.95";
+ $shipping_info->duty = "Duty1<|>export<|>15.00";
+ $shipping_info->tax_exempt = "false";
+ $shipping_info->po_num = "12";
+
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields($creditCard);
+ $sale->setFields($shipping_info);
+ $sale->setFields($customer);
+ $sale->setFields($order);
+ $sale->setFields($merchant);
+ $sale->setFields($transaction);
+
+ $sale->addLineItem('item2', 'golf tees', 'titanium tees', '2', '2.95', 'Y');
+ $sale->addLineItem('item3', 'golf shirt', 'red, large', '2', '3.95', 'Y');
+
+ $response = $sale->authorizeAndCapture();
+
+ $this->assertTrue($response->approved);
+ }
+
+ public function testAllFieldsLongMethod()
+ {
+ $merchant = (object)array();
+ $merchant->login = AUTHORIZENET_API_LOGIN_ID;
+ $merchant->tran_key = AUTHORIZENET_TRANSACTION_KEY;
+ $merchant->allow_partial_auth = "false";
+
+ $creditCard = array(
+ 'exp_date' => '02/2012',
+ 'card_num' => '6011000000000012',
+ 'card_code' => '452',
+ );
+
+ $transaction = array(
+ 'amount' => rand(100, 1000),
+ 'duplicate_window' => '10',
+ // 'email_customer' => 'true',
+ 'footer_email_receipt' => 'thank you for your business!',
+ 'header_email_receipt' => 'a copy of your receipt is below',
+ );
+
+ $order = array(
+ 'description' => 'Johns Bday Gift',
+ 'invoice_num' => '3123',
+ 'line_item' => 'item1<|>golf balls<|><|>2<|>18.95<|>Y',
+ );
+
+ $customer = (object)array();
+ $customer->first_name = "Jane";
+ $customer->last_name = "Smith";
+ $customer->company = "Jane Smith Enterprises Inc.";
+ $customer->address = "20 Main Street";
+ $customer->city = "San Francisco";
+ $customer->state = "CA";
+ $customer->zip = "94110";
+ $customer->country = "US";
+ $customer->phone = "415-555-5557";
+ $customer->fax = "415-555-5556";
+ $customer->email = "foo@example.com";
+ $customer->cust_id = "55";
+ $customer->customer_ip = "98.5.5.5";
+
+ $shipping_info = (object)array();
+ $shipping_info->ship_to_first_name = "John";
+ $shipping_info->ship_to_last_name = "Smith";
+ $shipping_info->ship_to_company = "Smith Enterprises Inc.";
+ $shipping_info->ship_to_address = "10 Main Street";
+ $shipping_info->ship_to_city = "San Francisco";
+ $shipping_info->ship_to_state = "CA";
+ $shipping_info->ship_to_zip = "94110";
+ $shipping_info->ship_to_country = "US";
+ $shipping_info->tax = "CA";
+ $shipping_info->freight = "Freight<|>ground overnight<|>12.95";
+ $shipping_info->duty = "Duty1<|>export<|>15.00";
+ $shipping_info->tax_exempt = "false";
+ $shipping_info->po_num = "12";
+
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields($creditCard);
+ $sale->setFields($shipping_info);
+ $sale->setFields($customer);
+ $sale->setFields($order);
+ $sale->setFields($merchant);
+ $sale->setFields($transaction);
+ $response = $sale->authorizeAndCapture();
+
+ $this->assertTrue($response->approved);
+ }
+
+ public function testResponseMethods()
+ {
+ $amount = rand(1, 1000);
+ $zipcode = "02301";
+
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields(
+ array(
+ 'amount' => $amount,
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415',
+ 'zip' => $zipcode,
+ )
+ );
+
+ $sale->setCustomField("custom1", "custom1value");
+ $sale->setCustomField("custom2", "custom2value");
+ $result = $sale->authorizeAndCapture();
+ $this->assertTrue($result->approved);
+
+ $this->assertEquals("custom2value", $result->custom2);
+ $this->assertEquals($amount, $result->amount);
+ $this->assertEquals("CC", $result->method);
+ $this->assertEquals("auth_capture", $result->transaction_type);
+ $this->assertEquals("Discover", $result->card_type);
+ $this->assertEquals($zipcode, $result->zip_code);
+ }
+
+ public function testSetBadField()
+ {
+ try {
+ $amount = rand(1, 1000);
+ $zipcode = "02301";
+
+ $sale = new AuthorizeNetAIM;
+ $sale->setFields(
+ array(
+ 'amount' => $amount,
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415',
+ 'zipcode' => $zipcode, // Should actually be just "zip"
+ )
+ );
+
+ $result = $sale->authorizeAndCapture();
+ $this->assertTrue($result->approved);
+ // should have thrown an exception by now
+ $this->assertFalse(true);
+ }
+ catch (AuthorizeNetException $e){
+ $this->assertTrue(true);
+
+ }
+ }
+
+}
+
+
+class AuthorizeNetAIM_Live_Test extends PHPUnit_Framework_TestCase
+{
+
+ public function testAuthCaptureSetECheckMethod()
+ {
+ if (MERCHANT_LIVE_API_LOGIN_ID) {
+ // $this->markTestIncomplete('Depends on whether eChecks is enabled');
+ $sale = new AuthorizeNetAIM(MERCHANT_LIVE_API_LOGIN_ID,MERCHANT_LIVE_TRANSACTION_KEY);
+ $sale->setSandbox(false);
+ $sale->test_request = 'TRUE';
+ $sale->amount = "4.99";
+ $sale->setECheck(
+ '121042882',
+ '123456789123',
+ 'CHECKING',
+ 'Bank of Earth',
+ 'Jane Doe',
+ 'WEB'
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertEquals("ECHECK", $response->method);
+ $this->assertEquals("18", $response->response_reason_code);
+ // $this->assertTrue($response->approved);
+ }
+ }
+
+ public function testAuthCaptureECheck()
+ {
+ if (MERCHANT_LIVE_API_LOGIN_ID) {
+ // $this->markTestIncomplete('Depends on whether eChecks is enabled');
+ $sale = new AuthorizeNetAIM(MERCHANT_LIVE_API_LOGIN_ID,MERCHANT_LIVE_TRANSACTION_KEY);
+ $sale->setSandbox(false);
+ $sale->test_request = 'TRUE';
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'method' => 'echeck',
+ 'bank_aba_code' => '121042882',
+ 'bank_acct_num' => '123456789123',
+ 'bank_acct_type' => 'CHECKING',
+ 'bank_name' => 'Bank of Earth',
+ 'bank_acct_name' => 'Jane Doe',
+ 'echeck_type' => 'WEB',
+ )
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertEquals("ECHECK", $response->method);
+ $this->assertEquals("18", $response->response_reason_code);
+ // $this->assertTrue($response->approved);
+ }
+ }
+
+ public function testAuthCaptureLiveServerTestRequest()
+ {
+ if (MERCHANT_LIVE_API_LOGIN_ID) {
+ $sale = new AuthorizeNetAIM(MERCHANT_LIVE_API_LOGIN_ID,MERCHANT_LIVE_TRANSACTION_KEY);
+ $sale->setSandbox(false);
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415'
+ )
+ );
+ $sale->setField('test_request', 'TRUE');
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ }
+ }
+
+ public function testAuthCaptureLiveServer()
+ {
+ if (MERCHANT_LIVE_API_LOGIN_ID) {
+ $sale = new AuthorizeNetAIM(MERCHANT_LIVE_API_LOGIN_ID,MERCHANT_LIVE_TRANSACTION_KEY);
+ $sale->setSandbox(false);
+ $sale->test_request = 'TRUE';
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415'
+ )
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ }
+ }
+
+ public function testInvalidCredentials()
+ {
+ if (MERCHANT_LIVE_API_LOGIN_ID) {
+ // Post a response to live server using invalid credentials.
+ $sale = new AuthorizeNetAIM('a','a');
+ $sale->setSandbox(false);
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '6011000000000012',
+ 'exp_date' => '0415'
+ )
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->error);
+ $this->assertEquals("13", $response->response_reason_code);
+ }
+ }
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+class AuthorizeNetARB_Test extends PHPUnit_Framework_TestCase
+{
+
+ public function testAllMethods()
+ {
+ // Set the subscription fields.
+ $subscription = new AuthorizeNet_Subscription;
+ $subscription->name = "Short subscription";
+ $subscription->intervalLength = "1";
+ $subscription->intervalUnit = "months";
+ $subscription->startDate = "2011-03-12";
+ $subscription->totalOccurrences = "14";
+ $subscription->amount = rand(1,100);
+ $subscription->creditCardCardNumber = "6011000000000012";
+ $subscription->creditCardExpirationDate = "2018-10";
+ $subscription->creditCardCardCode = "123";
+ $subscription->billToFirstName = "john";
+ $subscription->billToLastName = "doe";
+
+ // Create the subscription.
+ $request = new AuthorizeNetARB;
+ $response = $request->createSubscription($subscription);
+ $this->assertTrue($response->isOk());
+ $subscription_id = $response->getSubscriptionId();
+
+ // Get the subscription status
+ $status_request = new AuthorizeNetARB;
+ $status_response = $status_request->getSubscriptionStatus($subscription_id);
+ $this->assertEquals("active",$status_response->getSubscriptionStatus());
+
+ // Update the subscription
+ $update_request = new AuthorizeNetARB;
+ $updated_subscription_info = new AuthorizeNet_Subscription;
+ $updated_subscription_info->billToFirstName = "jane";
+ $updated_subscription_info->billToLastName = "smith";
+ $updated_subscription_info->creditCardCardNumber = "6011000000000012";
+ $updated_subscription_info->creditCardExpirationDate = "2019-10";
+ $updated_subscription_info->creditCardCardCode = "423";
+ $update_response = $update_request->updateSubscription($subscription_id, $updated_subscription_info);
+ $this->assertTrue($update_response->isOk());
+
+ // Cancel the subscription
+ $cancellation = new AuthorizeNetARB;
+ $cancel_response = $cancellation->cancelSubscription($subscription_id);
+ $this->assertTrue($cancel_response->isOk());
+
+ // Get the subscription status
+ $status_request = new AuthorizeNetARB;
+ $status_response = $status_request->getSubscriptionStatus($subscription_id);
+ $this->assertEquals("canceled", $status_response->getSubscriptionStatus());
+
+ }
+
+
+ public function testCreateSubscriptionLong()
+ {
+
+ $subscription = new AuthorizeNet_Subscription;
+ $subscription->name = "test subscription";
+ $subscription->intervalLength = "1";
+ $subscription->intervalUnit = "months";
+ $subscription->startDate = "2015-03-12";
+ $subscription->totalOccurrences = "14";
+ $subscription->trialOccurrences = "";
+ $subscription->amount = "6.99";
+ $subscription->trialAmount = "";
+ $subscription->creditCardCardNumber = "6011000000000012";
+ $subscription->creditCardExpirationDate = "2018-10";
+ $subscription->creditCardCardCode = "123";
+ $subscription->bankAccountAccountType = "";
+ $subscription->bankAccountRoutingNumber = "";
+ $subscription->bankAccountAccountNumber = "";
+ $subscription->bankAccountNameOnAccount = "";
+ $subscription->bankAccountEcheckType = "";
+ $subscription->bankAccountBankName = "";
+ $subscription->orderInvoiceNumber = "";
+ $subscription->orderDescription = "";
+ $subscription->customerId = "12";
+ $subscription->customerEmail = "foo@domain.com";
+ $subscription->customerPhoneNumber = "";
+ $subscription->customerFaxNumber = "";
+ $subscription->billToFirstName = "john";
+ $subscription->billToLastName = "doe";
+ $subscription->billToCompany = "";
+ $subscription->billToAddress = "";
+ $subscription->billToCity = "";
+ $subscription->billToState = "";
+ $subscription->billToZip = "";
+ $subscription->billToCountry = "";
+ $subscription->shipToFirstName = "";
+ $subscription->shipToLastName = "";
+ $subscription->shipToCompany = "";
+ $subscription->shipToAddress = "";
+ $subscription->shipToCity = "";
+ $subscription->shipToState = "";
+ $subscription->shipToZip = "";
+ $subscription->shipToCountry = "";
+
+ $refId = "ref" . time();
+
+ // Create the request and send it.
+ $request = new AuthorizeNetARB;
+ $request->setRefId($refId);
+ $response = $request->createSubscription($subscription);
+
+
+ // Handle the response.
+
+ $this->assertTrue($response->isOk());
+ $this->assertEquals($response->getMessageCode(), "I00001");
+ $this->assertEquals($response->getMessageText(), "Successful.");
+ $this->assertEquals($response->getRefId(), $refId);
+ $this->assertEquals($response->getResultCode(), "Ok");
+
+ // Cancel the subscription to avoid duplicate errors in future
+
+ $cancellation = new AuthorizeNetARB;
+ $cancellation->setRefId($refId);
+ $cancel_response = $cancellation->cancelSubscription($response->getSubscriptionId());
+
+
+
+ $this->assertTrue($cancel_response->isOk());
+
+ }
+
+ public function testCreateSubscriptionECheck()
+ {
+
+ $subscription = new AuthorizeNet_Subscription;
+ $subscription->name = "my test echeck subscription";
+ $subscription->intervalLength = "1";
+ $subscription->intervalUnit = "months";
+ $subscription->startDate = "2015-04-12";
+ $subscription->totalOccurrences = "2";
+ $subscription->trialOccurrences = "";
+ $subscription->amount = "11.99";
+ $subscription->trialAmount = "";
+ $subscription->bankAccountAccountType = "checking";
+ $subscription->bankAccountRoutingNumber = "121000248";
+ $subscription->bankAccountAccountNumber = "12345678";
+ $subscription->bankAccountNameOnAccount = "John Doe";
+ $subscription->bankAccountEcheckType = "WEB";
+ $subscription->bankAccountBankName = "Bank of Earth";
+ $subscription->orderInvoiceNumber = "";
+ $subscription->orderDescription = "";
+ $subscription->customerId = "12";
+ $subscription->customerEmail = "foo@domain.com";
+ $subscription->customerPhoneNumber = "";
+ $subscription->customerFaxNumber = "";
+ $subscription->billToFirstName = "john";
+ $subscription->billToLastName = "doe";
+ $subscription->billToCompany = "";
+ $subscription->billToAddress = "";
+ $subscription->billToCity = "";
+ $subscription->billToState = "";
+ $subscription->billToZip = "";
+ $subscription->billToCountry = "";
+ $subscription->shipToFirstName = "";
+ $subscription->shipToLastName = "";
+ $subscription->shipToCompany = "";
+ $subscription->shipToAddress = "";
+ $subscription->shipToCity = "";
+ $subscription->shipToState = "";
+ $subscription->shipToZip = "";
+ $subscription->shipToCountry = "";
+
+ $refId = "ref" . time();
+
+ // Create the request and send it.
+ $request = new AuthorizeNetARB;
+ $request->setRefId($refId);
+
+ $response = $request->createSubscription($subscription);
+
+
+ // Handle the response.
+
+ $this->assertTrue($response->isOk());
+ $this->assertEquals($response->getMessageCode(), "I00001");
+ $this->assertEquals($response->getMessageText(), "Successful.");
+ $this->assertEquals($response->getRefId(), $refId);
+ $this->assertEquals($response->getResultCode(), "Ok");
+
+
+ // Cancel the subscription to avoid duplicate errors in future
+
+
+ $cancellation = new AuthorizeNetARB;
+ $cancellation->setRefId($refId);
+ $cancel_response = $cancellation->cancelSubscription($response->getSubscriptionId());
+
+ $this->assertTrue($cancel_response->isOk());
+
+ }
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+
+class AuthorizeNetCIM_Test extends PHPUnit_Framework_TestCase
+{
+
+ public function testDeleteAllCustomerProfiles()
+ {
+ $request = new AuthorizeNetCIM;
+ $response = $request->getCustomerProfileIds();
+ $customers = $response->getCustomerProfileIds();
+
+ foreach ($customers as $customer) {
+ $response = $request->deleteCustomerProfile($customer);
+ $this->assertTrue($response->isOk());
+ }
+
+
+ }
+
+ public function testXPath()
+ {
+
+ // Create new customer profile
+ $request = new AuthorizeNetCIM;
+ $customerProfile = new AuthorizeNetCustomer;
+ $customerProfile->description = $description = "Some Description of customer 2";
+ $customerProfile->merchantCustomerId = $merchantCustomerId = time().rand(1,150);
+ $customerProfile->email = $email = "test2@domain.com";
+
+ // Add payment profile.
+ $paymentProfile = new AuthorizeNetPaymentProfile;
+ $paymentProfile->customerType = "individual";
+ $paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+ $paymentProfile->payment->creditCard->expirationDate = "2021-04";
+ $customerProfile->paymentProfiles[] = $paymentProfile;
+
+ $response = $request->createCustomerProfile($customerProfile);
+ $this->assertTrue($response->isOk());
+ $array = $response->xpath('customerProfileId');
+ $this->assertEquals($response->getCustomerProfileId(), "{$array[0]}");
+
+ $profile = $request->getCustomerProfile($response->getCustomerProfileId());
+
+ $this->assertEquals($email, (string)array_pop($profile->xpath('profile/email')));
+ $this->assertEquals($email, (string)array_pop($profile->xpath('profile/email')));
+ $this->assertEquals($description, (string)array_pop($profile->xpath('profile/description')));
+ $this->assertEquals($merchantCustomerId, (string)array_pop($profile->xpath('profile/merchantCustomerId')));
+
+ }
+
+
+
+ public function testCreateCustomerProfile()
+ {
+ // Create new customer profile
+ $request = new AuthorizeNetCIM;
+ $customerProfile = new AuthorizeNetCustomer;
+ $customerProfile->description = "Description of customer";
+ $customerProfile->merchantCustomerId = time().rand(1,100);
+ $customerProfile->email = "blahbla@domain.com";
+
+ // Add payment profile.
+ $paymentProfile = new AuthorizeNetPaymentProfile;
+ $paymentProfile->customerType = "individual";
+ $paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+ $paymentProfile->payment->creditCard->expirationDate = "2015-10";
+ $customerProfile->paymentProfiles[] = $paymentProfile;
+
+ // Add another payment profile.
+ $paymentProfile2 = new AuthorizeNetPaymentProfile;
+ $paymentProfile2->customerType = "business";
+ $paymentProfile2->payment->bankAccount->accountType = "businessChecking";
+ $paymentProfile2->payment->bankAccount->routingNumber = "121042882";
+ $paymentProfile2->payment->bankAccount->accountNumber = "123456789123";
+ $paymentProfile2->payment->bankAccount->nameOnAccount = "Jane Doe";
+ $paymentProfile2->payment->bankAccount->echeckType = "WEB";
+ $paymentProfile2->payment->bankAccount->bankName = "Pandora Bank";
+ $customerProfile->paymentProfiles[] = $paymentProfile2;
+
+
+ // Add shipping address.
+ $address = new AuthorizeNetAddress;
+ $address->firstName = "john";
+ $address->lastName = "Doe";
+ $address->company = "John Doe Company";
+ $address->address = "1 Main Street";
+ $address->city = "Boston";
+ $address->state = "MA";
+ $address->zip = "02412";
+ $address->country = "USA";
+ $address->phoneNumber = "555-555-5555";
+ $address->faxNumber = "555-555-5556";
+ $customerProfile->shipToList[] = $address;
+
+ // Add another shipping address.
+ $address2 = new AuthorizeNetAddress;
+ $address2->firstName = "jane";
+ $address2->lastName = "Doe";
+ $address2->address = "11 Main Street";
+ $address2->city = "Boston";
+ $address2->state = "MA";
+ $address2->zip = "02412";
+ $address2->country = "USA";
+ $address2->phoneNumber = "555-512-5555";
+ $address2->faxNumber = "555-523-5556";
+ $customerProfile->shipToList[] = $address2;
+
+ $response = $request->createCustomerProfile($customerProfile);
+ $this->assertTrue($response->isOk());
+ $this->assertEquals(2, count($response->getCustomerShippingAddressIds()));
+ $this->assertEquals(2, count($response->getCustomerPaymentProfileIds()));
+ $customerProfileId = $response->getCustomerProfileId();
+
+ $this->assertEquals($response->getCustomerProfileId(), "{$response->xml->customerProfileId}");
+
+
+
+ $response = $request->getCustomerProfile($customerProfileId);
+ $this->assertEquals($customerProfile->description, (string)$response->xml->profile->description);
+ $this->assertEquals($customerProfile->merchantCustomerId, (string)$response->xml->profile->merchantCustomerId);
+ $this->assertEquals($customerProfile->email, (string)$response->xml->profile->email);
+ $this->assertEquals(substr($customerProfile->paymentProfiles[0]->payment->creditCard->cardNumber, -4, 4), substr((string)$response->xml->profile->paymentProfiles->payment->creditCard->cardNumber, -4, 4));
+
+
+
+ $this->assertTrue($response->isOk());
+
+
+ }
+
+ public function testGetCustomerProfile()
+ {
+ // Create new customer profile
+ $request = new AuthorizeNetCIM;
+ $customerProfile = new AuthorizeNetCustomer;
+ $customerProfile->description = "Description of customer";
+ $customerProfile->merchantCustomerId = time().rand(1,10);
+ $customerProfile->email = "blahlah@domain.com";
+ $response = $request->createCustomerProfile($customerProfile);
+ $this->assertTrue($response->isOk());
+ $customerProfileId = $response->getCustomerProfileId();
+
+ $response = $request->getCustomerProfile($customerProfileId);
+
+ $this->assertTrue($response->isOk());
+
+ }
+
+ public function testCreateCustomerProfileWithValidationMode()
+ {
+ // Create new customer profile
+ $request = new AuthorizeNetCIM;
+ $customerProfile = new AuthorizeNetCustomer;
+ $customerProfile->description = "Some Description of customer 2";
+ $customerProfile->merchantCustomerId = time().rand(1,10);
+ $customerProfile->email = "test2@domain.com";
+
+ // Add payment profile.
+ $paymentProfile = new AuthorizeNetPaymentProfile;
+ $paymentProfile->customerType = "individual";
+ $paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+ $paymentProfile->payment->creditCard->expirationDate = "2015-04";
+ $customerProfile->paymentProfiles[] = $paymentProfile;
+
+ // Add another payment profile.
+ $paymentProfile2 = new AuthorizeNetPaymentProfile;
+ $paymentProfile2->customerType = "individual";
+ $paymentProfile2->payment->creditCard->cardNumber = "4222222222222";
+ $paymentProfile2->payment->creditCard->expirationDate = "2019-10";
+ $customerProfile->paymentProfiles[] = $paymentProfile2;
+
+ $response = $request->createCustomerProfile($customerProfile, "testMode");
+
+ $this->assertTrue($response->isOk());
+
+ $validationResponses = $response->getValidationResponses();
+ foreach ($validationResponses as $vr) {
+ $this->assertTrue($vr->approved);
+ }
+
+ }
+
+ public function testUpdateSplitTenderGroup()
+ {
+ // Create a partial auth test transaction
+ $amount = 4.92;
+
+ $sale = new AuthorizeNetAIM;
+ $sale->amount = $amount;
+ $sale->card_num = '4222222222222';
+ $sale->zip = "46225";
+ $sale->exp_date = '04/24';
+ $sale->allow_partial_auth = true;
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->held);
+ $this->assertEquals("1.23", $response->amount);
+ $this->assertEquals($amount, $response->requested_amount);
+ $split_tender_id = $response->split_tender_id;
+
+ // Charge a bit more
+ $sale = new AuthorizeNetAIM;
+ $sale->amount = 1.23;
+ $sale->card_num = '6011000000000012';
+ $sale->exp_date = '04/26';
+ $sale->split_tender_id = $split_tender_id;
+ $sale->allow_partial_auth = true;
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+
+ // Void the group of partial auths.
+
+ $request = new AuthorizeNetCIM;
+ $response = $request->updateSplitTenderGroup($split_tender_id, "voided");
+ $this->assertTrue($response->isOk());
+ }
+
+ public function testAll()
+ {
+ // Create new customer profile
+ $request = new AuthorizeNetCIM;
+ $customerProfile = new AuthorizeNetCustomer;
+ $customerProfile->description = "Description of customer";
+ $customerProfile->merchantCustomerId = time().rand(1,10);
+ $customerProfile->email = "blahblahblah@domain.com";
+ $response = $request->createCustomerProfile($customerProfile);
+ $this->assertTrue($response->isOk());
+ $customerProfileId = $response->getCustomerProfileId();
+
+ // Update customer profile
+ $customerProfile->description = "New description";
+ $customerProfile->email = "newemail@domain.com";
+ $response = $request->updateCustomerProfile($customerProfileId, $customerProfile);
+ $this->assertTrue($response->isOk());
+
+ // Add payment profile.
+ $paymentProfile = new AuthorizeNetPaymentProfile;
+ $paymentProfile->customerType = "individual";
+ $paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+ $paymentProfile->payment->creditCard->expirationDate = "2015-10";
+ $response = $request->createCustomerPaymentProfile($customerProfileId, $paymentProfile);
+ $this->assertTrue($response->isOk());
+ $paymentProfileId = $response->getPaymentProfileId();
+
+ // Update payment profile.
+ $paymentProfile->payment->creditCard->cardNumber = "4111111111111111";
+ $paymentProfile->payment->creditCard->expirationDate = "2017-11";
+ $response = $request->updateCustomerPaymentProfile($customerProfileId,$paymentProfileId, $paymentProfile);
+ $this->assertTrue($response->isOk());
+
+ // Add shipping address.
+ $address = new AuthorizeNetAddress;
+ $address->firstName = "john";
+ $address->lastName = "Doe";
+ $address->company = "John Doe Company";
+ $address->address = "1 Main Street";
+ $address->city = "Boston";
+ $address->state = "MA";
+ $address->zip = "02412";
+ $address->country = "USA";
+ $address->phoneNumber = "555-555-5555";
+ $address->faxNumber = "555-555-5556";
+ $response = $request->createCustomerShippingAddress($customerProfileId, $address);
+ $this->assertTrue($response->isOk());
+ $customerAddressId = $response->getCustomerAddressId();
+
+ // Update shipping address.
+ $address->address = "2 First Street";
+ $response = $request->updateCustomerShippingAddress($customerProfileId, $customerAddressId, $address);
+ $this->assertTrue($response->isOk());
+
+ // Create Auth & Capture Transaction
+ $transaction = new AuthorizeNetTransaction;
+ $transaction->amount = "9.79";
+ $transaction->customerProfileId = $customerProfileId;
+ $transaction->customerPaymentProfileId = $paymentProfileId;
+ $transaction->customerShippingAddressId = $customerAddressId;
+
+ $lineItem = new AuthorizeNetLineItem;
+ $lineItem->itemId = "4";
+ $lineItem->name = "Cookies";
+ $lineItem->description = "Chocolate Chip";
+ $lineItem->quantity = "4";
+ $lineItem->unitPrice = "1.00";
+ $lineItem->taxable = "true";
+
+ $lineItem2 = new AuthorizeNetLineItem;
+ $lineItem2->itemId = "4";
+ $lineItem2->name = "Cookies";
+ $lineItem2->description= "Peanut Butter";
+ $lineItem2->quantity = "4";
+ $lineItem2->unitPrice = "1.00";
+ $lineItem2->taxable = "true";
+
+ $transaction->lineItems[] = $lineItem;
+ $transaction->lineItems[] = $lineItem2;
+
+
+ $response = $request->createCustomerProfileTransaction("AuthCapture", $transaction);
+ $this->assertTrue($response->isOk());
+ $transactionResponse = $response->getTransactionResponse();
+ $this->assertTrue($transactionResponse->approved);
+ $transactionId = $transactionResponse->transaction_id;
+
+ // Void the transaction
+ $transaction = new AuthorizeNetTransaction;
+ $transaction->transId = $transactionId;
+ $response = $request->createCustomerProfileTransaction("Void", $transaction);
+ $this->assertTrue($response->isOk());
+ $transactionResponse = $response->getTransactionResponse();
+ $this->assertTrue($transactionResponse->approved);
+
+
+ // Delete Shipping Address
+ $response = $request->deleteCustomerShippingAddress($customerProfileId, $customerAddressId);
+ $this->assertTrue($response->isOk());
+
+ // Delete payment profile.
+ $response = $request->deleteCustomerPaymentProfile($customerProfileId, $paymentProfileId);
+ $this->assertTrue($response->isOk());
+
+
+ // Delete the profile id for future testing.
+ $response = $request->deleteCustomerProfile($customerProfileId);
+ $this->assertTrue($response->isOk());
+ }
+
+
+
+
+ public function testGetCustomerProfileIds()
+ {
+ // Create new customer profile
+ $request = new AuthorizeNetCIM;
+ $customerProfile = new AuthorizeNetCustomer;
+ $customerProfile->description = "Description of customer";
+ $customerProfile->merchantCustomerId = time().rand(1,10);
+ $customerProfile->email = "blahblahblah@domain.com";
+ $response = $request->createCustomerProfile($customerProfile);
+ $this->assertTrue($response->isOk());
+ $customerProfileId = $response->getCustomerProfileId();
+
+ $response = $request->getCustomerProfileIds();
+ $this->assertTrue($response->isOk());
+ $this->assertTrue(in_array($customerProfileId, $response->getCustomerProfileIds()));
+
+
+ }
+
+
+
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+class AuthorizeNetCP_Test extends PHPUnit_Framework_TestCase
+{
+
+ public function testAuthCapture()
+ {
+ $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'card_num' => '4111111111111111',
+ 'exp_date' => '0415',
+ 'device_type' => '4',
+ )
+ );
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ }
+
+ // public function testMd5()
+ // {
+ // return;
+ // $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+ // $sale->setFields(
+ // array(
+ // 'amount' => rand(1, 1000),
+ // 'card_num' => '4111111111111111',
+ // 'exp_date' => '0415',
+ // 'device_type' => '4',
+ // )
+ // );
+ // $response = $sale->authorizeAndCapture();
+ // $this->assertTrue($response->approved);
+ // $this->assertTrue($response->isAuthorizeNet(CP_API_LOGIN_ID));
+ // }
+
+ public function testAuthCaptureTrack1()
+ {
+ $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'device_type' => '4',
+ )
+ );
+ $sale->setTrack1Data('%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?');
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ }
+
+ public function testAuthCaptureTrack2()
+ {
+ $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'device_type' => '4',
+ )
+ );
+ $sale->setTrack2Data('4111111111111111=1803101000020000831?');
+ $response = $sale->authorizeAndCapture();
+ $this->assertTrue($response->approved);
+ }
+
+ public function testAuthCaptureTrack2Error()
+ {
+ $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'device_type' => '4',
+ )
+ );
+ $sale->setTrack2Data('4411111111111111=1803101000020000831?');
+ $response = $sale->authorizeAndCapture();
+ $this->assertFalse($response->approved);
+ $this->assertTrue($response->error);
+ $this->assertEquals(6, $response->response_reason_code);
+ }
+
+ public function testResponseFields()
+ {
+ $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'device_type' => '4',
+ )
+ );
+ $sale->user_ref = $user_ref = "someCustomVariable123";
+ $sale->setTrack1Data('%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?');
+ $response = $sale->authorizeAndCapture();
+
+
+ $this->assertTrue($response->approved);
+ $this->assertEquals('1.0',$response->version);
+ $this->assertEquals('1',$response->response_code);
+ $this->assertEquals('1',$response->response_reason_code);
+ $this->assertEquals('(TESTMODE) This transaction has been approved.',$response->response_reason_text);
+ $this->assertEquals('000000',$response->authorization_code);
+ $this->assertEquals('P',$response->avs_code);
+ $this->assertEquals('',$response->card_code_response);
+ $this->assertEquals('0',$response->transaction_id);
+ $this->assertStringMatchesFormat('%x',$response->md5_hash);
+ $this->assertEquals($user_ref, $response->user_ref);
+ $this->assertEquals('XXXX1111',$response->card_num);
+ $this->assertEquals('Visa',$response->card_type);
+
+
+ }
+
+ public function testXmlResponse()
+ {
+ $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'device_type' => '4',
+ 'response_format' => '0',
+ )
+ );
+ $sale->user_ref = $user_ref = "dummyvalue323";
+ $sale->setTrack1Data('%B4111111111111111^CARDUSER/JOHN^1803101000000000020000831000000?');
+ $response = $sale->authorizeAndCapture();
+
+
+ $this->assertTrue($response->approved);
+ $this->assertEquals('1.0',$response->version);
+ $this->assertEquals('1',$response->response_code);
+ $this->assertEquals('1',$response->response_reason_code);
+ $this->assertEquals('This transaction has been approved.',$response->response_reason_text);
+ $this->assertEquals('000000',$response->authorization_code);
+ $this->assertEquals('P',$response->avs_code);
+ $this->assertEquals('',$response->card_code_response);
+ $this->assertEquals('0',$response->transaction_id);
+ $this->assertStringMatchesFormat('%x',$response->md5_hash);
+ $this->assertEquals($user_ref, $response->user_ref);
+ $this->assertEquals('XXXX1111',$response->card_num);
+ $this->assertEquals('Visa',$response->card_type);
+
+
+ }
+
+ public function testXmlResponseFailure()
+ {
+ $sale = new AuthorizeNetCP(CP_API_LOGIN_ID, CP_TRANSACTION_KEY);
+ $sale->setFields(
+ array(
+ 'amount' => rand(1, 1000),
+ 'device_type' => '4',
+ 'response_format' => '0',
+ )
+ );
+ $sale->user_ref = $user_ref = "dummyvalue323";
+ $sale->setTrack1Data('%B4111111111111^CARDUSER/JOHN^1803101000000000020000831000000?');
+ $response = $sale->authorizeAndCapture();
+
+
+ $this->assertTrue($response->error);
+ $this->assertEquals('1.0',$response->version);
+ $this->assertEquals('3',$response->response_code);
+ $this->assertEquals('6',$response->response_reason_code);
+ $this->assertEquals('The credit card number is invalid.',$response->response_reason_text);
+ $this->assertEquals('000000',$response->authorization_code);
+ $this->assertEquals('P',$response->avs_code);
+ $this->assertEquals('',$response->card_code_response);
+ $this->assertEquals('0',$response->transaction_id);
+ $this->assertStringMatchesFormat('%x',$response->md5_hash);
+ $this->assertEquals($user_ref, $response->user_ref);
+ $this->assertEquals('XXXX1111',$response->card_num);
+
+
+ }
+
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+class AuthorizeNetDPM_Test extends PHPUnit_Framework_TestCase
+{
+ public function testGenerateFingerprint()
+ {
+ $this->assertEquals("db88bbebb8f699acdbe70daad897a68a",AuthorizeNetDPM::getFingerprint("123","123","123","123","123"));
+ }
+
+ public function testGetCreditCardForm()
+ {
+ $fp_sequence = "12345";
+ $this->assertContains('<input type="hidden" name="x_fp_sequence" value="'.$fp_sequence.'">',AuthorizeNetDPM::getCreditCardForm('2', $fp_sequence, 'ht', '2', '1', true));
+ }
+
+ public function testRelayResponseUrl()
+ {
+ $return_url = 'http://yourdomain.com';
+
+ $this->assertContains('window.location="'.$return_url.'";', AuthorizeNetDPM::getRelayResponseSnippet($return_url));
+ }
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+class AuthorizeNetSIM_Test extends PHPUnit_Framework_TestCase
+{
+
+ public function testGenerateHash()
+ {
+ $_POST['x_amount'] = "4.12";
+ $_POST['x_trans_id'] = "123";
+ $message = new AuthorizeNetSIM("528udYYwz","test");
+ $this->assertEquals("8FC33C32ABB3EDD8BBC4BE3E904CB47E",$message->generateHash());
+ }
+
+ public function testAmount()
+ {
+ $_POST['x_amount'] = "4.12";
+ $_POST['x_response_code'] = "1";
+ $message = new AuthorizeNetSIM("528udYYwz","test");
+ $this->assertEquals("4.12",$message->amount);
+ $this->assertTrue($message->approved);
+ }
+
+ public function testIsAuthNet()
+ {
+ $_POST['x_amount'] = "4.12";
+ $_POST['x_trans_id'] = "123";
+ $_POST['x_MD5_Hash'] = "8FC33C32ABB3EDD8BBC4BE3E904CB47E";
+ $message = new AuthorizeNetSIM("528udYYwz","test");
+ $this->assertTrue($message->isAuthorizeNet());
+
+
+ $_POST['x_amount'] = "4.12";
+ $_POST['x_trans_id'] = "123";
+ $_POST['x_MD5_Hash'] = "8FC33C32BB3EDD8BBC4BE3E904CB47E";
+ $message = new AuthorizeNetSIM("528udYYwz","test");
+ $this->assertFalse($message->isAuthorizeNet());
+ }
+
+ public function testIsError()
+ {
+ $_POST['x_amount'] = "4.12";
+ $_POST['x_response_code'] = "3";
+ $_POST['x_ship_to_state'] = "CA";
+ $message = new AuthorizeNetSIM("528udYYwz","test");
+ $this->assertEquals("3",$message->response_code);
+ $this->assertTrue($message->error);
+ $this->assertFalse($message->approved);
+ $this->assertEquals("CA",$message->ship_to_state);
+ }
+
+
+
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+
+class AuthorizeNetTD_Test extends PHPUnit_Framework_TestCase {
+ public function testSandboxSSLCertIsValid()
+ {
+ exec("echo | openssl s_client -connect test.authorize.net:443 -showcerts -verify 10 -CAfile ../lib/ssl/cert.pem 2>&1", $output, $return_value);
+ $this->assertEquals(0, $return_value);
+ $this->assertTrue(in_array('Verify return code: 0 (ok)', array_map('trim', $output)));
+ exec("echo | openssl s_client -connect apitest.authorize.net:443 -showcerts -verify 10 -CAfile ../lib/ssl/cert.pem 2>&1", $output, $return_value);
+ $this->assertEquals(0, $return_value);
+ $this->assertTrue(in_array('Verify return code: 0 (ok)', array_map('trim', $output)));
+ }
+
+ public function testLiveSSLCertIsValid()
+ {
+ exec("echo | openssl s_client -connect secure.authorize.net:443 -showcerts -verify 10 -CAfile ../lib/ssl/cert.pem 2>&1", $output, $return_value);
+ $this->assertEquals(0, $return_value);
+ $this->assertTrue(in_array('Verify return code: 0 (ok)', array_map('trim', $output)));
+ exec("echo | openssl s_client -connect api.authorize.net:443 -showcerts -verify 10 -CAfile ../lib/ssl/cert.pem 2>&1", $output, $return_value);
+ $this->assertEquals(0, $return_value);
+ $this->assertTrue(in_array('Verify return code: 0 (ok)', array_map('trim', $output)));
+ }
+}
--- /dev/null
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+
+class AuthorizeNetTD_Test extends PHPUnit_Framework_TestCase
+{
+
+
+ public function testGetSettledBatchList()
+ {
+ $request = new AuthorizeNetTD;
+ $response = $request->getSettledBatchList();
+ $this->assertTrue($response->isOk());
+ $this->assertEquals("I00001",(string)array_pop($response->xpath("messages/message/code")));
+ }
+
+ public function testGetSettledBatchListIncludeStatistics()
+ {
+ $request = new AuthorizeNetTD;
+ $response = $request->getSettledBatchList(true);
+ $this->assertTrue($response->isOk());
+ }
+
+ public function testGetSettledBatchListForMonth()
+ {
+ $request = new AuthorizeNetTD;
+ $response = $request->getSettledBatchListForMonth();
+ $this->assertTrue($response->isOk());
+ }
+
+ public function testGetTransactionsForDay()
+ {
+ $request = new AuthorizeNetTD;
+ $transactions = $request->getTransactionsForDay(12, 8, 2010);
+ $this->assertTrue(is_array($transactions));
+ }
+
+ public function testGetTransactionList()
+ {
+ $request = new AuthorizeNetTD;
+ $response = $request->getSettledBatchList();
+ $this->assertTrue($response->isOk());
+ $batches = $response->xpath("batchList/batch");
+ $batch_id = (string)$batches[0]->batchId;
+ $response = $request->getTransactionList($batch_id);
+ $this->assertTrue($response->isOk());
+ }
+
+ public function testGetTransactionDetails()
+ {
+ $sale = new AuthorizeNetAIM;
+ $amount = rand(1, 100);
+ $response = $sale->authorizeAndCapture($amount, '4012888818888', '04/17');
+ $this->assertTrue($response->approved);
+
+ $transId = $response->transaction_id;
+
+ $request = new AuthorizeNetTD;
+ $response = $request->getTransactionDetails($transId);
+ $this->assertTrue($response->isOk());
+
+ $this->assertEquals($transId, (string)$response->xml->transaction->transId);
+ $this->assertEquals($amount, (string)$response->xml->transaction->authAmount);
+ $this->assertEquals("Visa", (string)$response->xml->transaction->payment->creditCard->cardType);
+
+ }
+
+ public function testGetUnsettledTransactionList()
+ {
+ $sale = new AuthorizeNetAIM;
+ $amount = rand(1, 100);
+ $response = $sale->authorizeAndCapture($amount, '4012888818888', '04/17');
+ $this->assertTrue($response->approved);
+
+ $request = new AuthorizeNetTD;
+ $response = $request->getUnsettledTransactionList();
+ $this->assertTrue($response->isOk());
+ $this->assertTrue($response->xml->transactions->count() >= 1);
+ }
+
+ public function testGetBatchStatistics()
+ {
+ $request = new AuthorizeNetTD;
+ $response = $request->getSettledBatchList();
+ $this->assertTrue($response->isOk());
+ $this->assertTrue($response->xml->batchList->count() >= 1);
+ $batchId = $response->xml->batchList->batch[0]->batchId;
+
+ $request = new AuthorizeNetTD;
+ $response = $request->getBatchStatistics($batchId);
+ $this->assertTrue($response->isOk());
+ }
+
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+
+require_once 'AuthorizeNet_Test_Config.php';
+
+class AuthorizeNet_SOAP_Test extends PHPUnit_Framework_TestCase
+{
+
+ public function testSaveSoapDoc ()
+ {
+ $filepath = dirname(__FILE__) . "/soap_doc.php";
+ $client = new AuthorizeNetSOAP;
+ $this->assertTrue($client->saveSoapDocumentation($filepath) > 1);
+ unlink($filepath);
+ }
+
+ public function testGetCustomerIds ()
+ {
+ $client = new AuthorizeNetSOAP;
+ $result = $client->GetCustomerProfileIds(
+ array(
+ 'merchantAuthentication' => array(
+ 'name' => AUTHORIZENET_API_LOGIN_ID,
+ 'transactionKey' => AUTHORIZENET_TRANSACTION_KEY,
+ ),
+ )
+ );
+ $customer_ids = $result->GetCustomerProfileIdsResult->ids->long;
+ $this->assertTrue(is_array($customer_ids));
+ }
+
+}
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * Tests for the AuthorizeNet PHP SDK
+ */
+
+/**
+ * Enter your test account credentials to run tests against sandbox.
+ */
+define("AUTHORIZENET_API_LOGIN_ID", "");
+define("AUTHORIZENET_TRANSACTION_KEY", "");
+define("AUTHORIZENET_MD5_SETTING", "");
+/**
+ * Enter your live account credentials to run tests against production gateway.
+ */
+define("MERCHANT_LIVE_API_LOGIN_ID", "");
+define("MERCHANT_LIVE_TRANSACTION_KEY", "");
+
+/**
+ * Card Present Sandbox Credentials
+ */
+define("CP_API_LOGIN_ID", "");
+define("CP_TRANSACTION_KEY", "");
+
+
+define("AUTHORIZENET_LOG_FILE", dirname(__FILE__) . "/log");
+// Clear logfile
+file_put_contents(AUTHORIZENET_LOG_FILE, "");
+
+
+
+
+
+if (!function_exists('curl_init')) {
+ throw new Exception('AuthorizeNetSDK needs the CURL PHP extension.');
+}
+
+
+if (!function_exists('simplexml_load_file')) {
+ throw new Exception('The AuthorizeNet SDK requires the SimpleXML PHP extension.');
+}
+
+require_once dirname(dirname(__FILE__)) . '/AuthorizeNet.php';
+require_once 'PHPUnit/Framework.php';
+
+if (AUTHORIZENET_API_LOGIN_ID == "") {
+ die('Enter your merchant credentials in '.__FILE__.' before running the test suite.');
+}
--- /dev/null
+By:
+ Authorize.Net
+ http://developer.authorize.net
+ http://community.developer.authorize.net
+
+About:
+ Integration tests for the AuthorizeNet SDK. These tests are mainly
+ for SDK development. However, you can also browse through these
+ tests to find more usage examples for the various APIs.
+
+Requirements:
+ - PHPUnit
+ - An Authorize.Net Test Account and/or Merchant Account. You can get a
+ free test account at http://developer.authorize.net/testaccount/
+
+Usage:
+ - On the command line in this folder run: phpunit .
\ No newline at end of file
--- /dev/null
+CONNECTED(00000003)
+---
+Certificate chain
+ 0 s:/C=US/ST=Utah/L=American Fork/O=Authorize.Net Corp./OU=AUTHORIZE.NET CORP./CN=secure.authorize.net
+ i:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
+ 1 s:/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
+ i:/C=US/O=VeriSign, Inc./OU=Class 3 Public Primary Certification Authority
+---
+Server certificate
+-----BEGIN CERTIFICATE-----
+MIIDSTCCArKgAwIBAgIQfmO9EP9/fYY45sRzhqgfGzANBgkqhkiG9w0BAQUFADBM
+MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg
+THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTA0MDkwMDAwMDBaFw0x
+MTA0MTEyMzU5NTlaMIGPMQswCQYDVQQGEwJVUzENMAsGA1UECBMEVXRhaDEWMBQG
+A1UEBxMNQW1lcmljYW4gRm9yazEcMBoGA1UEChMTQXV0aG9yaXplLk5ldCBDb3Jw
+LjEcMBoGA1UECxMTQVVUSE9SSVpFLk5FVCBDT1JQLjEdMBsGA1UEAxMUc2VjdXJl
+LmF1dGhvcml6ZS5uZXQwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAN0dh86L
+70MHbun7wTNGV0pNXsnebt3z9mCpndLUiBp5J/b57hQO5/HvevkhkDyCrky/Dn7y
+4SEJh6RHYuP4ZBk30DS8iH5dWCRHqSQgpMKhUl/+D7KHbVqgPzOpOR44TiSa1P5m
+Fv0qicvRR3iwSK/6ESywNvEJk1iiYPnpnnlvAgMBAAGjgecwgeQwDAYDVR0TAQH/
+BAIwADA2BgNVHR8ELzAtMCugKaAnhiVodHRwOi8vY3JsLnRoYXd0ZS5jb20vVGhh
+d3RlU0dDQ0EuY3JsMCgGA1UdJQQhMB8GCCsGAQUFBwMBBggrBgEFBQcDAgYJYIZI
+AYb4QgQBMHIGCCsGAQUFBwEBBGYwZDAiBggrBgEFBQcwAYYWaHR0cDovL29jc3Au
+dGhhd3RlLmNvbTA+BggrBgEFBQcwAoYyaHR0cDovL3d3dy50aGF3dGUuY29tL3Jl
+cG9zaXRvcnkvVGhhd3RlX1NHQ19DQS5jcnQwDQYJKoZIhvcNAQEFBQADgYEARa0l
+PaGn4TOw3KOMVu8eiSdho4Nmal6u9AWE3rWHDakO2/a1AkZTM2/Wpt6KI3fp6WWK
+LSsa9wLoVYSJ6pI7bmiJTvyx42yPP0PZXQSz05PHgTEGyW2jAn4N1hFvbTj28mZT
+jv2jd12xgrmX34nulLdydNaM8J7CauhMvqwwvZ0=
+-----END CERTIFICATE-----
+subject=/C=US/ST=Utah/L=American Fork/O=Authorize.Net Corp./OU=AUTHORIZE.NET CORP./CN=secure.authorize.net
+issuer=/C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
+---
+No client certificate CA names sent
+---
+SSL handshake has read 1791 bytes and written 306 bytes
+---
+New, TLSv1/SSLv3, Cipher is RC4-MD5
+Server public key is 1024 bit
+Compression: NONE
+Expansion: NONE
+SSL-Session:
+ Protocol : TLSv1
+ Cipher : RC4-MD5
+ Session-ID: 03130000B43AEDC6A4B731EB5FA519E70B6CAC52856869A8593521601F677C28
+ Session-ID-ctx:
+ Master-Key: C92AA33E812EFC279AAFF16922CFB3519F94FDA820ED3158A72BD97D3BB2D0EC938E7E71817958DB545EA2E147CCC84A
+ Key-Arg : None
+ Start Time: 1297707939
+ Timeout : 300 (sec)
+ Verify return code: 20 (unable to get local issuer certificate)
+---
--- /dev/null
+<html><body><h2 id="AuthorizeNet_SOAP_Test">AuthorizeNet_SOAP_</h2><ul><li>Save soap doc</li><li>Get customer ids</li></ul><h2 id="AuthorizeNetAIM_Sandbox_Test">AuthorizeNetAIM_Sandbox_</h2><ul><li>Auth capture</li><li>Auth capture alternate</li><li>Auth capture short</li><li>Auth capture partial</li><li>Auth capture short no verify</li><li>Aim response fields</li><li>Void</li><li>Void short</li><li>Auth capture e check sandbox</li><li>Amex</li><li>Discover</li><li>Visa</li><li>Auth only</li><li>Auth capture void</li><li>Advanced a i m</li><li>Auth capture custom fields</li><li>Encap character</li><li>Auth capture set multiple custom fields</li><li>Invalid merchant credentials</li><li>Invalid credit card</li><li>Error</li><li>Multiple line items</li><li>All fields long method</li><li>Response methods</li><li>Set bad field</li></ul><h2 id="AuthorizeNetAIM_Live_Test">AuthorizeNetAIM_Live_</h2><ul><li>Auth capture set e check method</li><li>Auth capture e check</li><li>Auth capture live server test request</li><li>Auth capture live server</li><li>Invalid credentials</li></ul><h2 id="AuthorizeNetARB_Test">AuthorizeNetARB_</h2><ul><li><strike>All methods</strike></li><li>Create subscription long</li><li>Create subscription e check</li></ul><h2 id="AuthorizeNetCIM_Test">AuthorizeNetCIM_</h2><ul><li>Delete all customer profiles</li><li>X path</li><li>Create customer profile</li><li>Get customer profile</li><li>Create customer profile with validation mode</li><li>Update split tender group</li><li>All</li><li>Get customer profile ids</li></ul><h2 id="AuthorizeNetCP_Test">AuthorizeNetCP_</h2><ul><li>Auth capture</li><li>Auth capture track 1</li><li>Auth capture track</li><li>Auth capture track 2 error</li><li>Response fields</li><li>Xml response</li><li>Xml response failure</li></ul><h2 id="AuthorizeNetDPM_Test">AuthorizeNetDPM_</h2><ul><li>Generate fingerprint</li><li>Get credit card form</li><li>Relay response url</li></ul><h2 id="AuthorizeNetSIM_Test">AuthorizeNetSIM_</h2><ul><li>Generate hash</li><li>Amount</li><li>Is auth net</li><li>Is error</li></ul><h2 id="AuthorizeNetTD_Test">AuthorizeNetTD_</h2><ul><li>Get settled batch list</li><li>Get settled batch list include statistics</li><li>Get settled batch list for month</li><li>Get transactions for day</li><li>Get transaction list</li><li>Get transaction details</li></ul></body></html>
\ No newline at end of file
--- /dev/null
+/*\r
+* GLM-donate - Default Stylesheet\r
+*/\r
+\r
+h1.donate-title {\r
+ color:#ddd;\r
+ margin-bottom:20px;\r
+}\r
+\r
+#glm-donate-tab-settings th {\r
+ width:280px;\r
+}\r
+\r
+#glm-donate-tab-settings ul {\r
+ padding-left:20px;\r
+}\r
+\r
+#glm-donate-tab-settings li {\r
+ list-style: disc;\r
+ list-style-type:none;\r
+}\r
+\r
+/* jQuery Tabs */\r
+\r
+ul#glm-donate-tabs-nav {\r
+ position:relative;\r
+ margin-bottom:10px;\r
+ height:41px;\r
+ overflow:visible;\r
+ border-bottom:1px solid #ddd\r
+}\r
+\r
+ul#glm-donate-tabs-nav li {\r
+ text-align:center;\r
+ position:relative;\r
+ display:block;\r
+ float:left;\r
+ width:130px;\r
+ height:40px;\r
+ margin:0 10px 0 2px;\r
+ border-top:1px solid #cccccc;\r
+ border-left:1px solid #cccccc;\r
+ border-right:1px solid #cccccc;\r
+ background: #f2f2f2;\r
+ overflow:visible;\r
+ -moz-border-radius-topleft: 7px;\r
+ -moz-border-radius-topright: 0px;\r
+ -webkit-border-radius: 7px 7px 0px 0px;\r
+ border-radius: 7px 7px 0px 0px;\r
+ opacity:0.8;\r
+}\r
+\r
+ul#glm-donate-tabs-nav li.ui-state-active,\r
+ul#glm-donate-tabs-nav li:hover {\r
+ background: #fff;\r
+ opacity:1;\r
+}\r
+\r
+ul#glm-donate-tabs-nav li.ui-state-active a:before,\r
+ul#glm-donate-tabs-nav li:hover a:before {\r
+ position: absolute;\r
+ content: " ";\r
+ top:0;\r
+ bottom:-1px;\r
+ left:0;\r
+ right:0;\r
+ border-bottom:1px solid #fff;\r
+ z-index:200;\r
+}\r
+\r
+ul#glm-donate-tabs-nav li a {\r
+ position:absolute;\r
+ top:0;\r
+ left:0;\r
+ color:#777;\r
+ display:block;\r
+ padding:10px 15px;\r
+ height:20px;\r
+ line-height:20px;\r
+ width:100px;\r
+ text-decoration: none;\r
+ text-shadow: 0 1px 1px rgba(255,255,255,0.8);\r
+ text-transform:uppercase;\r
+ overflow:visible;\r
+}\r
+\r
+ul#glm-donate-tabs-nav li.ui-state-active {\r
+ background: #fff;\r
+}\r
+\r
+ul#glm-donate-tabs-nav li.ui-state-active a {\r
+ color:#555;\r
+}\r
+\r
+/* Transactions Table */\r
+\r
+table.glm-donate-projects,\r
+table.glm-donate-transactions {\r
+ margin-top:20px;\r
+ border-spacing: 0px;\r
+ width:95%;\r
+}\r
+\r
+table.glm-donate-projects thead,\r
+table.glm-donate-transactions thead {\r
+ position:relative;\r
+ background-color:#f2f2f2;\r
+}\r
+\r
+table.glm-donate-projects tr.glm-donate-absolute,\r
+table.glm-donate-transactions tr.glm-donate-absolute {\r
+ position:absolute;\r
+ z-index:0;\r
+ width:95%;\r
+ height:38px;\r
+}\r
+\r
+table.glm-donate-projects tr.glm-donate-absolute:before,\r
+table.glm-donate-transactions tr.glm-donate-absolute:before {\r
+ content: '';\r
+ position:absolute;\r
+ z-index:2;\r
+ display:block;\r
+ top:1px;\r
+ left:0;\r
+ bottom:1px;\r
+ right:0;\r
+ -webkit-border-radius: 7px;\r
+ -moz-border-radius: 7px;\r
+ border-radius: 7px;\r
+ -webkit-box-shadow: inset 0px 1px 1px 0px rgba(0, 0, 0, 0.15),inset 0px 2px 3px 1px rgba(0, 0, 0, 0.1);\r
+ -moz-box-shadow: inset 0px 1px 1px 0px rgba(0, 0, 0, 0.15),inset 0px 2px 3px 1px rgba(0, 0, 0, 0.1);\r
+ box-shadow: inset 0px 1px 1px 0px rgba(0, 0, 0, 0.15),inset 0px 2px 3px 1px rgba(0, 0, 0, 0.1);\r
+}\r
+\r
+table.glm-donate-projects th,\r
+table.glm-donate-transactions th {\r
+ border-top: 1px solid #fff;\r
+ border-bottom: 1px solid #ddd;\r
+}\r
+\r
+table.glm-donate-projects th,\r
+table.glm-donate-transactions th {\r
+ text-align:left;\r
+ color:#777;\r
+ text-shadow: 0 1px 0px #ffffff;\r
+}\r
+\r
+\r
+table.glm-donate-transactions td img.avatar {\r
+ float:left;\r
+ -webkit-border-radius: 3px;\r
+ -moz-border-radius: 3px;\r
+ border-radius: 3px;\r
+}\r
+\r
+table.glm-donate-transactions td span.donate-name {\r
+ line-height:30px;\r
+ padding-left:15px;\r
+}\r
+\r
+table.glm-donate-transactions td.donate-comment {\r
+ font-style:italic;\r
+ font-family:serif;\r
+ color:#777;\r
+ font-size:14px;\r
+ line-height:14px;\r
+}\r
+\r
+table.glm-donate-transactions span.donate-netamount {\r
+ color:#07DE00;\r
+ font-weight:bold;\r
+ font-size:14px;\r
+}\r
+\r
+table.glm-donate-projects th:first-child,\r
+table.glm-donate-transactions th:first-child {\r
+ -moz-border-radius-topleft: 7px;\r
+ -moz-border-radius-topright: 0px;\r
+ -moz-border-radius-bottomright: 0px;\r
+ -moz-border-radius-bottomleft: 7px;\r
+ -webkit-border-radius: 7px 0px 0px 7px;\r
+ border-radius: 7px 0px 0px 7px;\r
+}\r
+\r
+table.glm-donate-projects th:last-child,\r
+table.glm-donate-transactions th:last-child {\r
+ -moz-border-radius-topleft: 0px;\r
+ -moz-border-radius-topright: 7px;\r
+ -moz-border-radius-bottomright: 7px;\r
+ -moz-border-radius-bottomleft: 0px;\r
+ -webkit-border-radius: 0px 7px 7px 0px;\r
+ border-radius: 0px 7px 7px 0px;\r
+}\r
+\r
+table.glm-donate-projects tr td,\r
+table.glm-donate-transactions tr td {\r
+ border-bottom: 1px solid #ddd;\r
+}\r
+\r
+table.glm-donate-projects tr th,\r
+table.glm-donate-projects tr td,\r
+table.glm-donate-transactions tr th,\r
+table.glm-donate-transactions tr td {\r
+ padding: 10px 15px;\r
+}\r
+\r
+.dot-donate-live {\r
+ margin-right:10px;\r
+ position:relative;\r
+ top:2px;\r
+ display:inline-block;\r
+ background:#07DE00;\r
+ width:12px;\r
+ height:12px;\r
+ -webkit-border-radius: 6px;\r
+ -moz-border-radius: 6px;\r
+ border-radius: 6px;\r
+ -webkit-box-shadow: inset 0px 3px 2px 1px rgba(255, 255, 255, 0.2);\r
+ -moz-box-shadow: inset 0px 3px 2px 1px rgba(255, 255, 255, 0.2);\r
+ box-shadow: inset 0px 5px 3px 1px rgba(255, 255, 255, 0.2);\r
+}\r
+\r
+.dot-donate-public {\r
+ margin-right:10px;\r
+ position:relative;\r
+ top:2px;\r
+ display:inline-block;\r
+ background:#0068DE;\r
+ width:12px;\r
+ height:12px;\r
+ -webkit-border-radius: 6px;\r
+ -moz-border-radius: 6px;\r
+ border-radius: 6px;\r
+ -webkit-box-shadow: inset 0px 3px 2px 1px rgba(255, 255, 255, 0.2);\r
+ -moz-box-shadow: inset 0px 3px 2px 1px rgba(255, 255, 255, 0.2);\r
+ box-shadow: inset 0px 5px 3px 1px rgba(255, 255, 255, 0.2);\r
+}\r
+\r
+.dot-donate-test {\r
+ margin-right:10px;\r
+ position:relative;\r
+ top:2px;\r
+ display:inline-block;\r
+ background:#ddd;\r
+ width:12px;\r
+ height:12px;\r
+ -webkit-border-radius: 6px;\r
+ -moz-border-radius: 6px;\r
+ border-radius: 6px;\r
+ -webkit-box-shadow: inset 0px 2px 2px 1px rgba(0,0,0, 0.1);\r
+ -moz-box-shadow: inset 0px 2px 2px 1px rgba(0,0,0, 0.1);\r
+ box-shadow: inset 0px 2px 3px 1px rgba(0,0,0, 0.1);\r
+}\r
+\r
+.progress-donate-wrap {\r
+ position:relative;\r
+ display:block;\r
+ background:#ddd;\r
+ width:100px;\r
+ height:16px;\r
+ -webkit-border-radius: 8px;\r
+ -moz-border-radius: 8px;\r
+ border-radius: 8px;\r
+ -webkit-box-shadow: inset 0px 2px 2px 1px rgba(0,0,0, 0.1);\r
+ -moz-box-shadow: inset 0px 2px 2px 1px rgba(0,0,0, 0.1);\r
+ box-shadow: inset 0px 2px 3px 1px rgba(0,0,0, 0.1);\r
+}\r
+\r
+.progress-donate-value {\r
+ margin-right:10px;\r
+ position:absolute;\r
+ z-index:50;\r
+ top:2px;\r
+ left:2px;\r
+ display:block;\r
+ background:#0068DE;\r
+ height:12px;\r
+ -webkit-border-radius: 6px;\r
+ -moz-border-radius: 6px;\r
+ border-radius: 6px;\r
+ -webkit-box-shadow: inset 0px 3px 2px 1px rgba(255, 255, 255, 0.2);\r
+ -moz-box-shadow: inset 0px 3px 2px 1px rgba(255, 255, 255, 0.2);\r
+ box-shadow: inset 0px 5px 3px 1px rgba(255, 255, 255, 0.2);\r
+}\r
+\r
+#glm-donate-tab-transactions form.pagination {\r
+ display:inline;\r
+ float:left;\r
+ margin:10px 10px 0 0;\r
+}\r
+\r
+.glm-donate-absolute\r
+{\r
+background:linear-gradient(to top, #373737 0px, #464646 5px) repeat scroll 0 0 #464646;\r
+color:#ffffff;\r
+}\r
+\r
+.required {\r
+ color: red;\r
+ padding-left: 5px;\r
+}\r
--- /dev/null
+/*\r
+* GLM-donate - Default Stylesheet\r
+*/\r
+\r
+#glm-donate-wrap {\r
+ display:block;\r
+ padding:10px;\r
+ margin:0px;\r
+ width: 400px;\r
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important;\r
+}\r
+\r
+/* Payment Form Link */\r
+\r
+#glm-donate-modal-button {\r
+ margin:20px 0;\r
+ padding: 8px 15px;\r
+ min-width:100px;\r
+ display:inline-block;\r
+ text-align:center;\r
+ font-weight: bold;\r
+ font-size: 12px;\r
+ background: #1275FF;\r
+ border: 1px solid #155FB0;\r
+ color: white;\r
+ text-decoration: none;\r
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\r
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#77B7FF), to(#017AFF));\r
+ background-image: -moz-linear-gradient(top, #77B7FF, #017AFF);\r
+ background-image: -o-linear-gradient(top, #77B7FF, #017AFF);\r
+ -webkit-box-shadow: inset 0 1px 0 #98c9ff;\r
+ -moz-box-shadow: inset 0 1px 0 #98c9ff;\r
+ box-shadow: inset 0 1px 0 #98c9ff;\r
+ -o-border-radius: 4px;\r
+ -moz-border-radius: 4px;\r
+ -webkit-border-radius: 4px;\r
+ border-radius: 4px;\r
+ cursor: pointer; cursor: hand;\r
+}\r
+\r
+#glm-donate-types {\r
+ display:block;\r
+ width:256px;\r
+ height:18px;\r
+ background: url('../images/types.png') no-repeat top left;\r
+ margin-bottom:20px;\r
+}\r
+\r
+/* Payment Form Elements */\r
+\r
+form#glm-donate-payment-form {\r
+ display:block;\r
+}\r
+\r
+.donate-row-right,\r
+.donate-row-left{width:50%;}\r
+\r
+form#glm-donate-payment-form h2.donate-header {\r
+ padding:10px;\r
+ color:#fff;\r
+ font-size:14px;\r
+ font-weight:bold;\r
+ text-shadow: 0 -1px 1px rgba(0,0,0,0.3);\r
+ border-top:1px solid #268DFC;\r
+ border-bottom:1px solid #004EA2;\r
+ background:#0068DE;\r
+ margin-bottom:10px;\r
+ -moz-border-radius-topleft: 5px;\r
+ -moz-border-radius-topright: 5px;\r
+ -moz-border-radius-bottomright: 0px;\r
+ -moz-border-radius-bottomleft: 0px;\r
+ -webkit-border-radius: 5px 5px 0px 0px;\r
+ border-radius: 5px 5px 0px 0px;\r
+}\r
+\r
+form#glm-donate-payment-form p.donate-display-comment {\r
+ margin:3px 0;\r
+ font-size:12px;\r
+ color:#777;\r
+}\r
+\r
+form#glm-donate-payment-form label {\r
+ letter-spacing:1px;\r
+ text-transform:uppercase;\r
+}\r
+\r
+form#glm-donate-payment-form .donate-row {\r
+ overflow:visible;\r
+ clear:both;\r
+ padding:5px 10px;\r
+}\r
+\r
+form#glm-donate-payment-form .donate-row-left,\r
+form#glm-donate-payment-form .donate-row-right {\r
+ float:left;\r
+ overflow:auto;\r
+}\r
+\r
+form#glm-donate-payment-form .donate-submit-button {\r
+ position:relative;\r
+ margin:10px;\r
+ padding: 8px 15px;\r
+ display:block;\r
+ font-weight: bold;\r
+ font-size: 12px;\r
+ background: #1275FF;\r
+ border: 1px solid #155FB0;\r
+ color: white;\r
+ text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\r
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#77B7FF), to(#017AFF));\r
+ background-image: -moz-linear-gradient(top, #77B7FF, #017AFF);\r
+ background-image: -o-linear-gradient(top, #77B7FF, #017AFF);\r
+ -webkit-box-shadow: inset 0 1px 0 #98c9ff;\r
+ -moz-box-shadow: inset 0 1px 0 #98c9ff;\r
+ box-shadow: inset 0 1px 0 #98c9ff;\r
+ -o-border-radius: 4px;\r
+ -moz-border-radius: 4px;\r
+ -webkit-border-radius: 4px;\r
+ border-radius: 4px;\r
+ cursor: pointer; cursor: hand;\r
+}\r
+\r
+.donate-spinner {\r
+ display:none;\r
+ margin:10px;\r
+ padding: 8px 15px;\r
+ height:15px;\r
+ width:70px;\r
+ content:" ";\r
+ background: url('../images/spinner.gif') no-repeat 50% 50%;\r
+ border: 1px solid #afd5ff;\r
+ -o-border-radius: 4px;\r
+ -moz-border-radius: 4px;\r
+ -webkit-border-radius: 4px;\r
+}\r
+\r
+.donate-valid {\r
+ color: #638731 !important;\r
+ background-color:#d9fba8 !important;\r
+}\r
+\r
+.donate-invalid {\r
+ color:#873d31 !important;\r
+ background-color:#fbbcb1 !important;\r
+}\r
+\r
+.glm-donate-poweredby {\r
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important;\r
+ color:#777;\r
+ font-size:10px;\r
+ padding:0 20px;\r
+}\r
+\r
+.glm-donate-poweredby a {\r
+ color:#0068DE;\r
+ text-decoration: none;\r
+}\r
+\r
+/* Response Styling */\r
+\r
+.glm-donate-notification {\r
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;\r
+ font-size: 12px;\r
+ width:360px;\r
+ padding:10px;\r
+ margin:10px 0 10px 10px;\r
+ -webkit-border-radius: 5px;\r
+ -moz-border-radius: 5px;\r
+ border-radius: 5px;\r
+}\r
+\r
+.glm-donate-currency {\r
+ text-transform: uppercase;\r
+}\r
+\r
+.glm-donate-success {\r
+ color:#345607;\r
+ background-color:#D1F2A5;\r
+ text-shadow:0 1px 1px rgba(255,255,255,0.2);\r
+}\r
+\r
+.glm-donate-failure {\r
+ color:#4E1E0F;\r
+ background-color:#FF9F80;\r
+ text-shadow:0 1px 1px rgba(255,255,255,0.1);\r
+}\r
+\r
+/* Form Styling */\r
+\r
+\r
+form#glm-donate-payment-form .glm-donate-details label {\r
+ color:#777;\r
+}\r
+\r
+form#glm-donate-payment-form .glm-donate-card label {\r
+ color:#0068DE;\r
+}\r
+\r
+form#glm-donate-payment-form .glm-donate-card input {\r
+ -webkit-border-radius: 5px;\r
+ -moz-border-radius: 5px;\r
+ border-radius: 5px;\r
+}\r
+\r
+form#glm-donate-payment-form .glm-donate-card input.card-cvc {\r
+ width:120px;\r
+}\r
+\r
+form#glm-donate-payment-form label,\r
+form#glm-donate-payment-form input,\r
+form#glm-donate-payment-form select,\r
+form#glm-donate-payment-form textarea {\r
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important;\r
+ font-size: 14px !important;\r
+ font-weight: normal;\r
+ line-height: normal;\r
+ margin-bottom: 3px !important;\r
+}\r
+form#glm-donate-payment-form textarea,\r
+form#glm-donate-payment-form input {\r
+ position:relative;\r
+ width:338px;\r
+ background-color:#fff;\r
+}\r
+\r
+input.glm-donate-name {background: url('../images/h-name.png') no-repeat 8px 8px;}\r
+input.glm-donate-email {background: url('../images/h-email.png') no-repeat 8px 10px;}\r
+textarea.glm-donate-comment {background: url('../images/h-comment.png') no-repeat 8px 10px;}\r
+input.glm-donate-card-amount {background: url('../images/h-amount.png') no-repeat 8px 8px;}\r
+input.card-number {background: url('../images/h-card.png') no-repeat 8px 10px;}\r
+input.card-cvc {background: url('../images/h-cvc.png') no-repeat 8px 10px;}\r
+\r
+form#glm-donate-payment-form select {\r
+ cursor: pointer;\r
+}\r
+\r
+input[type=checkbox], input[type=radio] {\r
+ cursor: pointer;\r
+}\r
+\r
+.donate-expiry {\r
+ font-size:12px;\r
+ letter-spacing:1px;\r
+ color:#bbb;\r
+ text-shadow:0 1px 0 #fff;\r
+}\r
+\r
+form#glm-donate-payment-form select {\r
+ margin-top:0px !important;\r
+ display:block;\r
+ -webkit-appearance: none;\r
+ -moz-appearance: none;\r
+ appearance: none;\r
+ padding: 2px 7px 2px 7px !important;\r
+ height: auto !important;\r
+ text-shadow: 0 1px 0 white;\r
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#F9F9F9), to(#E8E8E8));\r
+ background-image: -moz-linear-gradient(top, #F9F9F9, #E8E8E8);\r
+ background-image: -o-linear-gradient(top, #F9F9F9, #E8E8E8);\r
+ -webkit-box-shadow: inset 0 1px 0 white;\r
+ -moz-box-shadow: inset 0 1px 0 white;\r
+ box-shadow: inset 0 1px 0 white;\r
+}\r
+\r
+form#glm-donate-payment-form select:hover {\r
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#E8E8E8), to(#F9F9F9));\r
+ background-image: -moz-linear-gradient(top, #E8E8E8, #F9F9F9);\r
+ background-image: -o-linear-gradient(top, #E8E8E8, #F9F9F9);\r
+}\r
+\r
+form#glm-donate-payment-form input,\r
+form#glm-donate-payment-form textarea,\r
+form#glm-donate-payment-form select,\r
+form#glm-donate-payment-form .uneditable-input {\r
+ display: inline-block;\r
+ height: 18px;\r
+ padding: 8px 8px 8px 32px;\r
+ font-size: 13px;\r
+ line-height: 18px;\r
+ color: #808080;\r
+ border: 1px solid #ccc;\r
+ -webkit-border-radius: 3px;\r
+ -moz-border-radius: 3px;\r
+ border-radius: 3px;\r
+}\r
+\r
+form#glm-donate-payment-form input[type=checkbox], form#glm-donate-payment-form input[type=radio] {\r
+ width: auto;\r
+ height: auto;\r
+ padding: 0;\r
+ margin: 3px 0;\r
+ *margin-top: 0;\r
+ /* IE6-7 */\r
+\r
+ line-height: normal;\r
+ border: none;\r
+}\r
+\r
+form#glm-donate-payment-form select {\r
+ height: 27px;\r
+ line-height: 27px;\r
+}\r
+\r
+form#glm-donate-payment-form input[type=button], form#glm-donate-payment-form input[type=reset], form#glm-donate-payment-form input[type=submit] {\r
+ width: auto;\r
+ height: auto;\r
+}\r
+\r
+form#glm-donate-payment-form input[type=checkbox] {\r
+ position:relative;\r
+ top:2px;\r
+ margin-right:5px;\r
+}\r
+\r
+form#glm-donate-payment-form select[multiple] {\r
+ height: inherit;\r
+ background-color: #ffffff;\r
+}\r
+form#glm-donate-payment-form textarea {\r
+ height: auto;\r
+}\r
+\r
+:-moz-placeholder {\r
+ color: #bfbfbf;\r
+}\r
+::-webkit-input-placeholder {\r
+ color: #bfbfbf;\r
+}\r
+form#glm-donate-payment-form input, form#glm-donate-payment-form textarea {\r
+ -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;\r
+ -moz-transition: border linear 0.2s, box-shadow linear 0.2s;\r
+ -ms-transition: border linear 0.2s, box-shadow linear 0.2s;\r
+ -o-transition: border linear 0.2s, box-shadow linear 0.2s;\r
+ transition: border linear 0.2s, box-shadow linear 0.2s;\r
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);\r
+ -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);\r
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);\r
+}\r
+form#glm-donate-payment-form input:focus, form#glm-donate-payment-form textarea:focus {\r
+ outline: 0;\r
+ border-color: rgba(0, 104, 222, 0.8);\r
+ -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(0, 104, 222, 0.6);\r
+ -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(0, 104, 222, 0.6);\r
+ box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(0, 104, 222, 0.6);\r
+}\r
+input[type=file]:focus, input[type=checkbox]:focus, select:focus {\r
+ -webkit-box-shadow: none;\r
+ -moz-box-shadow: none;\r
+ box-shadow: none;\r
+ outline: 1px dotted #666;\r
+}\r
--- /dev/null
+\r
+/* ----------------------------------------------------------------------------------------------------------------*/\r
+/* ---------->>> thickbox specific link and font settings <<<------------------------------------------------------*/\r
+/* ----------------------------------------------------------------------------------------------------------------*/\r
+#TB_window {\r
+ font: 12px "Helvetica Neue", Helvetica, Arial, sans-serif;\r
+ color: #333333;\r
+}\r
+\r
+#TB_secondLine {\r
+ font: 10px "Helvetica Neue", Helvetica, Arial, sans-serif;\r
+ color:#666666;\r
+}\r
+\r
+#TB_window a:link {color: #666666;}\r
+#TB_window a:visited {color: #666666;}\r
+#TB_window a:hover {color: #000;}\r
+#TB_window a:active {color: #666666;}\r
+#TB_window a:focus{color: #666666;}\r
+\r
+/* ----------------------------------------------------------------------------------------------------------------*/\r
+/* ---------->>> thickbox settings <<<-----------------------------------------------------------------------------*/\r
+/* ----------------------------------------------------------------------------------------------------------------*/\r
+#TB_overlay {\r
+ position: fixed;\r
+ z-index:10000;\r
+ top: 0px;\r
+ left: 0px;\r
+ height:100%;\r
+ width:100%;\r
+}\r
+\r
+.TB_overlayMacFFBGHack {background: url(macFFBgHack.png) repeat;}\r
+.TB_overlayBG {\r
+ background-color:#000;\r
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";\r
+ filter:alpha(opacity=75);\r
+ -moz-opacity: 0.75;\r
+ opacity: 0.75;\r
+}\r
+\r
+* html #TB_overlay { /* ie6 hack */\r
+ position: absolute;\r
+ height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');\r
+}\r
+\r
+#TB_window {\r
+ position: fixed;\r
+ background: #ffffff;\r
+ z-index: 10002;\r
+ color:#000000;\r
+ visibility: hidden;\r
+ text-align:left;\r
+ top:50%;\r
+ left:50%;\r
+ -moz-box-shadow: rgba(0,0,0,1) 0 4px 30px;\r
+ -webkit-box-shadow: rgba(0,0,0,1) 0 4px 30px;\r
+ -khtml-box-shadow: rgba(0,0,0,1) 0 4px 30px;\r
+ box-shadow: rgba(0,0,0,1) 0 4px 30px;\r
+ -webkit-border-radius: 5px;\r
+ -moz-border-radius: 5px;\r
+ border-radius: 5px;\r
+ overflow:hidden !important;\r
+}\r
+\r
+#TB_window iframe {\r
+ overflow:hidden !important;\r
+}\r
+\r
+* html #TB_window { /* ie6 hack */\r
+ position: absolute;\r
+ margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');\r
+}\r
+\r
+#TB_window img#TB_Image {\r
+ display:block;\r
+ margin: 15px 0 0 15px;\r
+ border-right: 1px solid #ccc;\r
+ border-bottom: 1px solid #ccc;\r
+ border-top: 1px solid #666;\r
+ border-left: 1px solid #666;\r
+}\r
+\r
+#TB_caption{\r
+ height:25px;\r
+ padding:7px 30px 10px 25px;\r
+ float:left;\r
+}\r
+\r
+#TB_closeWindow{\r
+ height:25px;\r
+ padding:11px 25px 10px 0;\r
+ float:right;\r
+}\r
+\r
+#TB_closeAjaxWindow{\r
+ padding:6px 10px 0;\r
+ text-align:right;\r
+ float:right;\r
+}\r
+\r
+#TB_ajaxWindowTitle{\r
+ float:left;\r
+ padding:6px 10px 0;\r
+}\r
+\r
+#TB_title{\r
+ color:#fff;\r
+ font-size:14px;\r
+ font-weight:bold;\r
+ text-shadow: 0 -1px 1px rgba(0,0,0,0.3);\r
+ background: #2F7ED6;\r
+ -webkit-box-shadow: inset 0px 1px 0px 0px #75acea;\r
+ -moz-box-shadow: inset 0px 1px 0px 0px #75acea;\r
+ box-shadow: inset 0px 1px 0px 0px #75acea;\r
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#60A0E7), to(#3A7AC1));\r
+ background-image: -moz-linear-gradient(top, #60A0E7, #3A7AC1);\r
+ background-image: -o-linear-gradient(top, #60A0E7, #3A7AC1);\r
+ padding:10px;\r
+ height:27px;\r
+ -moz-border-radius-topleft: 5px;\r
+ -moz-border-radius-topright: 5px;\r
+ -moz-border-radius-bottomright: 0px;\r
+ -moz-border-radius-bottomleft: 0px;\r
+ -webkit-border-radius: 5px 5px 0px 0px;\r
+ border-radius: 5px 5px 0px 0px;\r
+}\r
+\r
+#TB_ajaxContent{\r
+ clear:both;\r
+ padding:2px 15px 15px 15px;\r
+ overflow:auto;\r
+ text-align:left;\r
+ line-height:1.4em;\r
+}\r
+\r
+#TB_ajaxContent.TB_modal{\r
+ padding:15px;\r
+}\r
+\r
+#TB_ajaxContent p{\r
+ padding:5px 0px 5px 0px;\r
+}\r
+\r
+#TB_load{\r
+ position: fixed;\r
+ display:none;\r
+ z-index:10003;\r
+ top: 50%;\r
+ left: 50%;\r
+ background-color: #E8E8E8;\r
+ border: 1px solid #555;\r
+ margin: -45px 0pt 0pt -125px;\r
+ padding: 40px 15px 15px;\r
+}\r
+\r
+* html #TB_load { /* ie6 hack */\r
+position: absolute;\r
+margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');\r
+}\r
+\r
+#TB_HideSelect{\r
+ z-index:9999;\r
+ position:fixed;\r
+ top: 0;\r
+ left: 0;\r
+ background-color:#fff;\r
+ border:none;\r
+ filter:alpha(opacity=0);\r
+ -moz-opacity: 0;\r
+ opacity: 0;\r
+ height:100%;\r
+ width:100%;\r
+}\r
+\r
+* html #TB_HideSelect { /* ie6 hack */\r
+ position: absolute;\r
+ height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');\r
+}\r
+\r
+#TB_iframeContent{\r
+ clear:both;\r
+ border:none;\r
+ margin-bottom:-1px;\r
+ _margin-bottom:1px;\r
+ overflow:hidden !important;\r
+}\r
--- /dev/null
+.glm-donate-recent {\r
+\r
+}\r
+\r
+.glm-donate-recent .donate-item {\r
+ min-height:70px;\r
+ position:relative;\r
+ margin:5px 0;\r
+}\r
+\r
+.glm-donate-recent .donate-item img.avatar {\r
+ position:absolute;\r
+ top:0;\r
+ left:0;\r
+ width:50px;\r
+ height:50px;\r
+ -webkit-border-radius: 5px;\r
+ -moz-border-radius: 5px;\r
+ border-radius: 5px;\r
+}\r
+\r
+.glm-donate-recent .donate-item .donate-recent-comment {\r
+ padding-left:60px;\r
+}\r
+\r
+.glm-donate-recent .donate-item .donate-recent-content:before {\r
+ content:'\2018';\r
+}\r
+\r
+.glm-donate-recent .donate-item .donate-recent-content:after {\r
+ content:'\2019';\r
+}\r
+\r
+.glm-donate-recent .donate-item .donate-recent-name {\r
+ margin: 0 0 0.5em 0;\r
+ font-weight:bold;\r
+}\r
+\r
+.glm-donate-recent .donate-item .donate-recent-content {\r
+ color:#777;\r
+}\r
+\r
+\r
+.donate_btn_submit\r
+{\r
+height: 28px;\r
+float: none;\r
+padding: 0 22px;\r
+margin: 0 28px 0 218px;\r
+background: #608e3a;\r
+border: none;\r
+line-height: 28px;\r
+font-size: 14px;\r
+color: #ffffff;\r
+font-family: 'proxima-nova';\r
+font-weight: bold;\r
+border-radius: 15px;\r
+-webkit-border-radius: 15px;\r
+-moz-border-radius: 15px;\r
+}\r
+.donate_btn_submit:hover { background:#4e7a29; }\r
+\r
--- /dev/null
+<?php ob_start();\r
+/**\r
+ * Display Donate Form\r
+ *\r
+ * @return string Donate Form\r
+ *\r
+ * @since 1.0\r
+ *\r
+*/\r
+ global $wpdb;\r
+ if(isset($_REQUEST['action']))\r
+ {\r
+ if($_REQUEST['action']=='submitdonate')\r
+ { \r
+ $first_name = $_REQUEST['first_name'];\r
+ $last_name = $_REQUEST['last_name'];\r
+ $organization = $_REQUEST['organization'];\r
+ $address = $_REQUEST['address'];\r
+ $city = $_REQUEST['city'];\r
+ $country = $_REQUEST['country'];\r
+ $state = $_REQUEST['state'];\r
+ $zip = $_REQUEST['zip'];\r
+ $phone = $_REQUEST['phone'];\r
+ $email = $_REQUEST['email']; \r
+ $donation_type = $_REQUEST['donation_type'];\r
+ $r_frequency = $_REQUEST['r_frequency'];\r
+ $r_times = $_REQUEST['r_times'];\r
+ $amount = $_REQUEST['amount'];\r
+ $invoice_num = $_REQUEST['invoice_num'];\r
+ $card_type = $_REQUEST['card_type'];\r
+ $x_card_num = $_REQUEST['x_card_num'];\r
+ $exp_month = $_REQUEST['exp_month'];\r
+ $exp_year = $_REQUEST['exp_year'];\r
+ $x_card_code = $_REQUEST['x_card_code'];\r
+ $comment = $_REQUEST['comment'];\r
+ $payment_method = $_REQUEST['payment_method'];\r
+ \r
+ // Adjust this to point to the Authorize.Net PHP SDK\r
+ include dirname(__FILE__) .'/../anet_php_sdk/AuthorizeNet.php';\r
+\r
+ $METHOD_TO_USE = "AIM";\r
+ $mysetting = $wpdb->get_results( "SELECT * FROM ".$wpdb->prefix."donate_setting" );\r
+ define("AUTHORIZENET_API_LOGIN_ID",$mysetting[0]->api_login); // Add your API LOGIN ID\r
+ define("AUTHORIZENET_TRANSACTION_KEY",$mysetting[0]->key); // Add your API transaction key\r
+ if($mysetting[0]->mod==0){\r
+ define("AUTHORIZENET_SANDBOX",true); // Set to false to test against production\r
+ define("TEST_REQUEST", true); // You may want to set to true if testing against production\r
+ }\r
+ else\r
+ {\r
+ define("AUTHORIZENET_SANDBOX",false); // Set to false to test against production\r
+ define("TEST_REQUEST", false); \r
+ }\r
+ // You only need to adjust the two variables below if testing DPM\r
+ define("AUTHORIZENET_MD5_SETTING",""); // Add your MD5 Setting.\r
+\r
+ $REQUEST = $_REQUEST;\r
+ if($paypalp = authorizepayment($METHOD_TO_USE,$REQUEST,$address1,$city,$state,$country,$zipcode,$emailaddress,$plan))\r
+ {\r
+ $sql = "INSERT INTO `".$wpdb->prefix."donate` (`first_name`, `last_name`, `organization`, `address`, `city`, `country`, `state`, `zip`, `phone`, `email`, `donation_type`, `amount`, `invoice_num`,`comment`, `status`,`date`) \r
+ VALUES ('".$first_name."', '".$last_name."','".$organization."','".$address."','".$city."','".$country."','".$state."','".$zip."','".$phone."','".$email."','".$donation_type."','".$amount."','".$invoice_num."','".$comment."', '1',now());";\r
+ $wpdb->query($sql);\r
+ \r
+ $post = get_post($post->ID);\r
+ $slug = $post->post_name;\r
+ \r
+ header("Location:".site_url().$_SERVER['REQUEST_URI']);\r
+ exit;\r
+ }\r
+ else\r
+ {\r
+ header("Location:".site_url().$_SERVER['REQUEST_URI']);\r
+ exit;\r
+ }\r
+ \r
+ }\r
+ }\r
+\r
+function wp_donate_form() {\r
+ ob_start();\r
+ global $wpdb;\r
+ ?>\r
+ <form method="post" name="donate_form" id="donate_form" action="<?php echo site_url().$_SERVER['REQUEST_URI'];?>" autocomplete="off">\r
+ <input type="hidden" name="action" value="submitdonate" />\r
+ <table width="100%" cellspacing="3" cellpadding="3">\r
+ <tr><td style="color:red;" colspan="4"><?php echo $_SESSION['donate_msg']; $_SESSION['donate_msg']='';?></td></tr>\r
+ <tr>\r
+ <td colspan="2" class="msg">\r
+ <p>For your convenience, you can pay your Invoices using our secured \r
+ online credit card processing form. If you would like to have your \r
+ Invoice automatically paid monthly via credit card, please call \r
+ the office and we can set that up for you.\r
+ </p>\r
+ <p>\r
+ * denotes a required field.\r
+ </p>\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td colspan="2" class="heading"><b>Billing information</b></td>\r
+ </tr> \r
+ <tr> \r
+ <td class="title_cell">First name<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="first_name" id="first_name" value="" size="25" />\r
+ </td>\r
+ </tr>\r
+ <tr> \r
+ <td class="title_cell">Last name<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="last_name" value="" size="25" />\r
+ </td>\r
+ </tr>\r
+ <tr> \r
+ <td class="title_cell">Organization<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="organization" value="" size="30" />\r
+ </td>\r
+ </tr>\r
+ <tr> \r
+ <td class="title_cell">Address<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="address" value="" size="50" />\r
+ </td>\r
+ </tr> \r
+ <tr> \r
+ <td class="title_cell">City<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="city" value="" size="15" />\r
+ </td>\r
+ </tr> \r
+ <tr style="display: none"> \r
+ <td class="title_cell">Country<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <select id="country" name="country" onchange="updateStateList();" >\r
+ <option value="">Select country</option>\r
+ <option value="Afghanistan">Afghanistan</option>\r
+ <option value="Albania">Albania</option>\r
+ <option value="Algeria">Algeria</option>\r
+ <option value="American Samoa">American Samoa</option>\r
+ <option value="Andorra">Andorra</option>\r
+ <option value="Angola">Angola</option>\r
+ <option value="Anguilla">Anguilla</option>\r
+ <option value="Antarctica">Antarctica</option>\r
+ <option value="Antigua and Barbuda">Antigua and Barbuda</option>\r
+ <option value="Argentina">Argentina</option>\r
+ <option value="Armenia">Armenia</option>\r
+ <option value="Aruba">Aruba</option>\r
+ <option value="Australia">Australia</option>\r
+ <option value="Austria">Austria</option>\r
+ <option value="Azerbaijan">Azerbaijan</option>\r
+ <option value="Bahamas">Bahamas</option>\r
+ <option value="Bahrain">Bahrain</option>\r
+ <option value="Bangladesh">Bangladesh</option>\r
+ <option value="Barbados">Barbados</option>\r
+ <option value="Belarus">Belarus</option>\r
+ <option value="Belgium">Belgium</option>\r
+ <option value="Belize">Belize</option>\r
+ <option value="Benin">Benin</option>\r
+ <option value="Bermuda">Bermuda</option>\r
+ <option value="Bhutan">Bhutan</option>\r
+ <option value="Bolivia">Bolivia</option>\r
+ <option value="Bosnia and Herzegowina">Bosnia and Herzegowina</option>\r
+ <option value="Botswana">Botswana</option>\r
+ <option value="Bouvet Island">Bouvet Island</option>\r
+ <option value="Brazil">Brazil</option>\r
+ <option value="British Indian Ocean Territory">British Indian Ocean Territory</option>\r
+ <option value="Brunei Darussalam">Brunei Darussalam</option>\r
+ <option value="Bulgaria">Bulgaria</option>\r
+ <option value="Burkina Faso">Burkina Faso</option>\r
+ <option value="Burundi">Burundi</option>\r
+ <option value="Cambodia">Cambodia</option>\r
+ <option value="Cameroon">Cameroon</option>\r
+ <option value="Canada">Canada</option>\r
+ <option value="Canary Islands">Canary Islands</option>\r
+ <option value="Cape Verde">Cape Verde</option>\r
+ <option value="Cayman Islands">Cayman Islands</option>\r
+ <option value="Central African Republic">Central African Republic</option>\r
+ <option value="Chad">Chad</option>\r
+ <option value="Chile">Chile</option>\r
+ <option value="China">China</option>\r
+ <option value="Christmas Island">Christmas Island</option>\r
+ <option value="Cocos (Keeling) Islands">Cocos (Keeling) Islands</option>\r
+ <option value="Colombia">Colombia</option>\r
+ <option value="Comoros">Comoros</option>\r
+ <option value="Congo">Congo</option>\r
+ <option value="Cook Islands">Cook Islands</option>\r
+ <option value="Costa Rica">Costa Rica</option>\r
+ <option value="Cote D'Ivoire">Cote D'Ivoire</option>\r
+ <option value="Croatia">Croatia</option>\r
+ <option value="Cuba">Cuba</option>\r
+ <option value="Cyprus">Cyprus</option>\r
+ <option value="Czech Republic">Czech Republic</option>\r
+ <option value="Denmark">Denmark</option>\r
+ <option value="Djibouti">Djibouti</option>\r
+ <option value="Dominica">Dominica</option>\r
+ <option value="Dominican Republic">Dominican Republic</option>\r
+ <option value="East Timor">East Timor</option>\r
+ <option value="East Timor">East Timor</option>\r
+ <option value="Ecuador">Ecuador</option>\r
+ <option value="Egypt">Egypt</option>\r
+ <option value="El Salvador">El Salvador</option>\r
+ <option value="Equatorial Guinea">Equatorial Guinea</option>\r
+ <option value="Eritrea">Eritrea</option>\r
+ <option value="Estonia">Estonia</option>\r
+ <option value="Ethiopia">Ethiopia</option>\r
+ <option value="Falkland Islands (Malvinas)">Falkland Islands (Malvinas)</option>\r
+ <option value="Faroe Islands">Faroe Islands</option>\r
+ <option value="Fiji">Fiji</option>\r
+ <option value="Finland">Finland</option>\r
+ <option value="France">France</option>\r
+ <option value="France, Metropolitan">France, Metropolitan</option>\r
+ <option value="French Guiana">French Guiana</option>\r
+ <option value="French Polynesia">French Polynesia</option>\r
+ <option value="French Southern Territories">French Southern Territories</option>\r
+ <option value="Gabon">Gabon</option>\r
+ <option value="Gambia">Gambia</option>\r
+ <option value="Georgia">Georgia</option>\r
+ <option value="Germany">Germany</option>\r
+ <option value="Ghana">Ghana</option>\r
+ <option value="Gibraltar">Gibraltar</option>\r
+ <option value="Greece">Greece</option>\r
+ <option value="Greenland">Greenland</option>\r
+ <option value="Grenada">Grenada</option>\r
+ <option value="Guadeloupe">Guadeloupe</option>\r
+ <option value="Guam">Guam</option>\r
+ <option value="Guatemala">Guatemala</option>\r
+ <option value="Guinea">Guinea</option>\r
+ <option value="Guinea-bissau">Guinea-bissau</option>\r
+ <option value="Guyana">Guyana</option>\r
+ <option value="Haiti">Haiti</option>\r
+ <option value="Heard and Mc Donald Islands">Heard and Mc Donald Islands</option>\r
+ <option value="Honduras">Honduras</option>\r
+ <option value="Hong Kong">Hong Kong</option>\r
+ <option value="Hungary">Hungary</option>\r
+ <option value="Iceland">Iceland</option>\r
+ <option value="India">India</option>\r
+ <option value="Indonesia">Indonesia</option>\r
+ <option value="Iran (Islamic Republic of)">Iran (Islamic Republic of)</option>\r
+ <option value="Iraq">Iraq</option>\r
+ <option value="Ireland">Ireland</option>\r
+ <option value="Israel">Israel</option>\r
+ <option value="Italy">Italy</option>\r
+ <option value="Jamaica">Jamaica</option>\r
+ <option value="Japan">Japan</option>\r
+ <option value="Jersey">Jersey</option>\r
+ <option value="Jordan">Jordan</option>\r
+ <option value="Kazakhstan">Kazakhstan</option>\r
+ <option value="Kenya">Kenya</option>\r
+ <option value="Kiribati">Kiribati</option>\r
+ <option value="Korea, Democratic People's Republic of">Korea, Democratic People's Republic of</option>\r
+ <option value="Korea, Republic of">Korea, Republic of</option>\r
+ <option value="Kuwait">Kuwait</option>\r
+ <option value="Kyrgyzstan">Kyrgyzstan</option>\r
+ <option value="Lao People's Democratic Republic">Lao People's Democratic Republic</option>\r
+ <option value="Latvia">Latvia</option>\r
+ <option value="Lebanon">Lebanon</option>\r
+ <option value="Lesotho">Lesotho</option>\r
+ <option value="Liberia">Liberia</option>\r
+ <option value="Libyan Arab Jamahiriya">Libyan Arab Jamahiriya</option>\r
+ <option value="Liechtenstein">Liechtenstein</option>\r
+ <option value="Lithuania">Lithuania</option>\r
+ <option value="Luxembourg">Luxembourg</option>\r
+ <option value="Macau">Macau</option>\r
+ <option value="Macedonia, The Former Yugoslav Republic of">Macedonia, The Former Yugoslav Republic of</option>\r
+ <option value="Madagascar">Madagascar</option>\r
+ <option value="Malawi">Malawi</option>\r
+ <option value="Malaysia">Malaysia</option>\r
+ <option value="Maldives">Maldives</option>\r
+ <option value="Mali">Mali</option>\r
+ <option value="Malta">Malta</option>\r
+ <option value="Marshall Islands">Marshall Islands</option>\r
+ <option value="Martinique">Martinique</option>\r
+ <option value="Mauritania">Mauritania</option>\r
+ <option value="Mauritius">Mauritius</option>\r
+ <option value="Mayotte">Mayotte</option>\r
+ <option value="Mexico">Mexico</option>\r
+ <option value="Micronesia, Federated States of">Micronesia, Federated States of</option>\r
+ <option value="Moldova, Republic of">Moldova, Republic of</option>\r
+ <option value="Monaco">Monaco</option>\r
+ <option value="Mongolia">Mongolia</option>\r
+ <option value="Montenegro">Montenegro</option>\r
+ <option value="Montserrat">Montserrat</option>\r
+ <option value="Morocco">Morocco</option>\r
+ <option value="Mozambique">Mozambique</option>\r
+ <option value="Myanmar">Myanmar</option>\r
+ <option value="Namibia">Namibia</option>\r
+ <option value="Nauru">Nauru</option>\r
+ <option value="Nepal">Nepal</option>\r
+ <option value="Netherlands">Netherlands</option>\r
+ <option value="Netherlands Antilles">Netherlands Antilles</option>\r
+ <option value="New Caledonia">New Caledonia</option>\r
+ <option value="New Zealand">New Zealand</option>\r
+ <option value="Nicaragua">Nicaragua</option>\r
+ <option value="Niger">Niger</option>\r
+ <option value="Nigeria">Nigeria</option>\r
+ <option value="Niue">Niue</option>\r
+ <option value="Norfolk Island">Norfolk Island</option>\r
+ <option value="Northern Mariana Islands">Northern Mariana Islands</option>\r
+ <option value="Norway">Norway</option>\r
+ <option value="Oman">Oman</option>\r
+ <option value="Pakistan">Pakistan</option>\r
+ <option value="Palau">Palau</option>\r
+ <option value="Panama">Panama</option>\r
+ <option value="Papua New Guinea">Papua New Guinea</option>\r
+ <option value="Paraguay">Paraguay</option>\r
+ <option value="Peru">Peru</option>\r
+ <option value="Philippines">Philippines</option>\r
+ <option value="Pitcairn">Pitcairn</option>\r
+ <option value="Poland">Poland</option>\r
+ <option value="Portugal">Portugal</option>\r
+ <option value="Puerto Rico">Puerto Rico</option>\r
+ <option value="Qatar">Qatar</option>\r
+ <option value="Reunion">Reunion</option>\r
+ <option value="Romania">Romania</option>\r
+ <option value="Russian Federation">Russian Federation</option>\r
+ <option value="Rwanda">Rwanda</option>\r
+ <option value="Saint Kitts and Nevis">Saint Kitts and Nevis</option>\r
+ <option value="Saint Lucia">Saint Lucia</option>\r
+ <option value="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</option>\r
+ <option value="Samoa">Samoa</option>\r
+ <option value="San Marino">San Marino</option>\r
+ <option value="Sao Tome and Principe">Sao Tome and Principe</option>\r
+ <option value="Saudi Arabia">Saudi Arabia</option>\r
+ <option value="Senegal">Senegal</option>\r
+ <option value="Serbia">Serbia</option>\r
+ <option value="Seychelles">Seychelles</option>\r
+ <option value="Sierra Leone">Sierra Leone</option>\r
+ <option value="Singapore">Singapore</option>\r
+ <option value="Slovakia (Slovak Republic)">Slovakia (Slovak Republic)</option>\r
+ <option value="Slovenia">Slovenia</option>\r
+ <option value="Solomon Islands">Solomon Islands</option>\r
+ <option value="Somalia">Somalia</option>\r
+ <option value="South Africa">South Africa</option>\r
+ <option value="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</option>\r
+ <option value="Spain">Spain</option>\r
+ <option value="Sri Lanka">Sri Lanka</option>\r
+ <option value="St. Barthelemy">St. Barthelemy</option>\r
+ <option value="St. Eustatius">St. Eustatius</option>\r
+ <option value="St. Helena">St. Helena</option>\r
+ <option value="St. Pierre and Miquelon">St. Pierre and Miquelon</option>\r
+ <option value="Sudan">Sudan</option>\r
+ <option value="Suriname">Suriname</option>\r
+ <option value="Svalbard and Jan Mayen Islands">Svalbard and Jan Mayen Islands</option>\r
+ <option value="Swaziland">Swaziland</option>\r
+ <option value="Sweden">Sweden</option>\r
+ <option value="Switzerland">Switzerland</option>\r
+ <option value="Syrian Arab Republic">Syrian Arab Republic</option>\r
+ <option value="Taiwan">Taiwan</option>\r
+ <option value="Tajikistan">Tajikistan</option>\r
+ <option value="Tanzania, United Republic of">Tanzania, United Republic of</option>\r
+ <option value="Thailand">Thailand</option>\r
+ <option value="The Democratic Republic of Congo">The Democratic Republic of Congo</option>\r
+ <option value="Togo">Togo</option>\r
+ <option value="Tokelau">Tokelau</option>\r
+ <option value="Tonga">Tonga</option>\r
+ <option value="Trinidad and Tobago">Trinidad and Tobago</option>\r
+ <option value="Tunisia">Tunisia</option>\r
+ <option value="Turkey">Turkey</option>\r
+ <option value="Turkmenistan">Turkmenistan</option>\r
+ <option value="Turks and Caicos Islands">Turks and Caicos Islands</option>\r
+ <option value="Tuvalu">Tuvalu</option>\r
+ <option value="Uganda">Uganda</option>\r
+ <option value="Ukraine">Ukraine</option>\r
+ <option value="United Arab Emirates">United Arab Emirates</option>\r
+ <option value="United Kingdom">United Kingdom</option>\r
+ <option value="United States" selected="selected">United States</option>\r
+ <option value="United States Minor Outlying Islands">United States Minor Outlying Islands</option>\r
+ <option value="Uruguay">Uruguay</option>\r
+ <option value="Uzbekistan">Uzbekistan</option>\r
+ <option value="Vanuatu">Vanuatu</option>\r
+ <option value="Vatican City State (Holy See)">Vatican City State (Holy See)</option>\r
+ <option value="Venezuela">Venezuela</option>\r
+ <option value="Viet Nam">Viet Nam</option>\r
+ <option value="Virgin Islands (British)">Virgin Islands (British)</option>\r
+ <option value="Virgin Islands (U.S.)">Virgin Islands (U.S.)</option>\r
+ <option value="Wallis and Futuna Islands">Wallis and Futuna Islands</option>\r
+ <option value="Western Sahara">Western Sahara</option>\r
+ <option value="Yemen">Yemen</option>\r
+ <option value="Zambia">Zambia</option>\r
+ <option value="Zimbabwe">Zimbabwe</option>\r
+ </select>\r
+ </td>\r
+ </tr> \r
+ <tr> \r
+ <td class="title_cell">State<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <select id="state" name="state" class="">\r
+ <option value="" selected="selected">Select State</option>\r
+ <option value="AK">Alaska</option>\r
+ <option value="AL">Alabama</option>\r
+ <option value="AR">Arkansas</option>\r
+ <option value="AZ">Arizona</option>\r
+ <option value="CA">California</option>\r
+ <option value="CO">Colorado</option>\r
+ <option value="CT">Connecticut</option>\r
+ <option value="DC">District Of Columbia</option>\r
+ <option value="DE">Delaware</option>\r
+ <option value="FL">Florida</option>\r
+ <option value="GA">Georgia</option>\r
+ <option value="HI">Hawaii</option>\r
+ <option value="IA">Iowa</option>\r
+ <option value="ID">Idaho</option>\r
+ <option value="IL">Illinois</option>\r
+ <option value="IN">Indiana</option>\r
+ <option value="KS">Kansas</option>\r
+ <option value="KY">Kentucky</option>\r
+ <option value="LA">Louisiana</option>\r
+ <option value="MA">Massachusetts</option>\r
+ <option value="MD">Maryland</option>\r
+ <option value="ME">Maine</option>\r
+ <option value="MI">Michigan</option>\r
+ <option value="MN">Minnesota</option>\r
+ <option value="MO">Missouri</option>\r
+ <option value="MS">Mississippi</option>\r
+ <option value="MT">Montana</option>\r
+ <option value="NC">North Carolina</option>\r
+ <option value="ND">North Dakota</option>\r
+ <option value="NE">Nebraska</option>\r
+ <option value="NH">New Hampshire</option>\r
+ <option value="NJ">New Jersey</option>\r
+ <option value="NM">New Mexico</option>\r
+ <option value="NV">Nevada</option>\r
+ <option value="NY">New York</option>\r
+ <option value="OH">Ohio</option>\r
+ <option value="OK">Oklahoma</option>\r
+ <option value="OR">Oregon</option>\r
+ <option value="PA">Pennsylvania</option>\r
+ <option value="RI">Rhode Island</option>\r
+ <option value="SC">South Carolina</option>\r
+ <option value="SD">South Dakota</option>\r
+ <option value="TN">Tennessee</option>\r
+ <option value="TX">Texas</option>\r
+ <option value="UT">Utah</option>\r
+ <option value="VA">Virginia</option>\r
+ <option value="VT">Vermont</option>\r
+ <option value="WA">Washington</option>\r
+ <option value="WI">Wisconsin</option>\r
+ <option value="WV">West Virginia</option>\r
+ <option value="WY">Wyoming</option>\r
+ </select>\r
+ </td>\r
+ </tr>\r
+ <tr> \r
+ <td class="title_cell">Zip<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="zip" value="" size="15" />\r
+ </td>\r
+ </tr>\r
+ <tr> \r
+ <td class="title_cell">Phone<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="phone" value="" size="15" />\r
+ </td>\r
+ </tr> \r
+ <tr> \r
+ <td class="title_cell">Email<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="email" value="" size="40" />\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td colspan="2" class="heading"><strong>Payment Information</strong></td> \r
+ </tr>\r
+ \r
+ \r
+ <tr>\r
+ <td class="title_cell" valign="top">Amount<span class="required">*</span></td> \r
+ <td id="amount_container">\r
+ $<div style="display: inline-block"> \r
+ <input type="text" class="inputbox" name="amount" value="" onchange="deSelectRadio();" size="10" style="display: inline-block" />\r
+ </div>\r
+ </td>\r
+ </tr> \r
+ \r
+ <tr id="invoice_num" >\r
+ <td class="title_cell">Invoice Number<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" name="invoice_num" class="inputbox" onkeyup="checkNumber(this)" value="" size="20" />\r
+ </td>\r
+ </tr>\r
+ \r
+ <tr id="tr_card_type">\r
+ <td class="title_cell">Card type<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <select id="card_type" name="card_type" class="inputbox" >\r
+ <option value="Visa">Visa</option>\r
+ <option value="MasterCard">MasterCard</option>\r
+ <option value="Discover">Discover</option>\r
+ <option value="Amex">American Express</option>\r
+ </select>\r
+ </td>\r
+ </tr> \r
+ <tr id="tr_card_number" >\r
+ <td class="title_cell">Credit Card Number<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" name="x_card_num" class="inputbox" onkeyup="checkNumber(this)" value="" size="20" />\r
+ </td>\r
+ </tr>\r
+ <tr id="tr_exp_date" >\r
+ <td class="title_cell">Expiration Date<span class="required">*</span>\r
+ </td>\r
+ <td class="field_cell"> \r
+ <select name="exp_month" class="inputbox exp_month" >\r
+ <option value="1" <?php if(date('m')=='01'){?> selected="selected"<?php }?>>01</option>\r
+ <option value="2" <?php if(date('m')=='02'){?> selected="selected"<?php }?>>02</option>\r
+ <option value="3" <?php if(date('m')=='03'){?> selected="selected"<?php }?>>03</option>\r
+ <option value="4" <?php if(date('m')=='04'){?> selected="selected"<?php }?>>04</option>\r
+ <option value="5" <?php if(date('m')=='05'){?> selected="selected"<?php }?>>05</option>\r
+ <option value="6" <?php if(date('m')=='06'){?> selected="selected"<?php }?>>06</option>\r
+ <option value="7" <?php if(date('m')=='07'){?> selected="selected"<?php }?>>07</option>\r
+ <option value="8" <?php if(date('m')=='08'){?> selected="selected"<?php }?>>08</option>\r
+ <option value="9" <?php if(date('m')=='09'){?> selected="selected"<?php }?>>09</option>\r
+ <option value="10" <?php if(date('m')=='10'){?> selected="selected"<?php }?>>10</option>\r
+ <option value="11" <?php if(date('m')=='11'){?> selected="selected"<?php }?>>11</option>\r
+ <option value="12" <?php if(date('m')=='12'){?> selected="selected"<?php }?>>12</option>\r
+ </select> / \r
+ <select id="exp_year" name="exp_year" class="inputbox exp_month" >\r
+ <?php $year = date(Y,time()); $num = 1;\r
+ while ( $num <= 7 ) {\r
+ echo '<option value="' . $year .'">' . $year . '</option>';$year++; $num++;\r
+ }\r
+ ?>\r
+ </select>\r
+ </td>\r
+ </tr>\r
+ <tr id="tr_cvv_code" >\r
+ <td class="title_cell">Card (CVV) Code<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" name="x_card_code" class="inputbox" onKeyUp="checkNumber(this)" value="" size="20" />\r
+ </td>\r
+ </tr>\r
+ \r
+ \r
+ <tr> \r
+ <td class="title_cell">Comment</td>\r
+ <td class="field_cell">\r
+ <textarea rows="7" cols="50" name="comment" class="inputbox"></textarea>\r
+ </td>\r
+ </tr> \r
+ <tr>\r
+ <td colspan="2" align="left">\r
+ <input type="button" class="button donate_btn_submit" name="btnSubmit" value="Submit" onclick="checkData();">\r
+ </td>\r
+ </tr> \r
+ </table>\r
+ <input type="hidden" name="payment_method" value="os_authnet" />\r
+ </form>\r
+ <script type="text/javascript">\r
+ var recurrings = new Array();\r
+ recurrings[1] = 1 ;\r
+ recurrings[2] = 1 ;\r
+ recurrings[3] = 1 ;\r
+ recurrings[4] = 1 ;\r
+ recurrings[5] = 1 ;\r
+ var countryIds = new Array(); \r
+ countryIds[0] = 1;\r
+ countryIds[1] = 2;\r
+ countryIds[2] = 3;\r
+ countryIds[3] = 4;\r
+ countryIds[4] = 5;\r
+ countryIds[5] = 6;\r
+ countryIds[6] = 7;\r
+ countryIds[7] = 8;\r
+ countryIds[8] = 9;\r
+ countryIds[9] = 10;\r
+ countryIds[10] = 11;\r
+ countryIds[11] = 12;\r
+ countryIds[12] = 13;\r
+ countryIds[13] = 14;\r
+ countryIds[14] = 15;\r
+ countryIds[15] = 16;\r
+ countryIds[16] = 17;\r
+ countryIds[17] = 18;\r
+ countryIds[18] = 19;\r
+ countryIds[19] = 20;\r
+ countryIds[20] = 21;\r
+ countryIds[21] = 22;\r
+ countryIds[22] = 23;\r
+ countryIds[23] = 24;\r
+ countryIds[24] = 25;\r
+ countryIds[25] = 26;\r
+ countryIds[26] = 27;\r
+ countryIds[27] = 28;\r
+ countryIds[28] = 29;\r
+ countryIds[29] = 30;\r
+ countryIds[30] = 31;\r
+ countryIds[31] = 32;\r
+ countryIds[32] = 33;\r
+ countryIds[33] = 34;\r
+ countryIds[34] = 35;\r
+ countryIds[35] = 36;\r
+ countryIds[36] = 37;\r
+ countryIds[37] = 38;\r
+ countryIds[38] = 39;\r
+ countryIds[39] = 40;\r
+ countryIds[40] = 41;\r
+ countryIds[41] = 42;\r
+ countryIds[42] = 43;\r
+ countryIds[43] = 44;\r
+ countryIds[44] = 45;\r
+ countryIds[45] = 46;\r
+ countryIds[46] = 47;\r
+ countryIds[47] = 48;\r
+ countryIds[48] = 49;\r
+ countryIds[49] = 50;\r
+ countryIds[50] = 51;\r
+ countryIds[51] = 52;\r
+ countryIds[52] = 53;\r
+ countryIds[53] = 54;\r
+ countryIds[54] = 55;\r
+ countryIds[55] = 56;\r
+ countryIds[56] = 57;\r
+ countryIds[57] = 58;\r
+ countryIds[58] = 59;\r
+ countryIds[59] = 60;\r
+ countryIds[60] = 61;\r
+ countryIds[61] = 62;\r
+ countryIds[62] = 63;\r
+ countryIds[63] = 64;\r
+ countryIds[64] = 65;\r
+ countryIds[65] = 66;\r
+ countryIds[66] = 67;\r
+ countryIds[67] = 68;\r
+ countryIds[68] = 69;\r
+ countryIds[69] = 70;\r
+ countryIds[70] = 71;\r
+ countryIds[71] = 72;\r
+ countryIds[72] = 73;\r
+ countryIds[73] = 74;\r
+ countryIds[74] = 75;\r
+ countryIds[75] = 76;\r
+ countryIds[76] = 77;\r
+ countryIds[77] = 78;\r
+ countryIds[78] = 79;\r
+ countryIds[79] = 80;\r
+ countryIds[80] = 81;\r
+ countryIds[81] = 82;\r
+ countryIds[82] = 83;\r
+ countryIds[83] = 84;\r
+ countryIds[84] = 85;\r
+ countryIds[85] = 86;\r
+ countryIds[86] = 87;\r
+ countryIds[87] = 88;\r
+ countryIds[88] = 89;\r
+ countryIds[89] = 90;\r
+ countryIds[90] = 91;\r
+ countryIds[91] = 92;\r
+ countryIds[92] = 93;\r
+ countryIds[93] = 94;\r
+ countryIds[94] = 95;\r
+ countryIds[95] = 96;\r
+ countryIds[96] = 97;\r
+ countryIds[97] = 98;\r
+ countryIds[98] = 99;\r
+ countryIds[99] = 100;\r
+ countryIds[100] = 101;\r
+ countryIds[101] = 102;\r
+ countryIds[102] = 103;\r
+ countryIds[103] = 104;\r
+ countryIds[104] = 105;\r
+ countryIds[105] = 106;\r
+ countryIds[106] = 107;\r
+ countryIds[107] = 108;\r
+ countryIds[108] = 109;\r
+ countryIds[109] = 110;\r
+ countryIds[110] = 111;\r
+ countryIds[111] = 112;\r
+ countryIds[112] = 113;\r
+ countryIds[113] = 114;\r
+ countryIds[114] = 115;\r
+ countryIds[115] = 116;\r
+ countryIds[116] = 117;\r
+ countryIds[117] = 118;\r
+ countryIds[118] = 119;\r
+ countryIds[119] = 120;\r
+ countryIds[120] = 121;\r
+ countryIds[121] = 122;\r
+ countryIds[122] = 123;\r
+ countryIds[123] = 124;\r
+ countryIds[124] = 125;\r
+ countryIds[125] = 126;\r
+ countryIds[126] = 127;\r
+ countryIds[127] = 128;\r
+ countryIds[128] = 129;\r
+ countryIds[129] = 130;\r
+ countryIds[130] = 131;\r
+ countryIds[131] = 132;\r
+ countryIds[132] = 133;\r
+ countryIds[133] = 134;\r
+ countryIds[134] = 135;\r
+ countryIds[135] = 136;\r
+ countryIds[136] = 137;\r
+ countryIds[137] = 138;\r
+ countryIds[138] = 139;\r
+ countryIds[139] = 140;\r
+ countryIds[140] = 141;\r
+ countryIds[141] = 142;\r
+ countryIds[142] = 143;\r
+ countryIds[143] = 144;\r
+ countryIds[144] = 145;\r
+ countryIds[145] = 146;\r
+ countryIds[146] = 147;\r
+ countryIds[147] = 148;\r
+ countryIds[148] = 149;\r
+ countryIds[149] = 150;\r
+ countryIds[150] = 151;\r
+ countryIds[151] = 152;\r
+ countryIds[152] = 153;\r
+ countryIds[153] = 154;\r
+ countryIds[154] = 155;\r
+ countryIds[155] = 156;\r
+ countryIds[156] = 157;\r
+ countryIds[157] = 158;\r
+ countryIds[158] = 159;\r
+ countryIds[159] = 160;\r
+ countryIds[160] = 161;\r
+ countryIds[161] = 162;\r
+ countryIds[162] = 163;\r
+ countryIds[163] = 164;\r
+ countryIds[164] = 165;\r
+ countryIds[165] = 166;\r
+ countryIds[166] = 167;\r
+ countryIds[167] = 168;\r
+ countryIds[168] = 169;\r
+ countryIds[169] = 170;\r
+ countryIds[170] = 171;\r
+ countryIds[171] = 172;\r
+ countryIds[172] = 173;\r
+ countryIds[173] = 174;\r
+ countryIds[174] = 175;\r
+ countryIds[175] = 176;\r
+ countryIds[176] = 177;\r
+ countryIds[177] = 178;\r
+ countryIds[178] = 179;\r
+ countryIds[179] = 180;\r
+ countryIds[180] = 181;\r
+ countryIds[181] = 182;\r
+ countryIds[182] = 183;\r
+ countryIds[183] = 184;\r
+ countryIds[184] = 185;\r
+ countryIds[185] = 186;\r
+ countryIds[186] = 187;\r
+ countryIds[187] = 188;\r
+ countryIds[188] = 189;\r
+ countryIds[189] = 190;\r
+ countryIds[190] = 191;\r
+ countryIds[191] = 192;\r
+ countryIds[192] = 193;\r
+ countryIds[193] = 194;\r
+ countryIds[194] = 195;\r
+ countryIds[195] = 196;\r
+ countryIds[196] = 197;\r
+ countryIds[197] = 198;\r
+ countryIds[198] = 199;\r
+ countryIds[199] = 200;\r
+ countryIds[200] = 201;\r
+ countryIds[201] = 202;\r
+ countryIds[202] = 203;\r
+ countryIds[203] = 204;\r
+ countryIds[204] = 205;\r
+ countryIds[205] = 206;\r
+ countryIds[206] = 207;\r
+ countryIds[207] = 208;\r
+ countryIds[208] = 209;\r
+ countryIds[209] = 210;\r
+ countryIds[210] = 211;\r
+ countryIds[211] = 212;\r
+ countryIds[212] = 213;\r
+ countryIds[213] = 214;\r
+ countryIds[214] = 215;\r
+ countryIds[215] = 216;\r
+ countryIds[216] = 217;\r
+ countryIds[217] = 218;\r
+ countryIds[218] = 219;\r
+ countryIds[219] = 220;\r
+ countryIds[220] = 221;\r
+ countryIds[221] = 222;\r
+ countryIds[222] = 223;\r
+ countryIds[223] = 224;\r
+ countryIds[224] = 225;\r
+ countryIds[225] = 226;\r
+ countryIds[226] = 227;\r
+ countryIds[227] = 228;\r
+ countryIds[228] = 229;\r
+ countryIds[229] = 230;\r
+ countryIds[230] = 231;\r
+ countryIds[231] = 232;\r
+ countryIds[232] = 233;\r
+ countryIds[233] = 234;\r
+ countryIds[234] = 235;\r
+ countryIds[235] = 236;\r
+ countryIds[236] = 237;\r
+ countryIds[237] = 238;\r
+ countryIds[238] = 239;\r
+ countryIds[239] = 240;\r
+ countryIds[240] = 241;\r
+ countryIds[241] = 242;\r
+ countryIds[242] = 243;\r
+ countryIds[243] = 244;\r
+ countryIds[244] = 245;\r
+ var countryNames = new Array(); \r
+ countryNames[0]= "Afghanistan"\r
+ countryNames[1]= "Albania"\r
+ countryNames[2]= "Algeria"\r
+ countryNames[3]= "American Samoa"\r
+ countryNames[4]= "Andorra"\r
+ countryNames[5]= "Angola"\r
+ countryNames[6]= "Anguilla"\r
+ countryNames[7]= "Antarctica"\r
+ countryNames[8]= "Antigua and Barbuda"\r
+ countryNames[9]= "Argentina"\r
+ countryNames[10]= "Armenia"\r
+ countryNames[11]= "Aruba"\r
+ countryNames[12]= "Australia"\r
+ countryNames[13]= "Austria"\r
+ countryNames[14]= "Azerbaijan"\r
+ countryNames[15]= "Bahamas"\r
+ countryNames[16]= "Bahrain"\r
+ countryNames[17]= "Bangladesh"\r
+ countryNames[18]= "Barbados"\r
+ countryNames[19]= "Belarus"\r
+ countryNames[20]= "Belgium"\r
+ countryNames[21]= "Belize"\r
+ countryNames[22]= "Benin"\r
+ countryNames[23]= "Bermuda"\r
+ countryNames[24]= "Bhutan"\r
+ countryNames[25]= "Bolivia"\r
+ countryNames[26]= "Bosnia and Herzegowina"\r
+ countryNames[27]= "Botswana"\r
+ countryNames[28]= "Bouvet Island"\r
+ countryNames[29]= "Brazil"\r
+ countryNames[30]= "British Indian Ocean Territory"\r
+ countryNames[31]= "Brunei Darussalam"\r
+ countryNames[32]= "Bulgaria"\r
+ countryNames[33]= "Burkina Faso"\r
+ countryNames[34]= "Burundi"\r
+ countryNames[35]= "Cambodia"\r
+ countryNames[36]= "Cameroon"\r
+ countryNames[37]= "Canada"\r
+ countryNames[38]= "Cape Verde"\r
+ countryNames[39]= "Cayman Islands"\r
+ countryNames[40]= "Central African Republic"\r
+ countryNames[41]= "Chad"\r
+ countryNames[42]= "Chile"\r
+ countryNames[43]= "China"\r
+ countryNames[44]= "Christmas Island"\r
+ countryNames[45]= "Cocos (Keeling) Islands"\r
+ countryNames[46]= "Colombia"\r
+ countryNames[47]= "Comoros"\r
+ countryNames[48]= "Congo"\r
+ countryNames[49]= "Cook Islands"\r
+ countryNames[50]= "Costa Rica"\r
+ countryNames[51]= "Cote D'Ivoire"\r
+ countryNames[52]= "Croatia"\r
+ countryNames[53]= "Cuba"\r
+ countryNames[54]= "Cyprus"\r
+ countryNames[55]= "Czech Republic"\r
+ countryNames[56]= "Denmark"\r
+ countryNames[57]= "Djibouti"\r
+ countryNames[58]= "Dominica"\r
+ countryNames[59]= "Dominican Republic"\r
+ countryNames[60]= "East Timor"\r
+ countryNames[61]= "Ecuador"\r
+ countryNames[62]= "Egypt"\r
+ countryNames[63]= "El Salvador"\r
+ countryNames[64]= "Equatorial Guinea"\r
+ countryNames[65]= "Eritrea"\r
+ countryNames[66]= "Estonia"\r
+ countryNames[67]= "Ethiopia"\r
+ countryNames[68]= "Falkland Islands (Malvinas)"\r
+ countryNames[69]= "Faroe Islands"\r
+ countryNames[70]= "Fiji"\r
+ countryNames[71]= "Finland"\r
+ countryNames[72]= "France"\r
+ countryNames[73]= "France, Metropolitan"\r
+ countryNames[74]= "French Guiana"\r
+ countryNames[75]= "French Polynesia"\r
+ countryNames[76]= "French Southern Territories"\r
+ countryNames[77]= "Gabon"\r
+ countryNames[78]= "Gambia"\r
+ countryNames[79]= "Georgia"\r
+ countryNames[80]= "Germany"\r
+ countryNames[81]= "Ghana"\r
+ countryNames[82]= "Gibraltar"\r
+ countryNames[83]= "Greece"\r
+ countryNames[84]= "Greenland"\r
+ countryNames[85]= "Grenada"\r
+ countryNames[86]= "Guadeloupe"\r
+ countryNames[87]= "Guam"\r
+ countryNames[88]= "Guatemala"\r
+ countryNames[89]= "Guinea"\r
+ countryNames[90]= "Guinea-bissau"\r
+ countryNames[91]= "Guyana"\r
+ countryNames[92]= "Haiti"\r
+ countryNames[93]= "Heard and Mc Donald Islands"\r
+ countryNames[94]= "Honduras"\r
+ countryNames[95]= "Hong Kong"\r
+ countryNames[96]= "Hungary"\r
+ countryNames[97]= "Iceland"\r
+ countryNames[98]= "India"\r
+ countryNames[99]= "Indonesia"\r
+ countryNames[100]= "Iran (Islamic Republic of)"\r
+ countryNames[101]= "Iraq"\r
+ countryNames[102]= "Ireland"\r
+ countryNames[103]= "Israel"\r
+ countryNames[104]= "Italy"\r
+ countryNames[105]= "Jamaica"\r
+ countryNames[106]= "Japan"\r
+ countryNames[107]= "Jordan"\r
+ countryNames[108]= "Kazakhstan"\r
+ countryNames[109]= "Kenya"\r
+ countryNames[110]= "Kiribati"\r
+ countryNames[111]= "Korea, Democratic People's Republic of"\r
+ countryNames[112]= "Korea, Republic of"\r
+ countryNames[113]= "Kuwait"\r
+ countryNames[114]= "Kyrgyzstan"\r
+ countryNames[115]= "Lao People's Democratic Republic"\r
+ countryNames[116]= "Latvia"\r
+ countryNames[117]= "Lebanon"\r
+ countryNames[118]= "Lesotho"\r
+ countryNames[119]= "Liberia"\r
+ countryNames[120]= "Libyan Arab Jamahiriya"\r
+ countryNames[121]= "Liechtenstein"\r
+ countryNames[122]= "Lithuania"\r
+ countryNames[123]= "Luxembourg"\r
+ countryNames[124]= "Macau"\r
+ countryNames[125]= "Macedonia, The Former Yugoslav Republic of"\r
+ countryNames[126]= "Madagascar"\r
+ countryNames[127]= "Malawi"\r
+ countryNames[128]= "Malaysia"\r
+ countryNames[129]= "Maldives"\r
+ countryNames[130]= "Mali"\r
+ countryNames[131]= "Malta"\r
+ countryNames[132]= "Marshall Islands"\r
+ countryNames[133]= "Martinique"\r
+ countryNames[134]= "Mauritania"\r
+ countryNames[135]= "Mauritius"\r
+ countryNames[136]= "Mayotte"\r
+ countryNames[137]= "Mexico"\r
+ countryNames[138]= "Micronesia, Federated States of"\r
+ countryNames[139]= "Moldova, Republic of"\r
+ countryNames[140]= "Monaco"\r
+ countryNames[141]= "Mongolia"\r
+ countryNames[142]= "Montserrat"\r
+ countryNames[143]= "Morocco"\r
+ countryNames[144]= "Mozambique"\r
+ countryNames[145]= "Myanmar"\r
+ countryNames[146]= "Namibia"\r
+ countryNames[147]= "Nauru"\r
+ countryNames[148]= "Nepal"\r
+ countryNames[149]= "Netherlands"\r
+ countryNames[150]= "Netherlands Antilles"\r
+ countryNames[151]= "New Caledonia"\r
+ countryNames[152]= "New Zealand"\r
+ countryNames[153]= "Nicaragua"\r
+ countryNames[154]= "Niger"\r
+ countryNames[155]= "Nigeria"\r
+ countryNames[156]= "Niue"\r
+ countryNames[157]= "Norfolk Island"\r
+ countryNames[158]= "Northern Mariana Islands"\r
+ countryNames[159]= "Norway"\r
+ countryNames[160]= "Oman"\r
+ countryNames[161]= "Pakistan"\r
+ countryNames[162]= "Palau"\r
+ countryNames[163]= "Panama"\r
+ countryNames[164]= "Papua New Guinea"\r
+ countryNames[165]= "Paraguay"\r
+ countryNames[166]= "Peru"\r
+ countryNames[167]= "Philippines"\r
+ countryNames[168]= "Pitcairn"\r
+ countryNames[169]= "Poland"\r
+ countryNames[170]= "Portugal"\r
+ countryNames[171]= "Puerto Rico"\r
+ countryNames[172]= "Qatar"\r
+ countryNames[173]= "Reunion"\r
+ countryNames[174]= "Romania"\r
+ countryNames[175]= "Russian Federation"\r
+ countryNames[176]= "Rwanda"\r
+ countryNames[177]= "Saint Kitts and Nevis"\r
+ countryNames[178]= "Saint Lucia"\r
+ countryNames[179]= "Saint Vincent and the Grenadines"\r
+ countryNames[180]= "Samoa"\r
+ countryNames[181]= "San Marino"\r
+ countryNames[182]= "Sao Tome and Principe"\r
+ countryNames[183]= "Saudi Arabia"\r
+ countryNames[184]= "Senegal"\r
+ countryNames[185]= "Seychelles"\r
+ countryNames[186]= "Sierra Leone"\r
+ countryNames[187]= "Singapore"\r
+ countryNames[188]= "Slovakia (Slovak Republic)"\r
+ countryNames[189]= "Slovenia"\r
+ countryNames[190]= "Solomon Islands"\r
+ countryNames[191]= "Somalia"\r
+ countryNames[192]= "South Africa"\r
+ countryNames[193]= "South Georgia and the South Sandwich Islands"\r
+ countryNames[194]= "Spain"\r
+ countryNames[195]= "Sri Lanka"\r
+ countryNames[196]= "St. Helena"\r
+ countryNames[197]= "St. Pierre and Miquelon"\r
+ countryNames[198]= "Sudan"\r
+ countryNames[199]= "Suriname"\r
+ countryNames[200]= "Svalbard and Jan Mayen Islands"\r
+ countryNames[201]= "Swaziland"\r
+ countryNames[202]= "Sweden"\r
+ countryNames[203]= "Switzerland"\r
+ countryNames[204]= "Syrian Arab Republic"\r
+ countryNames[205]= "Taiwan"\r
+ countryNames[206]= "Tajikistan"\r
+ countryNames[207]= "Tanzania, United Republic of"\r
+ countryNames[208]= "Thailand"\r
+ countryNames[209]= "Togo"\r
+ countryNames[210]= "Tokelau"\r
+ countryNames[211]= "Tonga"\r
+ countryNames[212]= "Trinidad and Tobago"\r
+ countryNames[213]= "Tunisia"\r
+ countryNames[214]= "Turkey"\r
+ countryNames[215]= "Turkmenistan"\r
+ countryNames[216]= "Turks and Caicos Islands"\r
+ countryNames[217]= "Tuvalu"\r
+ countryNames[218]= "Uganda"\r
+ countryNames[219]= "Ukraine"\r
+ countryNames[220]= "United Arab Emirates"\r
+ countryNames[221]= "United Kingdom"\r
+ countryNames[222]= "United States"\r
+ countryNames[223]= "United States Minor Outlying Islands"\r
+ countryNames[224]= "Uruguay"\r
+ countryNames[225]= "Uzbekistan"\r
+ countryNames[226]= "Vanuatu"\r
+ countryNames[227]= "Vatican City State (Holy See)"\r
+ countryNames[228]= "Venezuela"\r
+ countryNames[229]= "Viet Nam"\r
+ countryNames[230]= "Virgin Islands (British)"\r
+ countryNames[231]= "Virgin Islands (U.S.)"\r
+ countryNames[232]= "Wallis and Futuna Islands"\r
+ countryNames[233]= "Western Sahara"\r
+ countryNames[234]= "Yemen"\r
+ countryNames[235]= "Serbia"\r
+ countryNames[236]= "The Democratic Republic of Congo"\r
+ countryNames[237]= "Zambia"\r
+ countryNames[238]= "Zimbabwe"\r
+ countryNames[239]= "East Timor"\r
+ countryNames[240]= "Jersey"\r
+ countryNames[241]= "St. Barthelemy"\r
+ countryNames[242]= "St. Eustatius"\r
+ countryNames[243]= "Canary Islands"\r
+ countryNames[244]= "Montenegro"\r
+ var stateList = new Array();\r
+ stateList[223] = "AL:Alabama,AK:Alaska,AZ:Arizona,AR:Arkansas,CA:California,CO:Colorado,CT:Connecticut,DE:Delaware,DC:District Of Columbia,FL:Florida,GA:Georgia,HI:Hawaii,ID:Idaho,IL:Illinois,IN:Indiana,IA:Iowa,KS:Kansas,KY:Kentucky,LA:Louisiana,ME:Maine,MD:Maryland,MA:Massachusetts,MI:Michigan,MN:Minnesota,MS:Mississippi,MO:Missouri,MT:Montana,NE:Nebraska,NV:Nevada,NH:New Hampshire,NJ:New Jersey,NM:New Mexico,NY:New York,NC:North Carolina,ND:North Dakota,OH:Ohio,OK:Oklahoma,OR:Oregon,PA:Pennsylvania,RI:Rhode Island,SC:South Carolina,SD:South Dakota,TN:Tennessee,TX:Texas,UT:Utah,VT:Vermont,VA:Virginia,WA:Washington,WV:West Virginia,WI:Wisconsin,WY:Wyoming";\r
+ stateList[38] = "AB:Alberta,BC:British Columbia,MB:Manitoba,NB:New Brunswick,NL:Newfoundland and Labrador,NT:Northwest Territories,NS:Nova Scotia,NU:Nunavut,ON:Ontario,PE:Prince Edward Island,QC:Quebec,SK:Saskatchewan,YT:Yukon";\r
+ stateList[222] = "EN:England,NI:Northern Ireland,SD:Scotland,WS:Wales";\r
+ stateList[13] = "AC:Australian Capital Territory,NS:New South Wales,NT:Northern Territory,QL:Queensland,SA:South Australia,TS:Tasmania,VI:Victoria,WA:Western Australia";\r
+ stateList[138] = "AG:Aguascalientes,BN:Baja California Norte,BS:Baja California Sur,CA:Campeche,CS:Chiapas,CH:Chihuahua,CO:Coahuila,CM:Colima,DF:Distrito Federal,DO:Durango,GO:Guanajuato,GU:Guerrero,HI:Hidalgo,JA:Jalisco,EM:M,MI:Michoac,MO:Morelos,NY:Nayarit,NL:Nuevo Le,OA:Oaxaca,PU:Puebla,QU:Quer,QR:Quintana Roo,SP:San Luis Potos,SI:Sinaloa,SO:Sonora,TA:Tabasco,TM:Tamaulipas,TX:Tlaxcala,VZ:Veracruz,YU:Yucat,ZA:Zacatecas";\r
+ stateList[30] = "AC:Acre,AL:Alagoas,AP:Amap,AM:Amazonas,BA:Bah,CE:Cear,DF:Distrito Federal,ES:Espirito Santo,GO:Goi,MA:Maranh,MT:Mato Grosso,MS:Mato Grosso do Sul,MG:Minas Gera,PR:Paran,PB:Para,PA:Par,PE:Pernambuco,PI:Piau,RN:Rio Grande do Norte,RS:Rio Grande do Sul,RJ:Rio de Janeiro,RO:Rond,RR:Roraima,SC:Santa Catarina,SE:Sergipe,SP:S,TO:Tocantins";\r
+ stateList[44] = "34:Anhui,11:Beijing,50:Chongqing,35:Fujian,62:Gansu,44:Guangdong,45:Guangxi Zhuang,52:Guizhou,46:Hainan,13:Hebei,23:Heilongjiang,41:Henan,42:Hubei,43:Hunan,32:Jiangsu,36:Jiangxi,22:Jilin,21:Liaoning,15:Nei Mongol,64:Ningxia Hui,63:Qinghai,37:Shandong,31:Shanghai,61:Shaanxi,51:Sichuan,12:Tianjin,65:Xinjiang Uygur,54:Xizang,53:Yunnan,33:Zhejiang";\r
+ stateList[104] = "IL:Israel,GZ:Gaza Strip,WB:West Bank";\r
+ stateList[151] = "SM:St. Maarten,BN:Bonaire,CR:Curacao";\r
+ stateList[175] = "AB:Alba,AR:Arad,AG:Arges,BC:Bacau,BH:Bihor,BN:Bistrita-Nasaud,BT:Botosani,BR:Braila,BV:Brasov,B:Bucuresti,BZ:Buzau,CL:Calarasi,CS:Caras Severin,CJ:Cluj,CT:Constanta,CV:Covasna,DB:Dambovita,DJ:Dolj,GL:Galati,GR:Giurgiu,GJ:Gorj,HR:Hargita,HD:Hunedoara,IL:Ialomita,IS:Iasi,IF:Ilfov,MM:Maramures,MH:Mehedinti,MS:Mures,NT:Neamt,OT:Olt,PH:Prahova,SJ:Salaj,SM:Satu Mare,SB:Sibiu,SV:Suceava,TR:Teleorman,TM:Timis,TL:Tulcea,VL:Valcea,VS:Vaslui,VN:Vrancea";\r
+ stateList[105] = "AG:Agrigento,AL:Alessandria,AN:Ancona,AO:Aosta,AR:Arezzo,AP:Ascoli Piceno,AT:Asti,AV:Avellino,BA:Bari,BL:Belluno,BN:Benevento,BG:Bergamo,BI:Biella,BO:Bologna,BZ:Bolzano,BS:Brescia,BR:Brindisi,CA:Cagliari,CL:Caltanissetta,CB:Campobasso,CI:Carbonia-Iglesias,CE:Caserta,CT:Catania,CZ:Catanzaro,CH:Chieti,CO:Como,CS:Cosenza,CR:Cremona,KR:Crotone,CN:Cuneo,EN:Enna,FE:Ferrara,FI:Firenze,FG:Foggia,FC:Forli-Cesena,FR:Frosinone,GE:Genova,GO:Gorizia,GR:Grosseto,IM:Imperia,IS:Isernia,AQ:L'Aquila,SP:La Spezia,LT:Latina,LE:Lecce,LC:Lecco,LI:Livorno,LO:Lodi,LU:Lucca,MC:Macerata,MN:Mantova,MS:Massa-Carrara,MT:Matera,VS:Medio Campidano,ME:Messina,MI:Milano,MO:Modena,NA:Napoli,NO:Novara,NU:Nuoro,OG:Ogliastra,OT:Olbia-Tempio,OR:Oristano,PD:Padova,PA:Palermo,PR:Parma,PV:Pavia,PG:Perugia,PU:Pesaro e Urbino,PE:Pescara,PC:Piacenza,PI:Pisa,PT:Pistoia,PN:Pordenone,PZ:Potenza,PO:Prato,RG:Ragusa,RA:Ravenna,RC:Reggio Calabria,RE:Reggio Emilia,RI:Rieti,RN:Rimini,RM:Roma,RO:Rovigo,SA:Salerno,SS:Sassari,SV:Savona,SI:Siena,SR:Siracusa,SO:Sondrio,TA:Taranto,TE:Teramo,TR:Terni,TO:Torino,TP:Trapani,TN:Trento,TV:Treviso,TS:Trieste,UD:Udine,VA:Varese,VE:Venezia,VB:Verbano Cusio Ossola,VC:Vercelli,VR:Verona,VV:Vibo Valenzia,VI:Vicenza,VT:Viterbo";\r
+ stateList[195] = "15:A Coru,01:Alava,02:Albacete,03:Alicante,04:Almeria,33:Asturias,05:Avila,06:Badajoz,07:Baleares,08:Barcelona,09:Burgos,10:Caceres,11:Cadiz,39:Cantabria,12:Castellon,51:Ceuta,13:Ciudad Real,14:Cordoba,16:Cuenca,17:Girona,18:Granada,19:Guadalajara,20:Guipuzcoa,21:Huelva,22:Huesca,23:Jaen,26:La Rioja,35:Las Palmas,24:Leon,25:Lleida,27:Lugo,28:Madrid,29:Malaga,52:Melilla,30:Murcia,31:Navarra,32:Ourense,34:Palencia,36:Pontevedra,37:Salamanca,38:Santa Cruz de Tenerife,40:Segovia,41:Sevilla,42:Soria,43:Tarragona,44:Teruel,45:Toledo,46:Valencia,47:Valladolid,48:Vizcaya,49:Zamora,50:Zaragoza";\r
+ stateList[11] = "AG:Aragatsotn,AR:Ararat,AV:Armavir,GR:Gegharkunik,KT:Kotayk,LO:Lori,SH:Shirak,SU:Syunik,TV:Tavush,VD:Vayots-Dzor,ER:Yerevan";\r
+ stateList[99] = "AI:Andaman & Nicobar Islands,AN:Andhra Pradesh,AR:Arunachal Pradesh,AS:Assam,BI:Bihar,CA:Chandigarh,CH:Chhatisgarh,DD:Dadra & Nagar Haveli,DA:Daman & Diu,DE:Delhi,GO:Goa,GU:Gujarat,HA:Haryana,HI:Himachal Pradesh,JA:Jammu & Kashmir,JH:Jharkhand,KA:Karnataka,KE:Kerala,LA:Lakshadweep,MD:Madhya Pradesh,MH:Maharashtra,MN:Manipur,ME:Meghalaya,MI:Mizoram,NA:Nagaland,OR:Orissa,PO:Pondicherry,PU:Punjab,RA:Rajasthan,SI:Sikkim,TA:Tamil Nadu,TR:Tripura,UA:Uttaranchal,UT:Uttar Pradesh,WE:West Bengal";\r
+ stateList[101] = "BO:Ahmadi va Kohkiluyeh,AR:Ardabil,AG:Azarbayjan-e Gharbi,AS:Azarbayjan-e Sharqi,BU:Bushehr,CM:Chaharmahal va Bakhtiari,ES:Esfahan,FA:Fars,GI:Gilan,GO:Gorgan,HA:Hamadan,HO:Hormozgan,IL:Ilam,KE:Kerman,BA:Kermanshah,KJ:Khorasan-e Junoubi,KR:Khorasan-e Razavi,KS:Khorasan-e Shomali,KH:Khuzestan,KO:Kordestan,LO:Lorestan,MR:Markazi,MZ:Mazandaran,QA:Qazvin,QO:Qom,SE:Semnan,SB:Sistan va Baluchestan,TE:Tehran,YA:Yazd,ZA:Zanjan";\r
+ methods = new PaymentMethods();\r
+ method = new PaymentMethod('os_authnet',1,0,1,0, 1);\r
+ methods.Add(method);\r
+ var currentCampaign = 0 ;\r
+ function checkData() {\r
+ var form = document.donate_form; \r
+ var minimumAmount = 1 ;\r
+ var maximumAmount = 100000 ;\r
+ \r
+ if (form.first_name.value == '') {\r
+ alert("Please enter your first name");\r
+ form.first_name.focus();\r
+ return ;\r
+ } \r
+ if (form.last_name.value=="") {\r
+ alert("Please enter your last name");\r
+ form.last_name.focus();\r
+ return;\r
+ } \r
+ if (form.address.value=="") {\r
+ alert("Please enter your address");\r
+ form.address.focus();\r
+ return; \r
+ } \r
+ if (form.city.value == "") {\r
+ alert("Please enter your city");\r
+ form.city.focus();\r
+ return; \r
+ } \r
+ if (form.state.length > 1) {\r
+ if (form.state.value =="") {\r
+ alert("Please enter your state");\r
+ form.state.focus();\r
+ return; \r
+ }\r
+ } \r
+ if (form.zip.value == "") {\r
+ alert("Please enter your zip");\r
+ form.zip.focus();\r
+ return;\r
+ } \r
+// if (form.country.value == "") {\r
+// alert("Please enter your country");\r
+// form.country.focus();\r
+// return; \r
+// } \r
+ if (form.invoice_num.value == "") {\r
+ alert("Please enter an invoice number");\r
+ form.invoice_num.focus();\r
+ return;\r
+ }\r
+ if (form.phone.value == "") {\r
+ alert("Please enter your phone");\r
+ form.phone.focus();\r
+ return;\r
+ } \r
+ \r
+ if (form.email.value == '') {\r
+ alert("Please enter your email");\r
+ form.email.focus();\r
+ return;\r
+ }\r
+ \r
+ \r
+ var emailFilter = /^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/i\r
+ var ret = emailFilter.test(form.email.value);\r
+ if (!ret) {\r
+ alert("Please enter a valid email");\r
+ form.email.focus();\r
+ return;\r
+ } \r
+ var amountValid = false ;\r
+ var amount = 0 ;\r
+ if (form.rd_amount) {\r
+ if (form.rd_amount.length) {\r
+ for (var i = 0 ; i < form.rd_amount.length ; i++) {\r
+ if(form.rd_amount[i].checked == true) {\r
+ amountValid = true ;\r
+ amount = form.rd_amount[i].value ;\r
+ } \r
+ } \r
+ } else if (form.rd_amount.checked == true) {\r
+ amountValid = true ;\r
+ amount = form.rd_amount.value ;\r
+ }\r
+ \r
+ }\r
+\r
+ if (!amountValid) { \r
+ if (parseFloat(form.amount.value)) {\r
+ amountValid = true;\r
+ amount = form.amount.value ; \r
+ } \r
+ } \r
+ \r
+ \r
+ if (!amountValid) {\r
+ var msg;\r
+ msg = "Please choose from pre-defined amounts or enter your own amount in the textbox";\r
+ alert(msg);\r
+ return; \r
+ } \r
+\r
+\r
+ if (parseFloat(amount) < minimumAmount) {\r
+ alert("Minimum payment amount allowed is : $" + minimumAmount);\r
+ form.amount.focus();\r
+ form.amount.focus();\r
+ return ;\r
+ }\r
+\r
+ if ((maximumAmount >0) && (parseFloat(amount) > maximumAmount)) {\r
+ alert("Maximum payment amount allowed is : $" + maximumAmount);\r
+ form.amount.focus();\r
+ return ;\r
+ }\r
+\r
+ \r
+ \r
+ \r
+ \r
+ \r
+ var paymentMethod = "";\r
+ paymentMethod = "os_authnet";\r
+ \r
+ method = methods.Find(paymentMethod); \r
+ //Check payment method page\r
+ if (method.getCreditCard()) {\r
+ if (form.x_card_num.value == "") {\r
+ alert("Please enter creditcard number");\r
+ form.x_card_num.focus();\r
+ return; \r
+ } \r
+ if (form.x_card_code.value == "") {\r
+ alert("Please enter card code");\r
+ form.x_card_code.focus();\r
+ return ;\r
+ }\r
+ }\r
+ if (method.getCardHolderName()) {\r
+ if (form.card_holder_name.value == '') {\r
+ alert("JE_ENTER_CARD_HOLDER_NAME");\r
+ form.card_holde_name.focus();\r
+ return ;\r
+ }\r
+ } \r
+ //This check is only used for echeck payment gateway\r
+ if (paymentMethod == 'os_echeck') {\r
+ if (form.x_bank_aba_code.value == '') {\r
+ alert("Please enter Bank ABA Routing Number");\r
+ form.x_bank_aba_code.focus();\r
+ return ;\r
+ } \r
+ if (form.x_bank_acct_num.value == '') {\r
+ alert("Please enter Bank Account Number");\r
+ form.x_bank_aba_code.focus();\r
+ return ;\r
+ } \r
+ if (form.x_bank_name.value == '') {\r
+ alert("Please enter Bank Name");\r
+ form.x_bank_name.focus();\r
+ return ; \r
+ } \r
+ if (form.x_bank_acct_name.value == '') {\r
+ alert("Please enter Account Holder Name");\r
+ form.x_bank_acct_name.focus();\r
+ return ;\r
+ } \r
+ } \r
+ \r
+ form.submit();\r
+ \r
+ } \r
+ \r
+ function checkNumber(txtName)\r
+ { \r
+ var num = txtName.value \r
+ if(isNaN(num)) \r
+ { \r
+ alert("Only number is accepted"); \r
+ txtName.value = ""; \r
+ txtName.focus(); \r
+ } \r
+ }\r
+\r
+\r
+ function changeDonationType() {\r
+ var form = document.donate_form ;\r
+ var trFrequecy = document.getElementById('tr_frequency');\r
+ var trNumberDonatons = document.getElementById('tr_number_donations'); \r
+ if (form.donation_type[0].checked == true) {\r
+ trFrequecy.style.display = 'none' ;\r
+ if (trNumberDonatons)\r
+ trNumberDonatons.style.display = 'none' ;\r
+ } else {\r
+ trFrequecy.style.display = '' ;\r
+ if (trNumberDonatons)\r
+ trNumberDonatons.style.display = '' ;\r
+ } \r
+ } \r
+\r
+ function deSelectRadio() {\r
+ var form = document.donate_form ;\r
+ form.amount.value = form.amount.value.replace(',', '') ;\r
+ if (parseFloat(form.amount.value)) {\r
+ if(form.rd_amount) {\r
+ if (form.rd_amount.length) {\r
+ for(var i =0 ; i < form.rd_amount.length ; i++) {\r
+ form.rd_amount[i].checked = false ;\r
+ }\r
+ } else {\r
+ form.rd_amount.checked = false ;\r
+ } \r
+ \r
+ } \r
+ } else {\r
+ form.amount.value = '';\r
+ }\r
+ }\r
+\r
+ function clearTextbox() {\r
+ var form = document.donate_form ;\r
+ if (form.amount)\r
+ form.amount.value = ''; \r
+ } \r
+ \r
+ function displayRecurring(show) { \r
+ var form = document.donate_form ; \r
+ var trDonationType = document.getElementById('donation_type') ;\r
+ if (!trDonationType) \r
+ return ; \r
+ var trFrequency = document.getElementById('tr_frequency');\r
+ var trNumberDonations = document.getElementById('tr_number_donations') ;\r
+ if (show) {\r
+ trDonationType.style.display = '';\r
+ if (form.donation_type[1].checked) {\r
+ trFrequency.style.display = '';\r
+ if (trNumberDonations) {\r
+ trNumberDonations.style.display = '';\r
+ }\r
+ } \r
+ } else {\r
+ trDonationType.style.display = 'none';\r
+ trFrequency.style.display = 'none';\r
+ if (trNumberDonations) {\r
+ trNumberDonations.style.display = 'none';\r
+ }\r
+ } \r
+ }\r
+\r
+\r
+ function checkCampaignRecurring() { \r
+ var form = document.donate_form ;\r
+ var show = 1 ;\r
+ var paymentMethod = "";\r
+ paymentMethod = "os_authnet";\r
+ \r
+ method = methods.Find(paymentMethod);\r
+ if (!method.getEnableRecurring()) {\r
+ show = 0 ;\r
+ } else {\r
+ if (form.campaign_id.value > 0)\r
+ show = recurrings [form.campaign_id.value] ;\r
+ } \r
+ displayRecurring(show);\r
+ }\r
+ \r
+ function updateAmount() {\r
+ var form = document.donate_form ;\r
+ var campaignId = form.campaign_id.value ;\r
+\r
+ //Check to enable and disable recurring\r
+ var show = 1 ;\r
+ if (campaignId)\r
+ show = recurrings [campaignId] ; \r
+ displayRecurring(show); \r
+ \r
+ }\r
+ function updateStateList() {\r
+ var form = document.donate_form ;\r
+ //First of all, we need to empty the state dropdown\r
+ var list = form.state ;\r
+\r
+ // empty the list\r
+ for (i = 1 ; i < list.options.length ; i++) {\r
+ list.options[i] = null;\r
+ }\r
+ list.length = 1 ;\r
+ var i = 0;\r
+ //Get the country index\r
+ var country = form.country.value ; \r
+ if (country != '') {\r
+ //Find index of the country\r
+ for (var i = 0 ; i < countryNames.length ; i++) {\r
+ if (countryNames[i] == country) { \r
+ break ;\r
+ }\r
+ }\r
+ //We will find the states\r
+ var countryId = countryIds[i] ; \r
+ var stateNames = stateList[countryId]; ;\r
+ if (stateNames) {\r
+ var arrStates = stateNames.split(',');\r
+ i = 1 ;\r
+ var state = '';\r
+ var stateName = '' ;\r
+ for (var j = 0 ; j < arrStates.length ; j++) {\r
+ state = arrStates[j] ;\r
+ stateName = state.split(':');\r
+ opt = new Option();\r
+ opt.value = stateName[0];\r
+ opt.text = stateName[1];\r
+ list.options[i++] = opt;\r
+ }\r
+ list.lenght = i ;\r
+ } \r
+ } \r
+ }\r
+\r
+ </script> \r
+ \r
+<?php\r
+ $output = apply_filters( 'wp_donate_filter_form', ob_get_contents());\r
+ ob_end_clean();\r
+\r
+ return $output;\r
+}\r
+?>\r
--- /dev/null
+<?php ob_start();\r
+/**\r
+ * Display Donate Form\r
+ *\r
+ * @return string Donate Form\r
+ *\r
+ * @since 1.0\r
+ *\r
+*/\r
+ global $wpdb;\r
+ if(isset($_REQUEST['action']))\r
+ {\r
+ if($_REQUEST['action']=='submitdonate')\r
+ { \r
+ $first_name = $_REQUEST['first_name'];\r
+ $last_name = $_REQUEST['last_name'];\r
+ $organization = $_REQUEST['organization'];\r
+ $address = $_REQUEST['address'];\r
+ $city = $_REQUEST['city'];\r
+ $country = $_REQUEST['country'];\r
+ $state = $_REQUEST['state'];\r
+ $zip = $_REQUEST['zip'];\r
+ $phone = $_REQUEST['phone'];\r
+ $email = $_REQUEST['email']; \r
+ $donation_type = $_REQUEST['donation_type'];\r
+ $r_frequency = $_REQUEST['r_frequency'];\r
+ $r_times = $_REQUEST['r_times'];\r
+ $amount = $_REQUEST['amount'];\r
+ $card_type = $_REQUEST['card_type'];\r
+ $x_card_num = $_REQUEST['x_card_num'];\r
+ $exp_month = $_REQUEST['exp_month'];\r
+ $exp_year = $_REQUEST['exp_year'];\r
+ $x_card_code = $_REQUEST['x_card_code'];\r
+ $comment = $_REQUEST['comment'];\r
+ $payment_method = $_REQUEST['payment_method'];\r
+ \r
+ // Adjust this to point to the Authorize.Net PHP SDK\r
+ include dirname(__FILE__) .'/../anet_php_sdk/AuthorizeNet.php';\r
+\r
+ $METHOD_TO_USE = "AIM";\r
+ $mysetting = $wpdb->get_results( "SELECT * FROM ".$wpdb->prefix."donate_setting" );\r
+ define("AUTHORIZENET_API_LOGIN_ID",$mysetting[0]->api_login); // Add your API LOGIN ID\r
+ define("AUTHORIZENET_TRANSACTION_KEY",$mysetting[0]->key); // Add your API transaction key\r
+ if($mysetting[0]->mod==0){\r
+ define("AUTHORIZENET_SANDBOX",true); // Set to false to test against production\r
+ define("TEST_REQUEST", true); // You may want to set to true if testing against production\r
+ }\r
+ else\r
+ {\r
+ define("AUTHORIZENET_SANDBOX",false); // Set to false to test against production\r
+ define("TEST_REQUEST", false); \r
+ }\r
+ // You only need to adjust the two variables below if testing DPM\r
+ define("AUTHORIZENET_MD5_SETTING",""); // Add your MD5 Setting.\r
+\r
+ $REQUEST = $_REQUEST;\r
+ if($paypalp = authorizepayment($METHOD_TO_USE,$REQUEST,$address1,$city,$state,$country,$zipcode,$emailaddress,$plan))\r
+ {\r
+ $sql = "INSERT INTO `".$wpdb->prefix."donate` (`first_name`, `last_name`, `organization`, `address`, `city`, `country`, `state`, `zip`, `phone`, `email`, `donation_type`, `amount`, `comment`, `status`,`date`) \r
+ VALUES ('".$first_name."', '".$last_name."','".$organization."','".$address."','".$city."','".$country."','".$state."','".$zip."','".$phone."','".$email."','".$donation_type."','".$amount."','".$comment."', '1',now());";\r
+ $wpdb->query($sql);\r
+ \r
+ $post = get_post($post->ID);\r
+ $slug = $post->post_name;\r
+ \r
+ header("Location:".site_url().$_SERVER['REQUEST_URI']);\r
+ exit;\r
+ }\r
+ else\r
+ {\r
+ header("Location:".site_url().$_SERVER['REQUEST_URI']);\r
+ exit;\r
+ }\r
+ \r
+ }\r
+ }\r
+\r
+function wp_donate_form() {\r
+ ob_start();\r
+ global $wpdb;\r
+ ?>\r
+ <form method="post" name="donate_form" id="donate_form" action="<?php echo site_url().$_SERVER['REQUEST_URI'];?>" autocomplete="off">\r
+ <input type="hidden" name="action" value="submitdonate" />\r
+ <table width="100%" cellspacing="3" cellpadding="3">\r
+ <tr><td style="color:red;" colspan="4"><?php echo $_SESSION['donate_msg']; $_SESSION['donate_msg']='';?></td></tr>\r
+ <tr>\r
+ <td colspan="2" class="msg">\r
+ <p>You may use this form to make an online donation. Your gift will go to the area of greatest need. If you wish your donation to be designated for a particular area or program, please note your wishes in the comment box.</p> \r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td colspan="2" class="heading"><b>Donor information</b></td>\r
+ </tr> \r
+ <tr> \r
+ <td class="title_cell">First name<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="first_name" id="first_name" value="" size="25" />\r
+ </td>\r
+ </tr>\r
+ <tr> \r
+ <td class="title_cell">Last name<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="last_name" value="" size="25" />\r
+ </td>\r
+ </tr>\r
+ <tr> \r
+ <td class="title_cell">Organization</td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="organization" value="" size="30" />\r
+ </td>\r
+ </tr>\r
+ <tr> \r
+ <td class="title_cell">Address<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="address" value="" size="50" />\r
+ </td>\r
+ </tr> \r
+ <tr> \r
+ <td class="title_cell">City<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="city" value="" size="15" />\r
+ </td>\r
+ </tr> \r
+ <tr> \r
+ <td class="title_cell">Country<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <select id="country" name="country" onchange="updateStateList();" >\r
+ <option value="">Select country</option>\r
+ <option value="Afghanistan">Afghanistan</option>\r
+ <option value="Albania">Albania</option>\r
+ <option value="Algeria">Algeria</option>\r
+ <option value="American Samoa">American Samoa</option>\r
+ <option value="Andorra">Andorra</option>\r
+ <option value="Angola">Angola</option>\r
+ <option value="Anguilla">Anguilla</option>\r
+ <option value="Antarctica">Antarctica</option>\r
+ <option value="Antigua and Barbuda">Antigua and Barbuda</option>\r
+ <option value="Argentina">Argentina</option>\r
+ <option value="Armenia">Armenia</option>\r
+ <option value="Aruba">Aruba</option>\r
+ <option value="Australia">Australia</option>\r
+ <option value="Austria">Austria</option>\r
+ <option value="Azerbaijan">Azerbaijan</option>\r
+ <option value="Bahamas">Bahamas</option>\r
+ <option value="Bahrain">Bahrain</option>\r
+ <option value="Bangladesh">Bangladesh</option>\r
+ <option value="Barbados">Barbados</option>\r
+ <option value="Belarus">Belarus</option>\r
+ <option value="Belgium">Belgium</option>\r
+ <option value="Belize">Belize</option>\r
+ <option value="Benin">Benin</option>\r
+ <option value="Bermuda">Bermuda</option>\r
+ <option value="Bhutan">Bhutan</option>\r
+ <option value="Bolivia">Bolivia</option>\r
+ <option value="Bosnia and Herzegowina">Bosnia and Herzegowina</option>\r
+ <option value="Botswana">Botswana</option>\r
+ <option value="Bouvet Island">Bouvet Island</option>\r
+ <option value="Brazil">Brazil</option>\r
+ <option value="British Indian Ocean Territory">British Indian Ocean Territory</option>\r
+ <option value="Brunei Darussalam">Brunei Darussalam</option>\r
+ <option value="Bulgaria">Bulgaria</option>\r
+ <option value="Burkina Faso">Burkina Faso</option>\r
+ <option value="Burundi">Burundi</option>\r
+ <option value="Cambodia">Cambodia</option>\r
+ <option value="Cameroon">Cameroon</option>\r
+ <option value="Canada">Canada</option>\r
+ <option value="Canary Islands">Canary Islands</option>\r
+ <option value="Cape Verde">Cape Verde</option>\r
+ <option value="Cayman Islands">Cayman Islands</option>\r
+ <option value="Central African Republic">Central African Republic</option>\r
+ <option value="Chad">Chad</option>\r
+ <option value="Chile">Chile</option>\r
+ <option value="China">China</option>\r
+ <option value="Christmas Island">Christmas Island</option>\r
+ <option value="Cocos (Keeling) Islands">Cocos (Keeling) Islands</option>\r
+ <option value="Colombia">Colombia</option>\r
+ <option value="Comoros">Comoros</option>\r
+ <option value="Congo">Congo</option>\r
+ <option value="Cook Islands">Cook Islands</option>\r
+ <option value="Costa Rica">Costa Rica</option>\r
+ <option value="Cote D'Ivoire">Cote D'Ivoire</option>\r
+ <option value="Croatia">Croatia</option>\r
+ <option value="Cuba">Cuba</option>\r
+ <option value="Cyprus">Cyprus</option>\r
+ <option value="Czech Republic">Czech Republic</option>\r
+ <option value="Denmark">Denmark</option>\r
+ <option value="Djibouti">Djibouti</option>\r
+ <option value="Dominica">Dominica</option>\r
+ <option value="Dominican Republic">Dominican Republic</option>\r
+ <option value="East Timor">East Timor</option>\r
+ <option value="East Timor">East Timor</option>\r
+ <option value="Ecuador">Ecuador</option>\r
+ <option value="Egypt">Egypt</option>\r
+ <option value="El Salvador">El Salvador</option>\r
+ <option value="Equatorial Guinea">Equatorial Guinea</option>\r
+ <option value="Eritrea">Eritrea</option>\r
+ <option value="Estonia">Estonia</option>\r
+ <option value="Ethiopia">Ethiopia</option>\r
+ <option value="Falkland Islands (Malvinas)">Falkland Islands (Malvinas)</option>\r
+ <option value="Faroe Islands">Faroe Islands</option>\r
+ <option value="Fiji">Fiji</option>\r
+ <option value="Finland">Finland</option>\r
+ <option value="France">France</option>\r
+ <option value="France, Metropolitan">France, Metropolitan</option>\r
+ <option value="French Guiana">French Guiana</option>\r
+ <option value="French Polynesia">French Polynesia</option>\r
+ <option value="French Southern Territories">French Southern Territories</option>\r
+ <option value="Gabon">Gabon</option>\r
+ <option value="Gambia">Gambia</option>\r
+ <option value="Georgia">Georgia</option>\r
+ <option value="Germany">Germany</option>\r
+ <option value="Ghana">Ghana</option>\r
+ <option value="Gibraltar">Gibraltar</option>\r
+ <option value="Greece">Greece</option>\r
+ <option value="Greenland">Greenland</option>\r
+ <option value="Grenada">Grenada</option>\r
+ <option value="Guadeloupe">Guadeloupe</option>\r
+ <option value="Guam">Guam</option>\r
+ <option value="Guatemala">Guatemala</option>\r
+ <option value="Guinea">Guinea</option>\r
+ <option value="Guinea-bissau">Guinea-bissau</option>\r
+ <option value="Guyana">Guyana</option>\r
+ <option value="Haiti">Haiti</option>\r
+ <option value="Heard and Mc Donald Islands">Heard and Mc Donald Islands</option>\r
+ <option value="Honduras">Honduras</option>\r
+ <option value="Hong Kong">Hong Kong</option>\r
+ <option value="Hungary">Hungary</option>\r
+ <option value="Iceland">Iceland</option>\r
+ <option value="India">India</option>\r
+ <option value="Indonesia">Indonesia</option>\r
+ <option value="Iran (Islamic Republic of)">Iran (Islamic Republic of)</option>\r
+ <option value="Iraq">Iraq</option>\r
+ <option value="Ireland">Ireland</option>\r
+ <option value="Israel">Israel</option>\r
+ <option value="Italy">Italy</option>\r
+ <option value="Jamaica">Jamaica</option>\r
+ <option value="Japan">Japan</option>\r
+ <option value="Jersey">Jersey</option>\r
+ <option value="Jordan">Jordan</option>\r
+ <option value="Kazakhstan">Kazakhstan</option>\r
+ <option value="Kenya">Kenya</option>\r
+ <option value="Kiribati">Kiribati</option>\r
+ <option value="Korea, Democratic People's Republic of">Korea, Democratic People's Republic of</option>\r
+ <option value="Korea, Republic of">Korea, Republic of</option>\r
+ <option value="Kuwait">Kuwait</option>\r
+ <option value="Kyrgyzstan">Kyrgyzstan</option>\r
+ <option value="Lao People's Democratic Republic">Lao People's Democratic Republic</option>\r
+ <option value="Latvia">Latvia</option>\r
+ <option value="Lebanon">Lebanon</option>\r
+ <option value="Lesotho">Lesotho</option>\r
+ <option value="Liberia">Liberia</option>\r
+ <option value="Libyan Arab Jamahiriya">Libyan Arab Jamahiriya</option>\r
+ <option value="Liechtenstein">Liechtenstein</option>\r
+ <option value="Lithuania">Lithuania</option>\r
+ <option value="Luxembourg">Luxembourg</option>\r
+ <option value="Macau">Macau</option>\r
+ <option value="Macedonia, The Former Yugoslav Republic of">Macedonia, The Former Yugoslav Republic of</option>\r
+ <option value="Madagascar">Madagascar</option>\r
+ <option value="Malawi">Malawi</option>\r
+ <option value="Malaysia">Malaysia</option>\r
+ <option value="Maldives">Maldives</option>\r
+ <option value="Mali">Mali</option>\r
+ <option value="Malta">Malta</option>\r
+ <option value="Marshall Islands">Marshall Islands</option>\r
+ <option value="Martinique">Martinique</option>\r
+ <option value="Mauritania">Mauritania</option>\r
+ <option value="Mauritius">Mauritius</option>\r
+ <option value="Mayotte">Mayotte</option>\r
+ <option value="Mexico">Mexico</option>\r
+ <option value="Micronesia, Federated States of">Micronesia, Federated States of</option>\r
+ <option value="Moldova, Republic of">Moldova, Republic of</option>\r
+ <option value="Monaco">Monaco</option>\r
+ <option value="Mongolia">Mongolia</option>\r
+ <option value="Montenegro">Montenegro</option>\r
+ <option value="Montserrat">Montserrat</option>\r
+ <option value="Morocco">Morocco</option>\r
+ <option value="Mozambique">Mozambique</option>\r
+ <option value="Myanmar">Myanmar</option>\r
+ <option value="Namibia">Namibia</option>\r
+ <option value="Nauru">Nauru</option>\r
+ <option value="Nepal">Nepal</option>\r
+ <option value="Netherlands">Netherlands</option>\r
+ <option value="Netherlands Antilles">Netherlands Antilles</option>\r
+ <option value="New Caledonia">New Caledonia</option>\r
+ <option value="New Zealand">New Zealand</option>\r
+ <option value="Nicaragua">Nicaragua</option>\r
+ <option value="Niger">Niger</option>\r
+ <option value="Nigeria">Nigeria</option>\r
+ <option value="Niue">Niue</option>\r
+ <option value="Norfolk Island">Norfolk Island</option>\r
+ <option value="Northern Mariana Islands">Northern Mariana Islands</option>\r
+ <option value="Norway">Norway</option>\r
+ <option value="Oman">Oman</option>\r
+ <option value="Pakistan">Pakistan</option>\r
+ <option value="Palau">Palau</option>\r
+ <option value="Panama">Panama</option>\r
+ <option value="Papua New Guinea">Papua New Guinea</option>\r
+ <option value="Paraguay">Paraguay</option>\r
+ <option value="Peru">Peru</option>\r
+ <option value="Philippines">Philippines</option>\r
+ <option value="Pitcairn">Pitcairn</option>\r
+ <option value="Poland">Poland</option>\r
+ <option value="Portugal">Portugal</option>\r
+ <option value="Puerto Rico">Puerto Rico</option>\r
+ <option value="Qatar">Qatar</option>\r
+ <option value="Reunion">Reunion</option>\r
+ <option value="Romania">Romania</option>\r
+ <option value="Russian Federation">Russian Federation</option>\r
+ <option value="Rwanda">Rwanda</option>\r
+ <option value="Saint Kitts and Nevis">Saint Kitts and Nevis</option>\r
+ <option value="Saint Lucia">Saint Lucia</option>\r
+ <option value="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</option>\r
+ <option value="Samoa">Samoa</option>\r
+ <option value="San Marino">San Marino</option>\r
+ <option value="Sao Tome and Principe">Sao Tome and Principe</option>\r
+ <option value="Saudi Arabia">Saudi Arabia</option>\r
+ <option value="Senegal">Senegal</option>\r
+ <option value="Serbia">Serbia</option>\r
+ <option value="Seychelles">Seychelles</option>\r
+ <option value="Sierra Leone">Sierra Leone</option>\r
+ <option value="Singapore">Singapore</option>\r
+ <option value="Slovakia (Slovak Republic)">Slovakia (Slovak Republic)</option>\r
+ <option value="Slovenia">Slovenia</option>\r
+ <option value="Solomon Islands">Solomon Islands</option>\r
+ <option value="Somalia">Somalia</option>\r
+ <option value="South Africa">South Africa</option>\r
+ <option value="South Georgia and the South Sandwich Islands">South Georgia and the South Sandwich Islands</option>\r
+ <option value="Spain">Spain</option>\r
+ <option value="Sri Lanka">Sri Lanka</option>\r
+ <option value="St. Barthelemy">St. Barthelemy</option>\r
+ <option value="St. Eustatius">St. Eustatius</option>\r
+ <option value="St. Helena">St. Helena</option>\r
+ <option value="St. Pierre and Miquelon">St. Pierre and Miquelon</option>\r
+ <option value="Sudan">Sudan</option>\r
+ <option value="Suriname">Suriname</option>\r
+ <option value="Svalbard and Jan Mayen Islands">Svalbard and Jan Mayen Islands</option>\r
+ <option value="Swaziland">Swaziland</option>\r
+ <option value="Sweden">Sweden</option>\r
+ <option value="Switzerland">Switzerland</option>\r
+ <option value="Syrian Arab Republic">Syrian Arab Republic</option>\r
+ <option value="Taiwan">Taiwan</option>\r
+ <option value="Tajikistan">Tajikistan</option>\r
+ <option value="Tanzania, United Republic of">Tanzania, United Republic of</option>\r
+ <option value="Thailand">Thailand</option>\r
+ <option value="The Democratic Republic of Congo">The Democratic Republic of Congo</option>\r
+ <option value="Togo">Togo</option>\r
+ <option value="Tokelau">Tokelau</option>\r
+ <option value="Tonga">Tonga</option>\r
+ <option value="Trinidad and Tobago">Trinidad and Tobago</option>\r
+ <option value="Tunisia">Tunisia</option>\r
+ <option value="Turkey">Turkey</option>\r
+ <option value="Turkmenistan">Turkmenistan</option>\r
+ <option value="Turks and Caicos Islands">Turks and Caicos Islands</option>\r
+ <option value="Tuvalu">Tuvalu</option>\r
+ <option value="Uganda">Uganda</option>\r
+ <option value="Ukraine">Ukraine</option>\r
+ <option value="United Arab Emirates">United Arab Emirates</option>\r
+ <option value="United Kingdom">United Kingdom</option>\r
+ <option value="United States" selected="selected">United States</option>\r
+ <option value="United States Minor Outlying Islands">United States Minor Outlying Islands</option>\r
+ <option value="Uruguay">Uruguay</option>\r
+ <option value="Uzbekistan">Uzbekistan</option>\r
+ <option value="Vanuatu">Vanuatu</option>\r
+ <option value="Vatican City State (Holy See)">Vatican City State (Holy See)</option>\r
+ <option value="Venezuela">Venezuela</option>\r
+ <option value="Viet Nam">Viet Nam</option>\r
+ <option value="Virgin Islands (British)">Virgin Islands (British)</option>\r
+ <option value="Virgin Islands (U.S.)">Virgin Islands (U.S.)</option>\r
+ <option value="Wallis and Futuna Islands">Wallis and Futuna Islands</option>\r
+ <option value="Western Sahara">Western Sahara</option>\r
+ <option value="Yemen">Yemen</option>\r
+ <option value="Zambia">Zambia</option>\r
+ <option value="Zimbabwe">Zimbabwe</option>\r
+ </select>\r
+ </td>\r
+ </tr> \r
+ <tr> \r
+ <td class="title_cell">State<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <select id="state" name="state" class="">\r
+ <option value="" selected="selected">Select State</option>\r
+ <option value="AK">Alaska</option>\r
+ <option value="AL">Alabama</option>\r
+ <option value="AR">Arkansas</option>\r
+ <option value="AZ">Arizona</option>\r
+ <option value="CA">California</option>\r
+ <option value="CO">Colorado</option>\r
+ <option value="CT">Connecticut</option>\r
+ <option value="DC">District Of Columbia</option>\r
+ <option value="DE">Delaware</option>\r
+ <option value="FL">Florida</option>\r
+ <option value="GA">Georgia</option>\r
+ <option value="HI">Hawaii</option>\r
+ <option value="IA">Iowa</option>\r
+ <option value="ID">Idaho</option>\r
+ <option value="IL">Illinois</option>\r
+ <option value="IN">Indiana</option>\r
+ <option value="KS">Kansas</option>\r
+ <option value="KY">Kentucky</option>\r
+ <option value="LA">Louisiana</option>\r
+ <option value="MA">Massachusetts</option>\r
+ <option value="MD">Maryland</option>\r
+ <option value="ME">Maine</option>\r
+ <option value="MI">Michigan</option>\r
+ <option value="MN">Minnesota</option>\r
+ <option value="MO">Missouri</option>\r
+ <option value="MS">Mississippi</option>\r
+ <option value="MT">Montana</option>\r
+ <option value="NC">North Carolina</option>\r
+ <option value="ND">North Dakota</option>\r
+ <option value="NE">Nebraska</option>\r
+ <option value="NH">New Hampshire</option>\r
+ <option value="NJ">New Jersey</option>\r
+ <option value="NM">New Mexico</option>\r
+ <option value="NV">Nevada</option>\r
+ <option value="NY">New York</option>\r
+ <option value="OH">Ohio</option>\r
+ <option value="OK">Oklahoma</option>\r
+ <option value="OR">Oregon</option>\r
+ <option value="PA">Pennsylvania</option>\r
+ <option value="RI">Rhode Island</option>\r
+ <option value="SC">South Carolina</option>\r
+ <option value="SD">South Dakota</option>\r
+ <option value="TN">Tennessee</option>\r
+ <option value="TX">Texas</option>\r
+ <option value="UT">Utah</option>\r
+ <option value="VA">Virginia</option>\r
+ <option value="VT">Vermont</option>\r
+ <option value="WA">Washington</option>\r
+ <option value="WI">Wisconsin</option>\r
+ <option value="WV">West Virginia</option>\r
+ <option value="WY">Wyoming</option>\r
+ </select>\r
+ </td>\r
+ </tr>\r
+ <tr> \r
+ <td class="title_cell">Zip<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="zip" value="" size="15" />\r
+ </td>\r
+ </tr>\r
+ <tr> \r
+ <td class="title_cell">Phone<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="phone" value="" size="15" />\r
+ </td>\r
+ </tr> \r
+ <tr> \r
+ <td class="title_cell">Email<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" class="inputbox" name="email" value="" size="40" />\r
+ </td>\r
+ </tr>\r
+ <tr>\r
+ <td colspan="2" class="heading"><strong>Donation Information</strong></td> \r
+ </tr>\r
+ \r
+ \r
+ <tr>\r
+ <td class="title_cell" valign="top">Amount</td> \r
+ <td id="amount_container">\r
+ $ <input type="text" class="inputbox" name="amount" value="" onchange="deSelectRadio();" size="10" />\r
+ </td>\r
+ </tr> \r
+ <tr id="tr_card_type">\r
+ <td class="title_cell">Card type<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <select id="card_type" name="card_type" class="inputbox" >\r
+ <option value="Visa">Visa</option>\r
+ <option value="MasterCard">MasterCard</option>\r
+ <option value="Discover">Discover</option>\r
+ <option value="Amex">American Express</option>\r
+ </select>\r
+ </td>\r
+ </tr> \r
+ <tr id="tr_card_number" >\r
+ <td class="title_cell">Credit Card Number<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" name="x_card_num" class="inputbox" onkeyup="checkNumber(this)" value="" size="20" />\r
+ </td>\r
+ </tr>\r
+ <tr id="tr_exp_date" >\r
+ <td class="title_cell">Expiration Date<span class="required">*</span>\r
+ </td>\r
+ <td class="field_cell"> \r
+ <select name="exp_month" class="inputbox exp_month" >\r
+ <option value="1" <?php if(date('m')=='01'){?> selected="selected"<?php }?>>01</option>\r
+ <option value="2" <?php if(date('m')=='02'){?> selected="selected"<?php }?>>02</option>\r
+ <option value="3" <?php if(date('m')=='03'){?> selected="selected"<?php }?>>03</option>\r
+ <option value="4" <?php if(date('m')=='04'){?> selected="selected"<?php }?>>04</option>\r
+ <option value="5" <?php if(date('m')=='05'){?> selected="selected"<?php }?>>05</option>\r
+ <option value="6" <?php if(date('m')=='06'){?> selected="selected"<?php }?>>06</option>\r
+ <option value="7" <?php if(date('m')=='07'){?> selected="selected"<?php }?>>07</option>\r
+ <option value="8" <?php if(date('m')=='08'){?> selected="selected"<?php }?>>08</option>\r
+ <option value="9" <?php if(date('m')=='09'){?> selected="selected"<?php }?>>09</option>\r
+ <option value="10" <?php if(date('m')=='10'){?> selected="selected"<?php }?>>10</option>\r
+ <option value="11" <?php if(date('m')=='11'){?> selected="selected"<?php }?>>11</option>\r
+ <option value="12" <?php if(date('m')=='12'){?> selected="selected"<?php }?>>12</option>\r
+ </select> / \r
+ <select id="exp_year" name="exp_year" class="inputbox exp_month" >\r
+ <?php $year = date(Y,time()); $num = 1;\r
+ while ( $num <= 7 ) {\r
+ echo '<option value="' . $year .'">' . $year . '</option>';$year++; $num++;\r
+ }\r
+ ?>\r
+ </select>\r
+ </td>\r
+ </tr>\r
+ <tr id="tr_cvv_code" >\r
+ <td class="title_cell">Card (CVV) Code<span class="required">*</span></td>\r
+ <td class="field_cell">\r
+ <input type="text" name="x_card_code" class="inputbox" onKeyUp="checkNumber(this)" value="" size="20" />\r
+ </td>\r
+ </tr>\r
+ \r
+ \r
+ <tr> \r
+ <td class="title_cell">Comment</td>\r
+ <td class="field_cell">\r
+ <textarea rows="7" cols="50" name="comment" class="inputbox"></textarea>\r
+ </td>\r
+ </tr> \r
+ <tr>\r
+ <td colspan="2" align="left">\r
+ <input type="button" class="button donate_btn_submit" name="btnSubmit" value="Donate Now" onclick="checkData();">\r
+ </td>\r
+ </tr> \r
+ </table>\r
+ <input type="hidden" name="payment_method" value="os_authnet" />\r
+ </form>\r
+ <script type="text/javascript">\r
+ var recurrings = new Array();\r
+ recurrings[1] = 1 ;\r
+ recurrings[2] = 1 ;\r
+ recurrings[3] = 1 ;\r
+ recurrings[4] = 1 ;\r
+ recurrings[5] = 1 ;\r
+ var countryIds = new Array(); \r
+ countryIds[0] = 1;\r
+ countryIds[1] = 2;\r
+ countryIds[2] = 3;\r
+ countryIds[3] = 4;\r
+ countryIds[4] = 5;\r
+ countryIds[5] = 6;\r
+ countryIds[6] = 7;\r
+ countryIds[7] = 8;\r
+ countryIds[8] = 9;\r
+ countryIds[9] = 10;\r
+ countryIds[10] = 11;\r
+ countryIds[11] = 12;\r
+ countryIds[12] = 13;\r
+ countryIds[13] = 14;\r
+ countryIds[14] = 15;\r
+ countryIds[15] = 16;\r
+ countryIds[16] = 17;\r
+ countryIds[17] = 18;\r
+ countryIds[18] = 19;\r
+ countryIds[19] = 20;\r
+ countryIds[20] = 21;\r
+ countryIds[21] = 22;\r
+ countryIds[22] = 23;\r
+ countryIds[23] = 24;\r
+ countryIds[24] = 25;\r
+ countryIds[25] = 26;\r
+ countryIds[26] = 27;\r
+ countryIds[27] = 28;\r
+ countryIds[28] = 29;\r
+ countryIds[29] = 30;\r
+ countryIds[30] = 31;\r
+ countryIds[31] = 32;\r
+ countryIds[32] = 33;\r
+ countryIds[33] = 34;\r
+ countryIds[34] = 35;\r
+ countryIds[35] = 36;\r
+ countryIds[36] = 37;\r
+ countryIds[37] = 38;\r
+ countryIds[38] = 39;\r
+ countryIds[39] = 40;\r
+ countryIds[40] = 41;\r
+ countryIds[41] = 42;\r
+ countryIds[42] = 43;\r
+ countryIds[43] = 44;\r
+ countryIds[44] = 45;\r
+ countryIds[45] = 46;\r
+ countryIds[46] = 47;\r
+ countryIds[47] = 48;\r
+ countryIds[48] = 49;\r
+ countryIds[49] = 50;\r
+ countryIds[50] = 51;\r
+ countryIds[51] = 52;\r
+ countryIds[52] = 53;\r
+ countryIds[53] = 54;\r
+ countryIds[54] = 55;\r
+ countryIds[55] = 56;\r
+ countryIds[56] = 57;\r
+ countryIds[57] = 58;\r
+ countryIds[58] = 59;\r
+ countryIds[59] = 60;\r
+ countryIds[60] = 61;\r
+ countryIds[61] = 62;\r
+ countryIds[62] = 63;\r
+ countryIds[63] = 64;\r
+ countryIds[64] = 65;\r
+ countryIds[65] = 66;\r
+ countryIds[66] = 67;\r
+ countryIds[67] = 68;\r
+ countryIds[68] = 69;\r
+ countryIds[69] = 70;\r
+ countryIds[70] = 71;\r
+ countryIds[71] = 72;\r
+ countryIds[72] = 73;\r
+ countryIds[73] = 74;\r
+ countryIds[74] = 75;\r
+ countryIds[75] = 76;\r
+ countryIds[76] = 77;\r
+ countryIds[77] = 78;\r
+ countryIds[78] = 79;\r
+ countryIds[79] = 80;\r
+ countryIds[80] = 81;\r
+ countryIds[81] = 82;\r
+ countryIds[82] = 83;\r
+ countryIds[83] = 84;\r
+ countryIds[84] = 85;\r
+ countryIds[85] = 86;\r
+ countryIds[86] = 87;\r
+ countryIds[87] = 88;\r
+ countryIds[88] = 89;\r
+ countryIds[89] = 90;\r
+ countryIds[90] = 91;\r
+ countryIds[91] = 92;\r
+ countryIds[92] = 93;\r
+ countryIds[93] = 94;\r
+ countryIds[94] = 95;\r
+ countryIds[95] = 96;\r
+ countryIds[96] = 97;\r
+ countryIds[97] = 98;\r
+ countryIds[98] = 99;\r
+ countryIds[99] = 100;\r
+ countryIds[100] = 101;\r
+ countryIds[101] = 102;\r
+ countryIds[102] = 103;\r
+ countryIds[103] = 104;\r
+ countryIds[104] = 105;\r
+ countryIds[105] = 106;\r
+ countryIds[106] = 107;\r
+ countryIds[107] = 108;\r
+ countryIds[108] = 109;\r
+ countryIds[109] = 110;\r
+ countryIds[110] = 111;\r
+ countryIds[111] = 112;\r
+ countryIds[112] = 113;\r
+ countryIds[113] = 114;\r
+ countryIds[114] = 115;\r
+ countryIds[115] = 116;\r
+ countryIds[116] = 117;\r
+ countryIds[117] = 118;\r
+ countryIds[118] = 119;\r
+ countryIds[119] = 120;\r
+ countryIds[120] = 121;\r
+ countryIds[121] = 122;\r
+ countryIds[122] = 123;\r
+ countryIds[123] = 124;\r
+ countryIds[124] = 125;\r
+ countryIds[125] = 126;\r
+ countryIds[126] = 127;\r
+ countryIds[127] = 128;\r
+ countryIds[128] = 129;\r
+ countryIds[129] = 130;\r
+ countryIds[130] = 131;\r
+ countryIds[131] = 132;\r
+ countryIds[132] = 133;\r
+ countryIds[133] = 134;\r
+ countryIds[134] = 135;\r
+ countryIds[135] = 136;\r
+ countryIds[136] = 137;\r
+ countryIds[137] = 138;\r
+ countryIds[138] = 139;\r
+ countryIds[139] = 140;\r
+ countryIds[140] = 141;\r
+ countryIds[141] = 142;\r
+ countryIds[142] = 143;\r
+ countryIds[143] = 144;\r
+ countryIds[144] = 145;\r
+ countryIds[145] = 146;\r
+ countryIds[146] = 147;\r
+ countryIds[147] = 148;\r
+ countryIds[148] = 149;\r
+ countryIds[149] = 150;\r
+ countryIds[150] = 151;\r
+ countryIds[151] = 152;\r
+ countryIds[152] = 153;\r
+ countryIds[153] = 154;\r
+ countryIds[154] = 155;\r
+ countryIds[155] = 156;\r
+ countryIds[156] = 157;\r
+ countryIds[157] = 158;\r
+ countryIds[158] = 159;\r
+ countryIds[159] = 160;\r
+ countryIds[160] = 161;\r
+ countryIds[161] = 162;\r
+ countryIds[162] = 163;\r
+ countryIds[163] = 164;\r
+ countryIds[164] = 165;\r
+ countryIds[165] = 166;\r
+ countryIds[166] = 167;\r
+ countryIds[167] = 168;\r
+ countryIds[168] = 169;\r
+ countryIds[169] = 170;\r
+ countryIds[170] = 171;\r
+ countryIds[171] = 172;\r
+ countryIds[172] = 173;\r
+ countryIds[173] = 174;\r
+ countryIds[174] = 175;\r
+ countryIds[175] = 176;\r
+ countryIds[176] = 177;\r
+ countryIds[177] = 178;\r
+ countryIds[178] = 179;\r
+ countryIds[179] = 180;\r
+ countryIds[180] = 181;\r
+ countryIds[181] = 182;\r
+ countryIds[182] = 183;\r
+ countryIds[183] = 184;\r
+ countryIds[184] = 185;\r
+ countryIds[185] = 186;\r
+ countryIds[186] = 187;\r
+ countryIds[187] = 188;\r
+ countryIds[188] = 189;\r
+ countryIds[189] = 190;\r
+ countryIds[190] = 191;\r
+ countryIds[191] = 192;\r
+ countryIds[192] = 193;\r
+ countryIds[193] = 194;\r
+ countryIds[194] = 195;\r
+ countryIds[195] = 196;\r
+ countryIds[196] = 197;\r
+ countryIds[197] = 198;\r
+ countryIds[198] = 199;\r
+ countryIds[199] = 200;\r
+ countryIds[200] = 201;\r
+ countryIds[201] = 202;\r
+ countryIds[202] = 203;\r
+ countryIds[203] = 204;\r
+ countryIds[204] = 205;\r
+ countryIds[205] = 206;\r
+ countryIds[206] = 207;\r
+ countryIds[207] = 208;\r
+ countryIds[208] = 209;\r
+ countryIds[209] = 210;\r
+ countryIds[210] = 211;\r
+ countryIds[211] = 212;\r
+ countryIds[212] = 213;\r
+ countryIds[213] = 214;\r
+ countryIds[214] = 215;\r
+ countryIds[215] = 216;\r
+ countryIds[216] = 217;\r
+ countryIds[217] = 218;\r
+ countryIds[218] = 219;\r
+ countryIds[219] = 220;\r
+ countryIds[220] = 221;\r
+ countryIds[221] = 222;\r
+ countryIds[222] = 223;\r
+ countryIds[223] = 224;\r
+ countryIds[224] = 225;\r
+ countryIds[225] = 226;\r
+ countryIds[226] = 227;\r
+ countryIds[227] = 228;\r
+ countryIds[228] = 229;\r
+ countryIds[229] = 230;\r
+ countryIds[230] = 231;\r
+ countryIds[231] = 232;\r
+ countryIds[232] = 233;\r
+ countryIds[233] = 234;\r
+ countryIds[234] = 235;\r
+ countryIds[235] = 236;\r
+ countryIds[236] = 237;\r
+ countryIds[237] = 238;\r
+ countryIds[238] = 239;\r
+ countryIds[239] = 240;\r
+ countryIds[240] = 241;\r
+ countryIds[241] = 242;\r
+ countryIds[242] = 243;\r
+ countryIds[243] = 244;\r
+ countryIds[244] = 245;\r
+ var countryNames = new Array(); \r
+ countryNames[0]= "Afghanistan"\r
+ countryNames[1]= "Albania"\r
+ countryNames[2]= "Algeria"\r
+ countryNames[3]= "American Samoa"\r
+ countryNames[4]= "Andorra"\r
+ countryNames[5]= "Angola"\r
+ countryNames[6]= "Anguilla"\r
+ countryNames[7]= "Antarctica"\r
+ countryNames[8]= "Antigua and Barbuda"\r
+ countryNames[9]= "Argentina"\r
+ countryNames[10]= "Armenia"\r
+ countryNames[11]= "Aruba"\r
+ countryNames[12]= "Australia"\r
+ countryNames[13]= "Austria"\r
+ countryNames[14]= "Azerbaijan"\r
+ countryNames[15]= "Bahamas"\r
+ countryNames[16]= "Bahrain"\r
+ countryNames[17]= "Bangladesh"\r
+ countryNames[18]= "Barbados"\r
+ countryNames[19]= "Belarus"\r
+ countryNames[20]= "Belgium"\r
+ countryNames[21]= "Belize"\r
+ countryNames[22]= "Benin"\r
+ countryNames[23]= "Bermuda"\r
+ countryNames[24]= "Bhutan"\r
+ countryNames[25]= "Bolivia"\r
+ countryNames[26]= "Bosnia and Herzegowina"\r
+ countryNames[27]= "Botswana"\r
+ countryNames[28]= "Bouvet Island"\r
+ countryNames[29]= "Brazil"\r
+ countryNames[30]= "British Indian Ocean Territory"\r
+ countryNames[31]= "Brunei Darussalam"\r
+ countryNames[32]= "Bulgaria"\r
+ countryNames[33]= "Burkina Faso"\r
+ countryNames[34]= "Burundi"\r
+ countryNames[35]= "Cambodia"\r
+ countryNames[36]= "Cameroon"\r
+ countryNames[37]= "Canada"\r
+ countryNames[38]= "Cape Verde"\r
+ countryNames[39]= "Cayman Islands"\r
+ countryNames[40]= "Central African Republic"\r
+ countryNames[41]= "Chad"\r
+ countryNames[42]= "Chile"\r
+ countryNames[43]= "China"\r
+ countryNames[44]= "Christmas Island"\r
+ countryNames[45]= "Cocos (Keeling) Islands"\r
+ countryNames[46]= "Colombia"\r
+ countryNames[47]= "Comoros"\r
+ countryNames[48]= "Congo"\r
+ countryNames[49]= "Cook Islands"\r
+ countryNames[50]= "Costa Rica"\r
+ countryNames[51]= "Cote D'Ivoire"\r
+ countryNames[52]= "Croatia"\r
+ countryNames[53]= "Cuba"\r
+ countryNames[54]= "Cyprus"\r
+ countryNames[55]= "Czech Republic"\r
+ countryNames[56]= "Denmark"\r
+ countryNames[57]= "Djibouti"\r
+ countryNames[58]= "Dominica"\r
+ countryNames[59]= "Dominican Republic"\r
+ countryNames[60]= "East Timor"\r
+ countryNames[61]= "Ecuador"\r
+ countryNames[62]= "Egypt"\r
+ countryNames[63]= "El Salvador"\r
+ countryNames[64]= "Equatorial Guinea"\r
+ countryNames[65]= "Eritrea"\r
+ countryNames[66]= "Estonia"\r
+ countryNames[67]= "Ethiopia"\r
+ countryNames[68]= "Falkland Islands (Malvinas)"\r
+ countryNames[69]= "Faroe Islands"\r
+ countryNames[70]= "Fiji"\r
+ countryNames[71]= "Finland"\r
+ countryNames[72]= "France"\r
+ countryNames[73]= "France, Metropolitan"\r
+ countryNames[74]= "French Guiana"\r
+ countryNames[75]= "French Polynesia"\r
+ countryNames[76]= "French Southern Territories"\r
+ countryNames[77]= "Gabon"\r
+ countryNames[78]= "Gambia"\r
+ countryNames[79]= "Georgia"\r
+ countryNames[80]= "Germany"\r
+ countryNames[81]= "Ghana"\r
+ countryNames[82]= "Gibraltar"\r
+ countryNames[83]= "Greece"\r
+ countryNames[84]= "Greenland"\r
+ countryNames[85]= "Grenada"\r
+ countryNames[86]= "Guadeloupe"\r
+ countryNames[87]= "Guam"\r
+ countryNames[88]= "Guatemala"\r
+ countryNames[89]= "Guinea"\r
+ countryNames[90]= "Guinea-bissau"\r
+ countryNames[91]= "Guyana"\r
+ countryNames[92]= "Haiti"\r
+ countryNames[93]= "Heard and Mc Donald Islands"\r
+ countryNames[94]= "Honduras"\r
+ countryNames[95]= "Hong Kong"\r
+ countryNames[96]= "Hungary"\r
+ countryNames[97]= "Iceland"\r
+ countryNames[98]= "India"\r
+ countryNames[99]= "Indonesia"\r
+ countryNames[100]= "Iran (Islamic Republic of)"\r
+ countryNames[101]= "Iraq"\r
+ countryNames[102]= "Ireland"\r
+ countryNames[103]= "Israel"\r
+ countryNames[104]= "Italy"\r
+ countryNames[105]= "Jamaica"\r
+ countryNames[106]= "Japan"\r
+ countryNames[107]= "Jordan"\r
+ countryNames[108]= "Kazakhstan"\r
+ countryNames[109]= "Kenya"\r
+ countryNames[110]= "Kiribati"\r
+ countryNames[111]= "Korea, Democratic People's Republic of"\r
+ countryNames[112]= "Korea, Republic of"\r
+ countryNames[113]= "Kuwait"\r
+ countryNames[114]= "Kyrgyzstan"\r
+ countryNames[115]= "Lao People's Democratic Republic"\r
+ countryNames[116]= "Latvia"\r
+ countryNames[117]= "Lebanon"\r
+ countryNames[118]= "Lesotho"\r
+ countryNames[119]= "Liberia"\r
+ countryNames[120]= "Libyan Arab Jamahiriya"\r
+ countryNames[121]= "Liechtenstein"\r
+ countryNames[122]= "Lithuania"\r
+ countryNames[123]= "Luxembourg"\r
+ countryNames[124]= "Macau"\r
+ countryNames[125]= "Macedonia, The Former Yugoslav Republic of"\r
+ countryNames[126]= "Madagascar"\r
+ countryNames[127]= "Malawi"\r
+ countryNames[128]= "Malaysia"\r
+ countryNames[129]= "Maldives"\r
+ countryNames[130]= "Mali"\r
+ countryNames[131]= "Malta"\r
+ countryNames[132]= "Marshall Islands"\r
+ countryNames[133]= "Martinique"\r
+ countryNames[134]= "Mauritania"\r
+ countryNames[135]= "Mauritius"\r
+ countryNames[136]= "Mayotte"\r
+ countryNames[137]= "Mexico"\r
+ countryNames[138]= "Micronesia, Federated States of"\r
+ countryNames[139]= "Moldova, Republic of"\r
+ countryNames[140]= "Monaco"\r
+ countryNames[141]= "Mongolia"\r
+ countryNames[142]= "Montserrat"\r
+ countryNames[143]= "Morocco"\r
+ countryNames[144]= "Mozambique"\r
+ countryNames[145]= "Myanmar"\r
+ countryNames[146]= "Namibia"\r
+ countryNames[147]= "Nauru"\r
+ countryNames[148]= "Nepal"\r
+ countryNames[149]= "Netherlands"\r
+ countryNames[150]= "Netherlands Antilles"\r
+ countryNames[151]= "New Caledonia"\r
+ countryNames[152]= "New Zealand"\r
+ countryNames[153]= "Nicaragua"\r
+ countryNames[154]= "Niger"\r
+ countryNames[155]= "Nigeria"\r
+ countryNames[156]= "Niue"\r
+ countryNames[157]= "Norfolk Island"\r
+ countryNames[158]= "Northern Mariana Islands"\r
+ countryNames[159]= "Norway"\r
+ countryNames[160]= "Oman"\r
+ countryNames[161]= "Pakistan"\r
+ countryNames[162]= "Palau"\r
+ countryNames[163]= "Panama"\r
+ countryNames[164]= "Papua New Guinea"\r
+ countryNames[165]= "Paraguay"\r
+ countryNames[166]= "Peru"\r
+ countryNames[167]= "Philippines"\r
+ countryNames[168]= "Pitcairn"\r
+ countryNames[169]= "Poland"\r
+ countryNames[170]= "Portugal"\r
+ countryNames[171]= "Puerto Rico"\r
+ countryNames[172]= "Qatar"\r
+ countryNames[173]= "Reunion"\r
+ countryNames[174]= "Romania"\r
+ countryNames[175]= "Russian Federation"\r
+ countryNames[176]= "Rwanda"\r
+ countryNames[177]= "Saint Kitts and Nevis"\r
+ countryNames[178]= "Saint Lucia"\r
+ countryNames[179]= "Saint Vincent and the Grenadines"\r
+ countryNames[180]= "Samoa"\r
+ countryNames[181]= "San Marino"\r
+ countryNames[182]= "Sao Tome and Principe"\r
+ countryNames[183]= "Saudi Arabia"\r
+ countryNames[184]= "Senegal"\r
+ countryNames[185]= "Seychelles"\r
+ countryNames[186]= "Sierra Leone"\r
+ countryNames[187]= "Singapore"\r
+ countryNames[188]= "Slovakia (Slovak Republic)"\r
+ countryNames[189]= "Slovenia"\r
+ countryNames[190]= "Solomon Islands"\r
+ countryNames[191]= "Somalia"\r
+ countryNames[192]= "South Africa"\r
+ countryNames[193]= "South Georgia and the South Sandwich Islands"\r
+ countryNames[194]= "Spain"\r
+ countryNames[195]= "Sri Lanka"\r
+ countryNames[196]= "St. Helena"\r
+ countryNames[197]= "St. Pierre and Miquelon"\r
+ countryNames[198]= "Sudan"\r
+ countryNames[199]= "Suriname"\r
+ countryNames[200]= "Svalbard and Jan Mayen Islands"\r
+ countryNames[201]= "Swaziland"\r
+ countryNames[202]= "Sweden"\r
+ countryNames[203]= "Switzerland"\r
+ countryNames[204]= "Syrian Arab Republic"\r
+ countryNames[205]= "Taiwan"\r
+ countryNames[206]= "Tajikistan"\r
+ countryNames[207]= "Tanzania, United Republic of"\r
+ countryNames[208]= "Thailand"\r
+ countryNames[209]= "Togo"\r
+ countryNames[210]= "Tokelau"\r
+ countryNames[211]= "Tonga"\r
+ countryNames[212]= "Trinidad and Tobago"\r
+ countryNames[213]= "Tunisia"\r
+ countryNames[214]= "Turkey"\r
+ countryNames[215]= "Turkmenistan"\r
+ countryNames[216]= "Turks and Caicos Islands"\r
+ countryNames[217]= "Tuvalu"\r
+ countryNames[218]= "Uganda"\r
+ countryNames[219]= "Ukraine"\r
+ countryNames[220]= "United Arab Emirates"\r
+ countryNames[221]= "United Kingdom"\r
+ countryNames[222]= "United States"\r
+ countryNames[223]= "United States Minor Outlying Islands"\r
+ countryNames[224]= "Uruguay"\r
+ countryNames[225]= "Uzbekistan"\r
+ countryNames[226]= "Vanuatu"\r
+ countryNames[227]= "Vatican City State (Holy See)"\r
+ countryNames[228]= "Venezuela"\r
+ countryNames[229]= "Viet Nam"\r
+ countryNames[230]= "Virgin Islands (British)"\r
+ countryNames[231]= "Virgin Islands (U.S.)"\r
+ countryNames[232]= "Wallis and Futuna Islands"\r
+ countryNames[233]= "Western Sahara"\r
+ countryNames[234]= "Yemen"\r
+ countryNames[235]= "Serbia"\r
+ countryNames[236]= "The Democratic Republic of Congo"\r
+ countryNames[237]= "Zambia"\r
+ countryNames[238]= "Zimbabwe"\r
+ countryNames[239]= "East Timor"\r
+ countryNames[240]= "Jersey"\r
+ countryNames[241]= "St. Barthelemy"\r
+ countryNames[242]= "St. Eustatius"\r
+ countryNames[243]= "Canary Islands"\r
+ countryNames[244]= "Montenegro"\r
+ var stateList = new Array();\r
+ stateList[223] = "AL:Alabama,AK:Alaska,AZ:Arizona,AR:Arkansas,CA:California,CO:Colorado,CT:Connecticut,DE:Delaware,DC:District Of Columbia,FL:Florida,GA:Georgia,HI:Hawaii,ID:Idaho,IL:Illinois,IN:Indiana,IA:Iowa,KS:Kansas,KY:Kentucky,LA:Louisiana,ME:Maine,MD:Maryland,MA:Massachusetts,MI:Michigan,MN:Minnesota,MS:Mississippi,MO:Missouri,MT:Montana,NE:Nebraska,NV:Nevada,NH:New Hampshire,NJ:New Jersey,NM:New Mexico,NY:New York,NC:North Carolina,ND:North Dakota,OH:Ohio,OK:Oklahoma,OR:Oregon,PA:Pennsylvania,RI:Rhode Island,SC:South Carolina,SD:South Dakota,TN:Tennessee,TX:Texas,UT:Utah,VT:Vermont,VA:Virginia,WA:Washington,WV:West Virginia,WI:Wisconsin,WY:Wyoming";\r
+ stateList[38] = "AB:Alberta,BC:British Columbia,MB:Manitoba,NB:New Brunswick,NL:Newfoundland and Labrador,NT:Northwest Territories,NS:Nova Scotia,NU:Nunavut,ON:Ontario,PE:Prince Edward Island,QC:Quebec,SK:Saskatchewan,YT:Yukon";\r
+ stateList[222] = "EN:England,NI:Northern Ireland,SD:Scotland,WS:Wales";\r
+ stateList[13] = "AC:Australian Capital Territory,NS:New South Wales,NT:Northern Territory,QL:Queensland,SA:South Australia,TS:Tasmania,VI:Victoria,WA:Western Australia";\r
+ stateList[138] = "AG:Aguascalientes,BN:Baja California Norte,BS:Baja California Sur,CA:Campeche,CS:Chiapas,CH:Chihuahua,CO:Coahuila,CM:Colima,DF:Distrito Federal,DO:Durango,GO:Guanajuato,GU:Guerrero,HI:Hidalgo,JA:Jalisco,EM:M,MI:Michoac,MO:Morelos,NY:Nayarit,NL:Nuevo Le,OA:Oaxaca,PU:Puebla,QU:Quer,QR:Quintana Roo,SP:San Luis Potos,SI:Sinaloa,SO:Sonora,TA:Tabasco,TM:Tamaulipas,TX:Tlaxcala,VZ:Veracruz,YU:Yucat,ZA:Zacatecas";\r
+ stateList[30] = "AC:Acre,AL:Alagoas,AP:Amap,AM:Amazonas,BA:Bah,CE:Cear,DF:Distrito Federal,ES:Espirito Santo,GO:Goi,MA:Maranh,MT:Mato Grosso,MS:Mato Grosso do Sul,MG:Minas Gera,PR:Paran,PB:Para,PA:Par,PE:Pernambuco,PI:Piau,RN:Rio Grande do Norte,RS:Rio Grande do Sul,RJ:Rio de Janeiro,RO:Rond,RR:Roraima,SC:Santa Catarina,SE:Sergipe,SP:S,TO:Tocantins";\r
+ stateList[44] = "34:Anhui,11:Beijing,50:Chongqing,35:Fujian,62:Gansu,44:Guangdong,45:Guangxi Zhuang,52:Guizhou,46:Hainan,13:Hebei,23:Heilongjiang,41:Henan,42:Hubei,43:Hunan,32:Jiangsu,36:Jiangxi,22:Jilin,21:Liaoning,15:Nei Mongol,64:Ningxia Hui,63:Qinghai,37:Shandong,31:Shanghai,61:Shaanxi,51:Sichuan,12:Tianjin,65:Xinjiang Uygur,54:Xizang,53:Yunnan,33:Zhejiang";\r
+ stateList[104] = "IL:Israel,GZ:Gaza Strip,WB:West Bank";\r
+ stateList[151] = "SM:St. Maarten,BN:Bonaire,CR:Curacao";\r
+ stateList[175] = "AB:Alba,AR:Arad,AG:Arges,BC:Bacau,BH:Bihor,BN:Bistrita-Nasaud,BT:Botosani,BR:Braila,BV:Brasov,B:Bucuresti,BZ:Buzau,CL:Calarasi,CS:Caras Severin,CJ:Cluj,CT:Constanta,CV:Covasna,DB:Dambovita,DJ:Dolj,GL:Galati,GR:Giurgiu,GJ:Gorj,HR:Hargita,HD:Hunedoara,IL:Ialomita,IS:Iasi,IF:Ilfov,MM:Maramures,MH:Mehedinti,MS:Mures,NT:Neamt,OT:Olt,PH:Prahova,SJ:Salaj,SM:Satu Mare,SB:Sibiu,SV:Suceava,TR:Teleorman,TM:Timis,TL:Tulcea,VL:Valcea,VS:Vaslui,VN:Vrancea";\r
+ stateList[105] = "AG:Agrigento,AL:Alessandria,AN:Ancona,AO:Aosta,AR:Arezzo,AP:Ascoli Piceno,AT:Asti,AV:Avellino,BA:Bari,BL:Belluno,BN:Benevento,BG:Bergamo,BI:Biella,BO:Bologna,BZ:Bolzano,BS:Brescia,BR:Brindisi,CA:Cagliari,CL:Caltanissetta,CB:Campobasso,CI:Carbonia-Iglesias,CE:Caserta,CT:Catania,CZ:Catanzaro,CH:Chieti,CO:Como,CS:Cosenza,CR:Cremona,KR:Crotone,CN:Cuneo,EN:Enna,FE:Ferrara,FI:Firenze,FG:Foggia,FC:Forli-Cesena,FR:Frosinone,GE:Genova,GO:Gorizia,GR:Grosseto,IM:Imperia,IS:Isernia,AQ:L'Aquila,SP:La Spezia,LT:Latina,LE:Lecce,LC:Lecco,LI:Livorno,LO:Lodi,LU:Lucca,MC:Macerata,MN:Mantova,MS:Massa-Carrara,MT:Matera,VS:Medio Campidano,ME:Messina,MI:Milano,MO:Modena,NA:Napoli,NO:Novara,NU:Nuoro,OG:Ogliastra,OT:Olbia-Tempio,OR:Oristano,PD:Padova,PA:Palermo,PR:Parma,PV:Pavia,PG:Perugia,PU:Pesaro e Urbino,PE:Pescara,PC:Piacenza,PI:Pisa,PT:Pistoia,PN:Pordenone,PZ:Potenza,PO:Prato,RG:Ragusa,RA:Ravenna,RC:Reggio Calabria,RE:Reggio Emilia,RI:Rieti,RN:Rimini,RM:Roma,RO:Rovigo,SA:Salerno,SS:Sassari,SV:Savona,SI:Siena,SR:Siracusa,SO:Sondrio,TA:Taranto,TE:Teramo,TR:Terni,TO:Torino,TP:Trapani,TN:Trento,TV:Treviso,TS:Trieste,UD:Udine,VA:Varese,VE:Venezia,VB:Verbano Cusio Ossola,VC:Vercelli,VR:Verona,VV:Vibo Valenzia,VI:Vicenza,VT:Viterbo";\r
+ stateList[195] = "15:A Coru,01:Alava,02:Albacete,03:Alicante,04:Almeria,33:Asturias,05:Avila,06:Badajoz,07:Baleares,08:Barcelona,09:Burgos,10:Caceres,11:Cadiz,39:Cantabria,12:Castellon,51:Ceuta,13:Ciudad Real,14:Cordoba,16:Cuenca,17:Girona,18:Granada,19:Guadalajara,20:Guipuzcoa,21:Huelva,22:Huesca,23:Jaen,26:La Rioja,35:Las Palmas,24:Leon,25:Lleida,27:Lugo,28:Madrid,29:Malaga,52:Melilla,30:Murcia,31:Navarra,32:Ourense,34:Palencia,36:Pontevedra,37:Salamanca,38:Santa Cruz de Tenerife,40:Segovia,41:Sevilla,42:Soria,43:Tarragona,44:Teruel,45:Toledo,46:Valencia,47:Valladolid,48:Vizcaya,49:Zamora,50:Zaragoza";\r
+ stateList[11] = "AG:Aragatsotn,AR:Ararat,AV:Armavir,GR:Gegharkunik,KT:Kotayk,LO:Lori,SH:Shirak,SU:Syunik,TV:Tavush,VD:Vayots-Dzor,ER:Yerevan";\r
+ stateList[99] = "AI:Andaman & Nicobar Islands,AN:Andhra Pradesh,AR:Arunachal Pradesh,AS:Assam,BI:Bihar,CA:Chandigarh,CH:Chhatisgarh,DD:Dadra & Nagar Haveli,DA:Daman & Diu,DE:Delhi,GO:Goa,GU:Gujarat,HA:Haryana,HI:Himachal Pradesh,JA:Jammu & Kashmir,JH:Jharkhand,KA:Karnataka,KE:Kerala,LA:Lakshadweep,MD:Madhya Pradesh,MH:Maharashtra,MN:Manipur,ME:Meghalaya,MI:Mizoram,NA:Nagaland,OR:Orissa,PO:Pondicherry,PU:Punjab,RA:Rajasthan,SI:Sikkim,TA:Tamil Nadu,TR:Tripura,UA:Uttaranchal,UT:Uttar Pradesh,WE:West Bengal";\r
+ stateList[101] = "BO:Ahmadi va Kohkiluyeh,AR:Ardabil,AG:Azarbayjan-e Gharbi,AS:Azarbayjan-e Sharqi,BU:Bushehr,CM:Chaharmahal va Bakhtiari,ES:Esfahan,FA:Fars,GI:Gilan,GO:Gorgan,HA:Hamadan,HO:Hormozgan,IL:Ilam,KE:Kerman,BA:Kermanshah,KJ:Khorasan-e Junoubi,KR:Khorasan-e Razavi,KS:Khorasan-e Shomali,KH:Khuzestan,KO:Kordestan,LO:Lorestan,MR:Markazi,MZ:Mazandaran,QA:Qazvin,QO:Qom,SE:Semnan,SB:Sistan va Baluchestan,TE:Tehran,YA:Yazd,ZA:Zanjan";\r
+ methods = new PaymentMethods();\r
+ method = new PaymentMethod('os_authnet',1,0,1,0, 1);\r
+ methods.Add(method);\r
+ var currentCampaign = 0 ;\r
+ function checkData() {\r
+ var form = document.donate_form; \r
+ var minimumAmount = 1 ;\r
+ var maximumAmount = 100000 ;\r
+ \r
+ if (form.first_name.value == '') {\r
+ alert("Please enter your first name");\r
+ form.first_name.focus();\r
+ return ;\r
+ } \r
+ if (form.last_name.value=="") {\r
+ alert("Please enter your last name");\r
+ form.last_name.focus();\r
+ return;\r
+ } \r
+ if (form.address.value=="") {\r
+ alert("Please enter your address");\r
+ form.address.focus();\r
+ return; \r
+ } \r
+ if (form.city.value == "") {\r
+ alert("Please enter your city");\r
+ form.city.focus();\r
+ return; \r
+ } \r
+ if (form.state.length > 1) {\r
+ if (form.state.value =="") {\r
+ alert("Please enter your state");\r
+ form.state.focus();\r
+ return; \r
+ }\r
+ } \r
+ if (form.zip.value == "") {\r
+ alert("Please enter your zip");\r
+ form.zip.focus();\r
+ return;\r
+ } \r
+ if (form.country.value == "") {\r
+ alert("Please enter your country");\r
+ form.country.focus();\r
+ return; \r
+ } \r
+ if (form.phone.value == "") {\r
+ alert("Please enter your phone");\r
+ form.phone.focus();\r
+ return;\r
+ } \r
+ \r
+ if (form.email.value == '') {\r
+ alert("Please enter your email");\r
+ form.email.focus();\r
+ return;\r
+ }\r
+ \r
+ var emailFilter = /^\w+[\+\.\w-]*@([\w-]+\.)*\w+[\w-]*\.([a-z]{2,4}|\d+)$/i\r
+ var ret = emailFilter.test(form.email.value);\r
+ if (!ret) {\r
+ alert("Please enter a valid email");\r
+ form.email.focus();\r
+ return;\r
+ } \r
+ var amountValid = false ;\r
+ var amount = 0 ;\r
+ if (form.rd_amount) {\r
+ if (form.rd_amount.length) {\r
+ for (var i = 0 ; i < form.rd_amount.length ; i++) {\r
+ if(form.rd_amount[i].checked == true) {\r
+ amountValid = true ;\r
+ amount = form.rd_amount[i].value ;\r
+ } \r
+ } \r
+ } else if (form.rd_amount.checked == true) {\r
+ amountValid = true ;\r
+ amount = form.rd_amount.value ;\r
+ }\r
+ \r
+ }\r
+\r
+ if (!amountValid) { \r
+ if (parseFloat(form.amount.value)) {\r
+ amountValid = true;\r
+ amount = form.amount.value ; \r
+ } \r
+ } \r
+ \r
+ \r
+ if (!amountValid) {\r
+ var msg;\r
+ msg = "Please choose from pre-defined amounts or enter your own amount in the textbox";\r
+ alert(msg);\r
+ return; \r
+ } \r
+\r
+\r
+ if (parseFloat(amount) < minimumAmount) {\r
+ alert("Minimum donation amount allowed is : $" + minimumAmount);\r
+ form.amount.focus();\r
+ form.amount.focus();\r
+ return ;\r
+ }\r
+\r
+ if ((maximumAmount >0) && (parseFloat(amount) > maximumAmount)) {\r
+ alert("Maximum donation amount allowed is : $" + maximumAmount);\r
+ form.amount.focus();\r
+ return ;\r
+ }\r
+\r
+ \r
+ \r
+ \r
+ \r
+ \r
+ var paymentMethod = "";\r
+ paymentMethod = "os_authnet";\r
+ \r
+ method = methods.Find(paymentMethod); \r
+ //Check payment method page\r
+ if (method.getCreditCard()) {\r
+ if (form.x_card_num.value == "") {\r
+ alert("Please enter creditcard number");\r
+ form.x_card_num.focus();\r
+ return; \r
+ } \r
+ if (form.x_card_code.value == "") {\r
+ alert("Please enter card code");\r
+ form.x_card_code.focus();\r
+ return ;\r
+ }\r
+ }\r
+ if (method.getCardHolderName()) {\r
+ if (form.card_holder_name.value == '') {\r
+ alert("JE_ENTER_CARD_HOLDER_NAME");\r
+ form.card_holde_name.focus();\r
+ return ;\r
+ }\r
+ } \r
+ //This check is only used for echeck payment gateway\r
+ if (paymentMethod == 'os_echeck') {\r
+ if (form.x_bank_aba_code.value == '') {\r
+ alert("Please enter Bank ABA Routing Number");\r
+ form.x_bank_aba_code.focus();\r
+ return ;\r
+ } \r
+ if (form.x_bank_acct_num.value == '') {\r
+ alert("Please enter Bank Account Number");\r
+ form.x_bank_aba_code.focus();\r
+ return ;\r
+ } \r
+ if (form.x_bank_name.value == '') {\r
+ alert("Please enter Bank Name");\r
+ form.x_bank_name.focus();\r
+ return ; \r
+ } \r
+ if (form.x_bank_acct_name.value == '') {\r
+ alert("Please enter Account Holder Name");\r
+ form.x_bank_acct_name.focus();\r
+ return ;\r
+ } \r
+ } \r
+ \r
+ form.submit();\r
+ \r
+ } \r
+ \r
+ function checkNumber(txtName)\r
+ { \r
+ var num = txtName.value \r
+ if(isNaN(num)) \r
+ { \r
+ alert("Only number is accepted"); \r
+ txtName.value = ""; \r
+ txtName.focus(); \r
+ } \r
+ }\r
+\r
+\r
+ function changeDonationType() {\r
+ var form = document.donate_form ;\r
+ var trFrequecy = document.getElementById('tr_frequency');\r
+ var trNumberDonatons = document.getElementById('tr_number_donations'); \r
+ if (form.donation_type[0].checked == true) {\r
+ trFrequecy.style.display = 'none' ;\r
+ if (trNumberDonatons)\r
+ trNumberDonatons.style.display = 'none' ;\r
+ } else {\r
+ trFrequecy.style.display = '' ;\r
+ if (trNumberDonatons)\r
+ trNumberDonatons.style.display = '' ;\r
+ } \r
+ } \r
+\r
+ function deSelectRadio() {\r
+ var form = document.donate_form ;\r
+ form.amount.value = form.amount.value.replace(',', '') ;\r
+ if (parseFloat(form.amount.value)) {\r
+ if(form.rd_amount) {\r
+ if (form.rd_amount.length) {\r
+ for(var i =0 ; i < form.rd_amount.length ; i++) {\r
+ form.rd_amount[i].checked = false ;\r
+ }\r
+ } else {\r
+ form.rd_amount.checked = false ;\r
+ } \r
+ \r
+ } \r
+ } else {\r
+ form.amount.value = '';\r
+ }\r
+ }\r
+\r
+ function clearTextbox() {\r
+ var form = document.donate_form ;\r
+ if (form.amount)\r
+ form.amount.value = ''; \r
+ } \r
+ \r
+ function displayRecurring(show) { \r
+ var form = document.donate_form ; \r
+ var trDonationType = document.getElementById('donation_type') ;\r
+ if (!trDonationType) \r
+ return ; \r
+ var trFrequency = document.getElementById('tr_frequency');\r
+ var trNumberDonations = document.getElementById('tr_number_donations') ;\r
+ if (show) {\r
+ trDonationType.style.display = '';\r
+ if (form.donation_type[1].checked) {\r
+ trFrequency.style.display = '';\r
+ if (trNumberDonations) {\r
+ trNumberDonations.style.display = '';\r
+ }\r
+ } \r
+ } else {\r
+ trDonationType.style.display = 'none';\r
+ trFrequency.style.display = 'none';\r
+ if (trNumberDonations) {\r
+ trNumberDonations.style.display = 'none';\r
+ }\r
+ } \r
+ }\r
+\r
+\r
+ function checkCampaignRecurring() { \r
+ var form = document.donate_form ;\r
+ var show = 1 ;\r
+ var paymentMethod = "";\r
+ paymentMethod = "os_authnet";\r
+ \r
+ method = methods.Find(paymentMethod);\r
+ if (!method.getEnableRecurring()) {\r
+ show = 0 ;\r
+ } else {\r
+ if (form.campaign_id.value > 0)\r
+ show = recurrings [form.campaign_id.value] ;\r
+ } \r
+ displayRecurring(show);\r
+ }\r
+ \r
+ function updateAmount() {\r
+ var form = document.donate_form ;\r
+ var campaignId = form.campaign_id.value ;\r
+\r
+ //Check to enable and disable recurring\r
+ var show = 1 ;\r
+ if (campaignId)\r
+ show = recurrings [campaignId] ; \r
+ displayRecurring(show); \r
+ \r
+ }\r
+ function updateStateList() {\r
+ var form = document.donate_form ;\r
+ //First of all, we need to empty the state dropdown\r
+ var list = form.state ;\r
+\r
+ // empty the list\r
+ for (i = 1 ; i < list.options.length ; i++) {\r
+ list.options[i] = null;\r
+ }\r
+ list.length = 1 ;\r
+ var i = 0;\r
+ //Get the country index\r
+ var country = form.country.value ; \r
+ if (country != '') {\r
+ //Find index of the country\r
+ for (var i = 0 ; i < countryNames.length ; i++) {\r
+ if (countryNames[i] == country) { \r
+ break ;\r
+ }\r
+ }\r
+ //We will find the states\r
+ var countryId = countryIds[i] ; \r
+ var stateNames = stateList[countryId]; ;\r
+ if (stateNames) {\r
+ var arrStates = stateNames.split(',');\r
+ i = 1 ;\r
+ var state = '';\r
+ var stateName = '' ;\r
+ for (var j = 0 ; j < arrStates.length ; j++) {\r
+ state = arrStates[j] ;\r
+ stateName = state.split(':');\r
+ opt = new Option();\r
+ opt.value = stateName[0];\r
+ opt.text = stateName[1];\r
+ list.options[i++] = opt;\r
+ }\r
+ list.lenght = i ;\r
+ } \r
+ } \r
+ }\r
+\r
+ </script> \r
+ \r
+<?php\r
+ $output = apply_filters( 'wp_donate_filter_form', ob_get_contents());\r
+ ob_end_clean();\r
+\r
+ return $output;\r
+}\r
+?>\r
--- /dev/null
+<?php\r
+function authorizepayment($METHOD_TO_USE,$REQUEST,$address1='',$city='',$state='',$country='',$zip='',$email='',$paypalprice)\r
+{\r
+ if (!checkInvoice($REQUEST['invoice_num'])) {\r
+ $_SESSION['donate_msg'] = 'Please enter a valid invoice number.';\r
+ return false;\r
+ }\r
+ else if (!checkCreditCard($REQUEST['x_card_num'], $REQUEST['card_type'], $ccerror, $ccerrortext))\r
+ {\r
+ $_SESSION['donate_msg'] = 'Please enter a valid credit card number.';\r
+ return false;\r
+ }\r
+ else\r
+ {\r
+ if ($METHOD_TO_USE == "AIM")\r
+ {\r
+ $transaction = new AuthorizeNetAIM;\r
+ $transaction->setSandbox(AUTHORIZENET_SANDBOX);\r
+ $transaction->setFields(\r
+ array(\r
+ 'amount' => $REQUEST['amount'],\r
+ 'invoice_num' => $REQUEST['invoice_num'],\r
+ 'card_num' => $REQUEST['x_card_num'],\r
+ 'exp_date' => $REQUEST['exp_month'].'/'.$REQUEST['exp_year'],\r
+ 'first_name' => $REQUEST['first_name'],\r
+ 'last_name' => $REQUEST['last_name'],\r
+ 'address' => $REQUEST['address'],\r
+ 'city' => $REQUEST['city'],\r
+ 'state' => $REQUEST['state'],\r
+ 'country' => $REQUEST['country'],\r
+ 'zip' => $REQUEST['zip'],\r
+ 'email' => $REQUEST['email'],\r
+ )\r
+ );\r
+ $response = $transaction->authorizeAndCapture();\r
+ if ($response->approved)\r
+ {\r
+ $_SESSION['donate_msg'] = $response->response_reason_text;\r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ //echo "1";\r
+ $_SESSION['donate_msg'] = $response->response_reason_text; \r
+ }\r
+ }\r
+ elseif (count($REQUEST))\r
+ {\r
+ $response = new AuthorizeNetSIM;\r
+ if ($response->isAuthorizeNet())\r
+ {\r
+ if ($response->approved)\r
+ {\r
+ // Transaction approved! Do your logic here.\r
+ // Redirect the user back to your site.\r
+ //$return_url = $site_root . 'thank_you_page.php?transaction_id=' .$response->transaction_id;\r
+ //echo "2";\r
+ \r
+ return true;\r
+ }\r
+ else\r
+ {\r
+ // There was a problem. Do your logic here.\r
+ // Redirect the user back to your site.\r
+ $_SESSION['donate_msg'] = $response->response_reason_text;\r
+ // echo "3";\r
+ header("Location:".site_url().$_SERVER['REQUEST_URI']);\r
+ exit;\r
+ \r
+ }\r
+ echo AuthorizeNetDPM::getRelayResponseSnippet($return_url);\r
+ }\r
+ else\r
+ {\r
+ //echo "4";\r
+ $_SESSION['donate_msg'] = "MD5 Hash failed. Check to make sure your MD5 Setting matches the one in"; \r
+ }\r
+ }\r
+ \r
+ }\r
+}\r
+\r
+function checkInvoice($invoice_num) {\r
+ if (!preg_match("/^[0-9]{5}$/", $invoice_num)) {\r
+ return false;\r
+ }\r
+ return true;\r
+}\r
+\r
+function checkCreditCard($cardnumber, $cardname, &$errornumber, &$errortext) {\r
+\r
+ // Define the cards we support. You may add additional card types.\r
+ // Name: As in the selection box of the form - must be same as user's\r
+ // Length: List of possible valid lengths of the card number for the card\r
+ // prefixes: List of possible prefixes for the card\r
+ // checkdigit Boolean to say whether there is a check digit\r
+ // Don't forget - all but the last array definition needs a comma separator!\r
+\r
+ $cards = array(array('name' => 'AMEX',\r
+ 'length' => '15',\r
+ 'prefixes' => '34,37',\r
+ 'checkdigit' => true\r
+ ),\r
+ array('name' => 'Diners Club Carte Blanche',\r
+ 'length' => '14',\r
+ 'prefixes' => '300,301,302,303,304,305',\r
+ 'checkdigit' => true\r
+ ),\r
+ array('name' => 'DINERS',\r
+ 'length' => '14,16',\r
+ 'prefixes' => '305,36,38,54,55',\r
+ 'checkdigit' => true\r
+ ),\r
+ array('name' => 'Discover',\r
+ 'length' => '16',\r
+ 'prefixes' => '6011,622,64,65',\r
+ 'checkdigit' => true\r
+ ),\r
+ array('name' => 'Diners Club Enroute',\r
+ 'length' => '15',\r
+ 'prefixes' => '2014,2149',\r
+ 'checkdigit' => true\r
+ ),\r
+ array('name' => 'JCB',\r
+ 'length' => '16',\r
+ 'prefixes' => '35',\r
+ 'checkdigit' => true\r
+ ),\r
+ array('name' => 'Maestro',\r
+ 'length' => '12,13,14,15,16,18,19',\r
+ 'prefixes' => '5018,5020,5038,6304,6759,6761',\r
+ 'checkdigit' => true\r
+ ),\r
+ array('name' => 'MASTERCARD',\r
+ 'length' => '16',\r
+ 'prefixes' => '51,52,53,54,55',\r
+ 'checkdigit' => true\r
+ ),\r
+ array('name' => 'Solo',\r
+ 'length' => '16,18,19',\r
+ 'prefixes' => '6334,6767',\r
+ 'checkdigit' => true\r
+ ),\r
+ array('name' => 'Switch',\r
+ 'length' => '16,18,19',\r
+ 'prefixes' => '4903,4905,4911,4936,564182,633110,6333,6759',\r
+ 'checkdigit' => true\r
+ ),\r
+ array('name' => 'VISA',\r
+ 'length' => '16',\r
+ 'prefixes' => '4',\r
+ 'checkdigit' => true\r
+ ),\r
+ array('name' => 'VISA Electron',\r
+ 'length' => '16',\r
+ 'prefixes' => '417500,4917,4913,4508,4844',\r
+ 'checkdigit' => true\r
+ ),\r
+ array('name' => 'LaserCard',\r
+ 'length' => '16,17,18,19',\r
+ 'prefixes' => '6304,6706,6771,6709',\r
+ 'checkdigit' => true\r
+ )\r
+ );\r
+\r
+ $ccErrorNo = 0;\r
+\r
+ $ccErrors [0] = 'Please enter a valid ' . $cardname . ' number.';\r
+ $ccErrors [1] = "No card number provided";\r
+ $ccErrors [2] = "Credit card number has invalid format";\r
+ $ccErrors [3] = "Credit card number is invalid";\r
+ $ccErrors [4] = "Credit card number is wrong length";\r
+\r
+ // Establish card type\r
+ $cardType = -1;\r
+ for ($i = 0; $i < sizeof($cards); $i++) {\r
+\r
+ // See if it is this card (ignoring the case of the string)\r
+ if (strtolower($cardname) == strtolower($cards[$i]['name'])) {\r
+ $cardType = $i;\r
+ break;\r
+ }\r
+ }\r
+\r
+ // If card type not found, report an error\r
+ if ($cardType == -1) {\r
+ $errornumber = 0;\r
+ $errortext = $ccErrors [$errornumber];\r
+ return false;\r
+ }\r
+\r
+ // Ensure that the user has provided a credit card number\r
+ if (strlen($cardnumber) == 0) {\r
+ $errornumber = 1;\r
+ $errortext = $ccErrors [$errornumber];\r
+ return false;\r
+ }\r
+\r
+ // Remove any spaces from the credit card number\r
+ $cardNo = str_replace(' ', '', $cardnumber);\r
+\r
+ // Check that the number is numeric and of the right sort of length.\r
+ if (!preg_match("/^[0-9]{13,19}$/", $cardNo)) {\r
+ $errornumber = 2;\r
+ $errortext = $ccErrors [$errornumber];\r
+ return false;\r
+ }\r
+ \r
+\r
+ // Now check the modulus 10 check digit - if required\r
+ if ($cards[$cardType]['checkdigit']) {\r
+ $checksum = 0; // running checksum total\r
+ $mychar = ""; // next char to process\r
+ $j = 1; // takes value of 1 or 2\r
+ // Process each digit one by one starting at the right\r
+ for ($i = strlen($cardNo) - 1; $i >= 0; $i--) {\r
+\r
+ // Extract the next digit and multiply by 1 or 2 on alternative digits.\r
+ $calc = $cardNo{$i} * $j;\r
+\r
+ // If the result is in two digits add 1 to the checksum total\r
+ if ($calc > 9) {\r
+ $checksum = $checksum + 1;\r
+ $calc = $calc - 10;\r
+ }\r
+\r
+ // Add the units element to the checksum total\r
+ $checksum = $checksum + $calc;\r
+\r
+ // Switch the value of j\r
+ if ($j == 1) {\r
+ $j = 2;\r
+ } else {\r
+ $j = 1;\r
+ };\r
+ }\r
+\r
+ // All done - if checksum is divisible by 10, it is a valid modulus 10.\r
+ // If not, report an error.\r
+ if ($checksum % 10 != 0) {\r
+ $errornumber = 3;\r
+ $errortext = $ccErrors [$errornumber];\r
+ return false;\r
+ }\r
+ }\r
+\r
+ // The following are the card-specific checks we undertake.\r
+ // Load an array with the valid prefixes for this card\r
+ $prefix = explode(',', $cards[$cardType]['prefixes']);\r
+\r
+ // Now see if any of them match what we have in the card number\r
+ $PrefixValid = false;\r
+ for ($i = 0; $i < sizeof($prefix); $i++) {\r
+ $exp = '/^' . $prefix[$i] . '/';\r
+ if (preg_match($exp, $cardNo)) {\r
+ $PrefixValid = true;\r
+ break;\r
+ }\r
+ }\r
+\r
+ // If it isn't a valid prefix there's no point at looking at the length\r
+ if (!$PrefixValid) {\r
+ $errornumber = 3;\r
+ $errortext = $ccErrors [$errornumber];\r
+ return false;\r
+ }\r
+\r
+ // See if the length is valid for this card\r
+ $LengthValid = false;\r
+ $lengths = explode(',', $cards[$cardType]['length']);\r
+ for ($j = 0; $j < sizeof($lengths); $j++) {\r
+ if (strlen($cardNo) == $lengths[$j]) {\r
+ $LengthValid = true;\r
+ break;\r
+ }\r
+ }\r
+\r
+ // See if all is OK by seeing if the length was valid.\r
+ if (!$LengthValid) {\r
+ $errornumber = 4;\r
+ $errortext = $ccErrors [$errornumber];\r
+ return false;\r
+ };\r
+\r
+ // The credit card is in the required format.\r
+ return true;\r
+}\r
+\r
+\r
+?>\r
--- /dev/null
+<?php\r
+\r
+function wp_donate_options_page() \r
+{ global $wpdb;\r
+ ?>\r
+ <?php \r
+ if($_GET['id']!='' && $_GET['action']=='delete')\r
+ { \r
+ $wpdb->query($wpdb->prepare("DELETE FROM ".$wpdb->prefix."donate WHERE id = %d",$_GET['id']));\r
+ header("Location:".site_url().'/wp-admin/admin.php?page=wp_donate');\r
+ exit;\r
+ } \r
+ elseif($_GET['id']!='')\r
+ {\r
+ ?>\r
+ <div id="glm-donate-tabs">\r
+ <h1 class="donate-title">WP Donate</h1>\r
+ <div id="glm-donate-tab-donorlist">\r
+ <table class="glm-donate-donorlist" width="50%">\r
+ <thead> \r
+ <tr>\r
+ <?php global $wpdb;\r
+ $myrows = $wpdb->get_results( "SELECT * FROM ".$wpdb->prefix."donate where id='".$_GET['id']."'" ); \r
+ foreach($myrows as $myrows_value)\r
+ {\r
+ ?>\r
+ <tr>\r
+ <td width="125"><b>First Name :</b></td>\r
+ <td><?php echo $myrows_value->first_name;?></td>\r
+ </tr>\r
+ <tr>\r
+ <td><b>Last Name :</b></td> \r
+ <td><?php echo $myrows_value->last_name;?></td>\r
+ </tr>\r
+ <tr>\r
+ <td><b>Organization :</b></td> \r
+ <td><?php echo $myrows_value->organization;?></td>\r
+ </tr>\r
+ <tr>\r
+ <td><b>Address :</b></td> \r
+ <td><?php echo $myrows_value->address;?></td>\r
+ </tr>\r
+ <tr>\r
+ <td><b>City :</b></td> \r
+ <td><?php echo $myrows_value->city;?></td>\r
+ </tr>\r
+ <tr>\r
+ <td><b>Country :</b></td> \r
+ <td><?php echo $myrows_value->country;?></td>\r
+ </tr>\r
+ <tr>\r
+ <td><b>State :</b></td> \r
+ <td><?php echo $myrows_value->state;?></td>\r
+ </tr>\r
+ <tr>\r
+ <td><b>Zip : </b></td> \r
+ <td><?php echo $myrows_value->zip;?></td>\r
+ </tr>\r
+ <tr>\r
+ <td><b>Phone :</b></td> \r
+ <td><?php echo $myrows_value->phone;?></td>\r
+ </tr>\r
+ <tr>\r
+ <td><b>Email :</b></td> \r
+ <td><?php echo $myrows_value->email;?></td>\r
+ </tr>\r
+ <?php /*?>\r
+ <tr>\r
+ <td><b>Donation Type :</b></td> \r
+ <td><?php echo $myrows_value->donation_type;?></td>\r
+ </tr>\r
+ <?php */?> \r
+ <tr>\r
+ <td><b>Amount :</b></td> \r
+ <td>$<?php echo $myrows_value->amount;?></td>\r
+ </tr>\r
+ <tr>\r
+ <td><b>Invoice Number: </b></td>\r
+ <td><?php echo $myrows_value->invoice_num;?></td>\r
+ </tr>\r
+ <tr>\r
+ <td><b>Comment :</b></td> \r
+ <td><?php echo $myrows_value->comment;?></td>\r
+ </tr>\r
+ \r
+ <tr>\r
+ <td><b>Date :</b></td> \r
+ <td align="left"><?php echo $myrows_value->date;?></td>\r
+ </tr>\r
+ <tr> \r
+ <td><b>Action : </b></td>\r
+ <td align="left"><?php if($myrows_value->status==1){echo "Complete";} else {echo "Pending";}?></td>\r
+ </tr>\r
+ <?php } ?>\r
+ <tr>\r
+ <td><input type="button" onclick=location.href='<?php echo site_url();?>/wp-admin/admin.php?page=wp_donate' value="Back" /></td>\r
+ </tr>\r
+ </tr>\r
+ </thead>\r
+ </table>\r
+ </div>\r
+ </div>\r
+ <?php\r
+ }\r
+ else\r
+ {\r
+ ?>\r
+ <script type="text/javascript">\r
+ jQuery(function() {\r
+ jQuery("#glm-donate-tabs").tabs();\r
+ });\r
+ </script>\r
+\r
+ <div id="glm-donate-tabs">\r
+ <h1 class="donate-title">WP Donate</h1>\r
+ <ul id="glm-donate-tabs-nav">\r
+ <li><a href="#glm-donate-tab-donorlist">Payment List</a></li>\r
+ <li><a href="#glm-donate-tab-settings">Settings</a></li>\r
+ </ul>\r
+ <div style="clear:both"></div>\r
+ <div id="glm-donate-tab-donorlist">\r
+ <table class="glm-donate-donorlist" width="100%">\r
+ <?php \r
+ global $wpdb;\r
+ $myrows = $wpdb->get_results( "SELECT * FROM ".$wpdb->prefix."donate");\r
+ if(count($myrows)>0)\r
+ {\r
+ ?>\r
+ <thead>\r
+ <tr class="glm-donate-absolute">\r
+ <th align="left">Person</th>\r
+ <th align="left">Email</th>\r
+ <th align="left">Amount</th>\r
+ <th align="left">Date</th>\r
+ <th align="left">Comment</th>\r
+ <th align="left">Action</th>\r
+ </tr>\r
+ <?php \r
+ foreach($myrows as $myrows_value)\r
+ {\r
+ ?>\r
+ <tr>\r
+ <td><a href="<?php echo site_url();?>/wp-admin/admin.php?page=wp_donate&id=<?php echo $myrows_value->id;?>"><?php echo $myrows_value->first_name.' '.$myrows_value->last_name ;?></a></td>\r
+ <td><?php echo $myrows_value->email;?></td>\r
+ <td>$<?php echo $myrows_value->amount;?></td>\r
+ <td><?php echo $myrows_value->date;?></td>\r
+ <td><?php echo $myrows_value->comment;?></td>\r
+ <td><a onclick="return confirm('Are you sure?')" href="<?php echo site_url();?>/wp-admin/admin.php?page=wp_donate&action=delete&id=<?php echo $myrows_value->id;?>">Delete</a></td>\r
+ </tr>\r
+ <?php \r
+ } \r
+ ?>\r
+ </thead>\r
+ <?php \r
+ }\r
+ else\r
+ {\r
+ echo "No Record's Found."; \r
+ }\r
+ ?>\r
+ </table>\r
+ </div>\r
+ <div id="glm-donate-tab-settings"> \r
+ <?php\r
+ global $wpdb;\r
+ $mysetting = $wpdb->get_results( "SELECT * FROM ".$wpdb->prefix."donate_setting" ); \r
+ ?>\r
+ <form action="<?php echo site_url();?>/wp-admin/admin.php?page=wp_donate" method="post" name="setting" id="setting">\r
+ <input type="hidden" name="setting" value="1" />\r
+ <ul style="color:#777">\r
+ <li>\r
+ <strong>Authorize.net Mode</strong> \r
+ <select class="inputbox" name="authnet_mode" id="paramsauthnet_mode">\r
+ <option value="0" <?php if($mysetting[0]->mod==0){?> selected="selected" <?php }?> >Test Mode</option>\r
+ <option <?php if($mysetting[0]->mod==1){?> selected="selected" <?php }?> value="1">Live Mode</option>\r
+ </select>\r
+ </li>\r
+ <li>\r
+ <strong>API Login</strong> \r
+ <input type="text" size="50" class="text_area" value="<?php echo $mysetting[0]->api_login;?>" id="paramsx_login" name="x_login">\r
+ </li>\r
+ <li>\r
+ <strong>Transaction Key</strong> \r
+ <input type="text" class="text_area" value="<?php echo $mysetting[0]->key;?>" id="paramsx_tran_key" name="x_tran_key">\r
+ </li>\r
+ <br />\r
+ <input type="submit" value="Submit" /> \r
+ </ul>\r
+ </form>\r
+ </div>\r
+ \r
+ </div>\r
+<?php\r
+ }\r
+}\r
+\r
+\r
+\r
+?>\r
--- /dev/null
+/**\r
+ * GLM-donate\r
+ *\r
+ * @since 1.4\r
+ *\r
+ */\r
+\r
+// var glm-donate-key declared in DOM from localized script\r
+\r
+donate.setPublishableKey( wpdonatekey );\r
+\r
+// donate Token Creation & Event Handling\r
+\r
+jQuery(document).ready(function($) {\r
+\r
+ var resetdonateForm = function() {\r
+ $("#glm-donate-payment-form").get(0).reset();\r
+ $('input').removeClass('donate-valid donate-invalid');\r
+ }\r
+\r
+ function donateResponseHandler(status, response) {\r
+ if (response.error) {\r
+\r
+ $('.donate-submit-button').prop("disabled", false).css("opacity","1.0");\r
+ $(".payment-errors").show().html(response.error.message);\r
+\r
+ } else {\r
+\r
+ var form$ = $("#glm-donate-payment-form");\r
+ var token = response['id'];\r
+ form$.append("<input type='hidden' name='donateToken' value='" + token + "' />");\r
+\r
+ var newdonateForm = form$.serialize();\r
+\r
+ $.ajax({\r
+ type : "post",\r
+ dataType : "json",\r
+ url : ajaxurl,\r
+ data : newdonateForm,\r
+ success: function(response) {\r
+\r
+ $('.glm-donate-details').prepend(response);\r
+ $('.donate-submit-button').prop("disabled", false).css("opacity","1.0");\r
+ resetdonateForm();\r
+\r
+ }\r
+\r
+ });\r
+\r
+ }\r
+ }\r
+\r
+ $("#glm-donate-payment-form").submit(function(event) {\r
+\r
+ event.preventDefault();\r
+ $(".glm-donate-notification").hide();\r
+\r
+ $('.donate-submit-button').prop("disabled", true).css("opacity","0.4");\r
+\r
+ var amount = $('.glm-donate-card-amount').val() * 100; //amount you want to charge in cents\r
+\r
+ donate.createToken({\r
+ name: $('.glm-donate-name').val(),\r
+ number: $('.card-number').val(),\r
+ cvc: $('.card-cvc').val(),\r
+ exp_month: $('.card-expiry-month').val(),\r
+ exp_year: $('.card-expiry-year').val()\r
+ }, donateResponseHandler);\r
+\r
+ // prevent the form from submitting with the default action\r
+\r
+ return false;\r
+\r
+ });\r
+});\r
+\r
+// Form Validation & Enhancement\r
+\r
+jQuery(document).ready(function($) {\r
+\r
+ $('.card-number').focusout( function() {\r
+\r
+ var cardValid = donate.validateCardNumber( $(this).val() );\r
+ var cardType = donate.cardType( $(this).val() );\r
+\r
+ // Card Number Validation\r
+\r
+ if ( cardValid ) {\r
+ $(this).removeClass('donate-invalid').addClass('donate-valid');\r
+ } else {\r
+ $(this).removeClass('donate-valid').addClass('donate-invalid');\r
+ }\r
+\r
+ // Card Type Information\r
+\r
+ /*\r
+ if ( cardType && cardValid ) {\r
+ // Display Card Logo\r
+ }\r
+ */\r
+\r
+ });\r
+\r
+ // CVC Validation\r
+\r
+ $('.card-cvc').focusout( function() {\r
+\r
+ if ( donate.validateCVC( $(this).val() ) ) {\r
+ $(this).removeClass('donate-invalid').addClass('donate-valid');\r
+ } else {\r
+ $(this).removeClass('donate-valid').addClass('donate-invalid');\r
+ }\r
+\r
+ });\r
+\r
+});\r
+\r
--- /dev/null
+(function(d,e){var a=d.document,c;var b=function(g,t,p){var r=this,o,q,n,s,i,f,h,m="";this.listContainer=a.getElementById(g);this.items=[];this.searched=false;this.filtered=false;this.list=null;this.templateEngines={};this.maxVisibleItemsCount=t.maxVisibleItemsCount||200;q=function(u,w){w.list=w.list||g;w.listClass=w.listClass||"list";w.searchClass=w.searchClass||"search";w.sortClass=w.sortClass||"sort";o=new f(r,w);r.list=c.getByClass(w.listClass,r.listContainer,true);c.addEvent(c.getByClass(w.searchClass,r.listContainer),"keyup",r.search);h=c.getByClass(w.sortClass,r.listContainer);c.addEvent(h,"click",r.sort);if(w.valueNames){var x=n.get(),v=w.valueNames;if(w.indexAsync){n.indexAsync(x,v)}else{n.index(x,v)}}if(u!==e){r.add(u)}};n={get:function(){var w=r.list.childNodes,v=[];for(var x=0,u=w.length;x<u;x++){if(w[x].data===e){v.push(w[x])}}return v},index:function(u,w){for(var x=0,v=u.length;x<v;x++){r.items.push(new i(w,u[x]))}},indexAsync:function(u,v){var w=u.splice(0,100);this.index(w,v);if(u.length>0){setTimeout(function(){n.indexAsync(u,v)},10)}}};this.add=function(v,A){if(A){l(v,A)}var y=[],x=false;if(v[0]===e){v=[v]}for(var w=0,u=v.length;w<u;w++){var z=null;if(v[w] instanceof i){z=v[w];z.reload()}else{x=(r.items.length>r.maxVisibleItemsCount)?true:false;z=new i(v[w],e,x)}if(!x){o.add(z,t)}r.items.push(z);y.push(z)}return y};var l=function(v,x,u){var w=v.splice(0,100);u=u||[];u=u.concat(r.add(w));if(v.length>0){setTimeout(function(){l(v,x,u)},10)}else{x(u)}};this.remove=function(z,y,v){var x=0;for(var w=0,u=r.items.length;w<u;w++){if(r.items[w].values()[z]==y){o.remove(r.items[w],v);r.items.splice(w,1);u--;x++}}return x};this.get=function(z,x){var y=[];for(var v=0,u=r.items.length;v<u;v++){var w=r.items[v];if(w.values()[z]==x){y.push(w)}}if(y.length==0){return null}else{if(y.length==1){return y[0]}else{return y}}};this.sort=function(A,E){var u=r.items.length,D=null,y=A.target||A.srcElement,w="",z=false,C="asc",x="desc",E=E||{};if(y===e){D=A;z=E.asc||false}else{D=c.getAttribute(y,"data-sort");z=c.hasClass(y,C)?false:true}for(var v=0,B=h.length;v<B;v++){c.removeClass(h[v],C);c.removeClass(h[v],x)}if(z){if(y!==e){c.addClass(y,C)}z=true}else{if(y!==e){c.addClass(y,x)}z=false}if(E.sortFunction){E.sortFunction=E.sortFunction}else{E.sortFunction=function(G,F){return s.alphanum(G.values()[D],F.values()[D],z)}}r.items.sort(E.sortFunction);j()};s={alphanum:function(w,v,y){if(w===e||w===null){w=""}if(v===e||v===null){v=""}w=w.toString().replace(/&(lt|gt);/g,function(x,D){return(D=="lt")?"<":">"});w=w.replace(/<\/?[^>]+(>|$)/g,"");v=v.toString().replace(/&(lt|gt);/g,function(x,D){return(D=="lt")?"<":">"});v=v.replace(/<\/?[^>]+(>|$)/g,"");var z=this.chunkify(w);var B=this.chunkify(v);for(var u=0;z[u]&&B[u];u++){if(z[u]!==B[u]){var C=Number(z[u]),A=Number(B[u]);if(y){if(C==z[u]&&A==B[u]){return C-A}else{return(z[u]>B[u])?1:-1}}else{if(C==z[u]&&A==B[u]){return A-C}else{return(z[u]>B[u])?-1:1}}}}return z.length-B.length},chunkify:function(A){var D=[],v=0,C=-1,B=0,z,w;while(z=(w=A.charAt(v++)).charCodeAt(0)){var u=(z==45||z==46||(z>=48&&z<=57));if(u!==B){D[++C]="";B=u}D[C]+=w}return D}};this.search=function(F,w){var v=[],E,D,C,B,z,w=(w===e)?r.items[0].values():w,F=(F===e)?"":F,A=F.target||F.srcElement;F=(A===e)?F.toLowerCase():A.value.toLowerCase();z=r.items;F=F.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&");o.clear();if(F===""){k.search();r.searched=false;j()}else{r.searched=true;for(var x=0,u=z.length;x<u;x++){E=false;D=z[x];B=D.values();for(var y in w){if(B.hasOwnProperty(y)&&w[y]!==null){C=B[y].toString().toLowerCase();if((F!=="")&&(C.search(F)>-1)){E=true}}}if(E){D.found=true;v.push(D)}else{D.found=false}}j()}m=F;return v};this.filter=function(z){var y=e;k.filter();if(z===e){r.filtered=false}else{y=[];r.filtered=true;var x=r.items;for(var v=0,u=x.length;v<u;v++){var w=x[v];if(z(w.values())){w.filtered=true;y.push(w)}else{w.filtered=false}}}j();return y};this.size=function(){return r.items.length};this.clear=function(){o.clear();r.items=[]};var k={filter:function(){var v=r.items,u=v.length;while(u--){v[u].filtered=false}},search:function(){var v=r.items,u=v.length;while(u--){v[u].found=false}}};var j=function(){var w=r.items;o.clear();for(var v=0,u=w.length;v<u&&v<r.maxVisibleItemsCount;v++){if((r.filtered&&r.searched&&w[v].found&&w[v].filtered)||(r.filtered&&!r.searched&&w[v].filtered)||(!r.filtered&&r.searched&&w[v].found)||(!r.filtered&&!r.searched)){w[v].show()}}};i=function(v,x,w){var y=this,u={};this.found=false;this.filtered=false;var z=function(B,D,C){if(D===e){if(C){y.values(B,C)}else{y.values(B)}}else{y.elm=D;var A=o.get(y,B);y.values(A)}};this.values=function(B,C){if(B!==e){for(var A in B){u[A]=B[A]}if(C!==true){o.set(y,y.values())}}else{return u}};this.show=function(){o.show(y)};this.hide=function(){o.hide(y)};z(v,x,w)};f=function(v,u){if(u.engine===e){u.engine="standard"}else{u.engine=u.engine.toLowerCase()}return new r.constructor.prototype.templateEngines[u.engine](v,u)};q(p,t)};b.prototype.templateEngines={};b.prototype.templateEngines.standard=function(j,g){var k=c.getByClass(g.listClass,a.getElementById(g.list))[0],i=a.getElementById(g.item),f=this,h={tryItemSourceExists:function(){if(i===null){var n=k.childNodes,m=[];for(var o=0,l=n.length;o<l;o++){if(n[o].data===e){i=n[o];break}}}},created:function(l){if(l.elm===e){f.create(l)}},added:function(l){if(l.elm.parentNode===null){f.add(l)}}};this.get=function(p,n){h.tryItemSourceExists();h.created(p);var m={};for(var o=0,l=n.length;o<l;o++){m[n[o]]=c.getByClass(n[o],p.elm)[0].innerHTML}return m};this.set=function(n,m){h.created(n);for(var l in m){if(m.hasOwnProperty(l)){var o=c.getByClass(l,n.elm,true);if(o){o.innerHTML=m[l]}}}};this.create=function(m){if(m.elm!==e){return}h.tryItemSourceExists();var l=i.cloneNode(true);l.id="";m.elm=l;f.set(m,m.values())};this.add=function(l){h.created(l);k.appendChild(l.elm)};this.remove=function(l){k.removeChild(l.elm)};this.show=function(l){h.created(l);h.added(l);k.appendChild(l.elm)};this.hide=function(l){if(l.elm!==e&&l.elm.parentNode===k){k.removeChild(l.elm)}};this.clear=function(){if(k.hasChildNodes()){while(k.childNodes.length>=1){k.removeChild(k.firstChild)}}}};c={getByClass:(function(){if(a.getElementsByClassName){return function(g,f,h){if(h){return f.getElementsByClassName(g)[0]}else{return f.getElementsByClassName(g)}}}else{return function(m,g,o){var p=[],q="*";if(g==null){g=a}var k=g.getElementsByTagName(q);var f=k.length;var n=new RegExp("(^|\\s)"+m+"(\\s|$)");for(var l=0,h=0;l<f;l++){if(n.test(k[l].className)){if(o){return k[l]}else{p[h]=k[l];h++}}}return p}}})(),addEvent:(function(g,f){if(f.addEventListener){return function(m,l,j){if((m&&!(m instanceof Array)&&!m.length&&!c.isNodeList(m)&&(m.length!==0))||m===g){m.addEventListener(l,j,false)}else{if(m&&m[0]!==e){var h=m.length;for(var k=0;k<h;k++){c.addEvent(m[k],l,j)}}}}}else{if(f.attachEvent){return function(m,l,j){if((m&&!(m instanceof Array)&&!m.length&&!c.isNodeList(m)&&(m.length!==0))||m===g){m.attachEvent("on"+l,function(){return j.call(m,g.event)})}else{if(m&&m[0]!==e){var h=m.length;for(var k=0;k<h;k++){c.addEvent(m[k],l,j)}}}}}}})(this,a),getAttribute:function(l,g){var f=(l.getAttribute&&l.getAttribute(g))||null;if(!f){var h=l.attributes;var k=h.length;for(var j=0;j<k;j++){if(g[j]!==e){if(g[j].nodeName===g){f=g[j].nodeValue}}}}return f},isNodeList:function(g){var f=Object.prototype.toString.call(g);if(typeof g==="object"&&/^\[object (HTMLCollection|NodeList|Object)\]$/.test(f)&&(g.length==0||(typeof node==="object"&&g[0].nodeType>0))){return true}return false},hasClass:function(h,g){var f=this.getAttribute(h,"class");return(f.search(g)>-1)},addClass:function(h,g){if(!this.hasClass(h,g)){var f=this.getAttribute(h,"class");f=f+" "+g+" ";f=f.replace(/\s{2,}/g," ");h.setAttribute("class",f)}},removeClass:function(h,g){if(this.hasClass(h,g)){var f=this.getAttribute(h,"class");f=f.replace(g,"");h.setAttribute("class",f)}}};d.List=b;d.ListJsHelpers=c})(window);
\ No newline at end of file
--- /dev/null
+function PaymentMethod(name,creditCard,cardType,cardCvv,cardHolderName,enableRecurring){this.name=name;this.creditCard=creditCard;this.cardType=cardType;this.cardCvv=cardCvv;this.cardHolderName=cardHolderName;this.enableRecurring=enableRecurring;}
+PaymentMethod.prototype.getName=function(){return this.name;}
+PaymentMethod.prototype.getCreditCard=function(){return this.creditCard;}
+PaymentMethod.prototype.getCardType=function(){return this.cardType;}
+PaymentMethod.prototype.getCardCvv=function(){return this.cardCvv;}
+PaymentMethod.prototype.getCardHolderName=function(){return this.cardHolderName;}
+PaymentMethod.prototype.getEnableRecurring=function(){return this.enableRecurring;}
+function PaymentMethods(){this.length=0;this.methods=new Array();}
+PaymentMethods.prototype.Add=function(paymentMethod){this.methods[this.length]=paymentMethod;this.length=this.length+1;}
+PaymentMethods.prototype.Find=function(name){for(var i=0;i<this.length;i++){if(this.methods[i].name==name){return this.methods[i];}}
+return null;}
+function changePaymentMethod(){var form=document.os_form;var paymentMethod;for(var i=0;i<form.payment_method.length;i++){if(form.payment_method[i].checked==true){paymentMethod=form.payment_method[i].value;break;}}
+var trCardNumber=document.getElementById('tr_card_number');var trExpDate=document.getElementById('tr_exp_date');var trCvvCode=document.getElementById('tr_cvv_code');var trCardType=document.getElementById('tr_card_type');var trCardHolderName=document.getElementById('tr_card_holder_name');var trDonationType=document.getElementById('donation_type');var trFrequecy=document.getElementById('tr_frequency');var trNumberDonations=document.getElementById('tr_number_donations');var trBankRountingNumber=document.getElementById('tr_bank_rounting_number');var trBankAccountNumber=document.getElementById('tr_bank_account_number');var trBankAccountType=document.getElementById('tr_bank_account_type');var trBankName=document.getElementById('tr_bank_name');var trBankAccountHolder=document.getElementById('tr_bank_account_holder');method=methods.Find(paymentMethod);if(method.getCreditCard()){trCardNumber.style.display="";trExpDate.style.display="";trCvvCode.style.display="";if(method.getCardType()){trCardType.style.display='';}else{trCardType.style.display='none';}
+if(method.getCardHolderName()){trCardHolderName.style.display='';}else{trCardHolderName.style.display='none';}}else{trCardNumber.style.display="none";trExpDate.style.display="none";trCvvCode.style.display="none";trCardType.style.display='none';trCardHolderName.style.display="none";}
+if(paymentMethod=='os_echeck'){trBankRountingNumber.style.display='';trBankAccountNumber.style.display='';trBankAccountType.style.display='';trBankName.style.display='';trBankAccountHolder.style.display='';}else{trBankRountingNumber.style.display='none';trBankAccountNumber.style.display='none';trBankAccountType.style.display='none';trBankName.style.display='none';trBankAccountHolder.style.display='none';}
+if(trDonationType){var show=1;if(form.campaign_id){if(form.campaign_id.value>0)
+show=recurrings[form.campaign_id.value];}
+if(method.getEnableRecurring()&&show){trDonationType.style.display='';if(form.donation_type[1].checked){trFrequency.style.display='';if(trNumberDonations){trNumberDonations.style.display='';}}}else{trDonationType.style.display='none';trFrequecy.style.display='none';if(trNumberDonations){trNumberDonations.style.display='none';}
+form.donation_type[0].checked=true;}}}
\ No newline at end of file
--- /dev/null
+=== glm-donate ===
+Contributors: ketanajani
+Donate link: http://webconfines.com
+Tags: donate, authorizeNet , credit card, payment, pay, transfer, charge, widget, form, chargly, recurly, recent, donation, donations, charity, transaction, money, wordpress
+Requires at least: 3.0
+Tested up to: 3.6
+Stable tag: 0.6
+License: GPLv2 or later
+License URI: http://www.gnu.org/licenses/gpl-2.0.html
+
+GLM-donate provides a payment form and recent donor by utilizing AuthorizeNet.
+
+== Description ==
+
+WP Donate provides a payment form and recent donor widget by utilizing Authorize.net.
+
+What glm-donate provides:
+
+1. Listing of donor at admin area
+1. At admin area it allows to set details related to payment gateway
+1. From displayed at client side using Shortcode
+1. Autherize.net payment gateway integration for accepting donation
+
+If you need any modification in plugin or need some extra functionality than please let us know here http://www.webconfines.com/contact-us
+
+== Installation ==
+
+WP Donate can be used by either calling up a simple shortcode or adding the function to your template as below:
+
+1. Upload the folder `glm-donate` to the `/wp-content/plugins/` directory
+1. Activate the plugin through the 'Plugins' menu in WordPress
+1. Go to WP Donate (for both Test & Live)
+1. Place `[Display Donate]` in your content or `<?php wp_donate_form(); ?>` in your template.
+
+== Frequently Asked Questions ==
+= Will it work on my Theme? =
+GLM-donate features an inline form so that it can fit any theme. that you can customize it yourself.
+= Can I expand this plugin =
+Yes you can customize or expand plugin by adding new payment gateways to receive donation or customization can be made in form related to fields.
+= About SSL =
+In order to process transactions in a secure manner, you need to [purchase an SSL Certificate](http://www.noeltock.com/sslcertificates/). This way consumers can purchase/donate with confidence. There are multiple plugins for then enforcing that SSL be used on your page, [here's one](http://wordpress.org/extend/plugins/wordpress-https/).
+= Support available? =
+If you need any modification in plugin or need some extra functionality than please let us know here http://www.webconfines.com/contact-us
+= What are limitations of this plugin? =
+It is only available to users with Authorize.Net payment gateway to receive donations.
+
+== Screenshots ==
+1. screenshot-1.png
+2. screenshot-2.png
+3. screenshot-3.png
+3. screenshot-4.png
+
+== Changelog ==
+
+= 1.2 =
+* Provided some more details about plugin
+
+= 1.3 =
+* Removed error message and redirected to correct page after success.
+
+= 1.4 =
+* Modified database interactions for improvements and solved page redirect bug after successful payment by providing robust solution.
+
+= 1.5 =
+* Modified donation limit. Earlier it was minimum $10 and maximum $1000, now minimum is $1 and maximum is $100000
+
+== Upgrade Notice ==
+Nothing yet
--- /dev/null
+<?php \r
+/* \r
+ Plugin Name: WP Donate\r
+ Plugin URI: http://wordpress.org/extend/plugins/glm-donate/\r
+ Description: Integration of the payment system donate using to AuthorizeNet.\r
+ Author: Ketan Ajani\r
+ Version: 1.5\r
+ Author URI: http://www.webconfines.com\r
+*/\r
+session_start();\r
+\r
+@define ( 'WP_DONATE_VERSION', '1.5' );\r
+@define ( 'WP_DONATE_PATH', WP_PLUGIN_URL . '/' . end( explode( DIRECTORY_SEPARATOR, dirname( __FILE__ ) ) ) );\r
+include_once('includes/donate-function.php');\r
+include_once('includes/donate-display.php');\r
+include_once('includes/donate-options.php');\r
+\r
+add_action('wp_print_styles', 'load_wp_donate_css');\r
+add_action('wp_print_scripts', 'load_wp_donate_js');\r
+add_action('admin_print_styles', 'load_wp_donate_admin_css');\r
+add_action('admin_print_scripts', 'load_wp_donate_admin_js');\r
+\r
+function load_wp_donate_js() \r
+{\r
+ wp_enqueue_script( 'glm-donate-js', WP_DONATE_PATH . '/js/paymentmethods.js', array('jquery') );\r
+}\r
+\r
+function load_wp_donate_admin_js() \r
+{\r
+ wp_enqueue_script('jquery-ui-core');\r
+ wp_enqueue_script('jquery-ui-tabs');\r
+}\r
+\r
+function load_wp_donate_css() \r
+{\r
+ $options = get_option('wp_donate_options');\r
+ if ( $options['donate_css_switch'] ) {\r
+ if ( $options['donate_css_switch'] == 'Yes') {\r
+ wp_enqueue_style('donate-payment-css', WP_DONATE_PATH . '/css/glm-donate-display.css');\r
+ }\r
+ }\r
+ wp_enqueue_style('donate-widget-css', WP_DONATE_PATH . '/css/glm-donate-widget.css');\r
+}\r
+\r
+function load_wp_donate_admin_css() {\r
+ wp_enqueue_style('donate-css', WP_DONATE_PATH . '/css/glm-donate-admin.css');\r
+}\r
+\r
+function my_add_menu_items()\r
+{\r
+ add_menu_page( 'WP Donate', 'WP Donate', 'activate_plugins', 'wp_donate', 'my_render_list_page' );\r
+ add_options_page( 'WP Donate', 'WP Donate', 'manage_options', 'wp_donate', 'wp_donate_options_page' );\r
+}\r
+add_action( 'admin_menu', 'my_add_menu_items' );\r
+\r
+function my_render_list_page()\r
+{\r
+ \r
+}\r
+add_shortcode('Display Donate', 'wp_donate_form');\r
+if(isset($_REQUEST['setting']))\r
+{\r
+ if($_REQUEST['setting']==1)\r
+ {\r
+ $wpdb->query("INSERT INTO `".$wpdb->prefix."donate_setting` (`id`, `mod`, `api_login`, `key`) VALUES ('1', '', '', '')");\r
+ $wpdb->query("UPDATE `".$wpdb->prefix."donate_setting` SET `mod` = '".$_REQUEST['authnet_mode']."',`api_login` = '".$_REQUEST['x_login']."',`key` = '".$_REQUEST['x_tran_key']."' WHERE `id` =1");\r
+ }\r
+}\r
+\r
+register_activation_hook( __FILE__, 'donate_install' );\r
+\r
+global $donate_db_version;\r
+$donate_db_version = "1.0";\r
+\r
+function donate_install() {\r
+ global $wpdb;\r
+ global $donate_db_version;\r
+\r
+ $table_name = $wpdb->prefix . "donate";\r
+ $sql = "CREATE TABLE IF NOT EXISTS `$table_name` (\r
+ `id` int(11) NOT NULL AUTO_INCREMENT,\r
+ `first_name` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+ `last_name` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+ `organization` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+ `address` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+ `city` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+ `country` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+ `state` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+ `zip` varchar(255) CHARACTER SET utf8 NOT NULL,\r
+ `phone` varchar(255) NOT NULL,\r
+ `email` varchar(255) NOT NULL,\r
+ `donation_type` varchar(255) NOT NULL,\r
+ `amount` varchar(255) NOT NULL,\r
+ `comment` text NOT NULL,\r
+ `status` varchar(255) NOT NULL,\r
+ `date` datetime NOT NULL,\r
+ PRIMARY KEY (`id`),\r
+ UNIQUE KEY `id` (`id`)\r
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1";\r
+\r
+$donate_setting = $wpdb->prefix . "donate_setting";\r
+$donate_setting_sql = "CREATE TABLE IF NOT EXISTS `$donate_setting` (\r
+`id` int(11) NOT NULL AUTO_INCREMENT,\r
+`mod` varchar(255) NOT NULL,\r
+`api_login` varchar(255) NOT NULL,\r
+`key` varchar(255) NOT NULL,\r
+PRIMARY KEY (`id`),\r
+UNIQUE KEY `id` (`id`)\r
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2";\r
+ \r
+ require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );\r
+ dbDelta( $sql );\r
+ dbDelta( $donate_setting_sql );\r
+ \r
+ add_option( "donate_db_version", $donate_db_version );\r
+}\r
+\r
+function donate_install_data() {\r
+ global $wpdb;\r
+ $welcome_name = "Mr. WordPress";\r
+ $welcome_text = "Congratulations, you just completed the installation!";\r
+ $rows_affected = $wpdb->insert( $table_name, array( 'time' => current_time('mysql'), 'name' => $welcome_name, 'text' => $welcome_text ) );\r
+}\r
+?>\r