diff --git a/FatZebra.class.php b/FatZebra.class.php index c3a8ab9..d436094 100644 --- a/FatZebra.class.php +++ b/FatZebra.class.php @@ -1,15 +1,7 @@ get_customer_ip(); if (function_exists('bcmul')) { @@ -130,7 +123,8 @@ public function token_purchase($token, $amount, $reference, $cvv = null) { "card_token" => $token, "cvv" => $cvv, "amount" => $int_amount, - "reference" => $reference + "reference" => $reference, + "currency" => $currency ); return $this->do_request("POST", "/purchases", $payload); } @@ -401,7 +395,7 @@ private function do_request($method, $uri, $payload = null) { /** * Fetches the customers 'real' IP address (i.e. pulls out the address from X-Forwarded-For if present) - * + * * @return String the customers IP address */ private function get_customer_ip() { @@ -455,6 +449,11 @@ class PurchaseRequest { */ private $fraud_data = null; + /** + * Currency code for transaction + */ + private $currency = "AUD"; + /** * Creates a new instance of the PurchaseRequest * @param float $amount the purchase amount @@ -465,7 +464,7 @@ class PurchaseRequest { * @param string $cvv the card verification value * @return PurchaseRequest */ - public function __construct($amount, $reference, $card_holder, $card_number, $expiry, $cvv, $fraud_data = null) { + public function __construct($amount, $reference, $card_holder, $card_number, $expiry, $cvv, $fraud_data = null, $currency = "AUD") { if(is_null($amount)) throw new \InvalidArgumentException("Amount is a required field."); if((float)$amount < 0) throw new \InvalidArgumentException("Amount is invalid."); $this->amount = $amount; @@ -494,20 +493,16 @@ public function __construct($amount, $reference, $card_holder, $card_number, $ex * @return \Array */ public function to_array() { - if (function_exists('bcmul')) { - $int_amount = intval(bcmul($this->amount, 100)); - } else { - $multiplied = round($amount * 100); - $int_amount = (int)$multiplied; - } - + $int_amount = Helpers::floatToInt($this->amount); + $data = array( "card_holder" => $this->card_holder, "card_number" => $this->card_number, "card_expiry" => $this->expiry, "cvv" => $this->cvv, "reference" => $this->reference, - "amount" => $int_amount + "amount" => $int_amount, + "currency" => $this->currency ); if (!is_null($this->fraud_data)) { $data['fraud'] = $this->fraud_data; diff --git a/Helpers.php b/Helpers.php index 71c877a..4b8e1ac 100644 --- a/Helpers.php +++ b/Helpers.php @@ -36,4 +36,21 @@ static public function iso3166_alpha3($alpha2) { $map = array("AD" => "AND", "AE" => "ARE", "AF" => "AFG", "AG" => "ATG", "AI" => "AIA", "AL" => "ALB", "AM" => "ARM", "AN" => "ANT", "AO" => "AGO", "AQ" => "ATA", "AR" => "ARG", "AS" => "ASM", "AT" => "AUT", "AU" => "AUS", "AW" => "ABW", "AX" => "ALA", "AZ" => "AZE", "BA" => "BIH", "BB" => "BRB", "BD" => "BGD", "BE" => "BEL", "BF" => "BFA", "BG" => "BGR", "BH" => "BHR", "BI" => "BDI", "BJ" => "BEN", "BL" => "BLM", "BM" => "BMU", "BN" => "BRN", "BO" => "BOL", "BQ" => "BES", "BR" => "BRA", "BS" => "BHS", "BT" => "BTN", "BV" => "BVT", "BW" => "BWA", "BY" => "BLR", "BZ" => "BLZ", "CA" => "CAN", "CC" => "CCK", "CD" => "COD", "CF" => "CAF", "CG" => "COG", "CH" => "CHE", "CI" => "CIV", "CK" => "COK", "CL" => "CHL", "CM" => "CMR", "CN" => "CHN", "CO" => "COL", "CR" => "CRI", "CU" => "CUB", "CV" => "CPV", "CW" => "CUW", "CX" => "CXR", "CY" => "CYP", "CZ" => "CZE", "DE" => "DEU", "DJ" => "DJI", "DK" => "DNK", "DM" => "DMA", "DO" => "DOM", "DZ" => "DZA", "EC" => "ECU", "EE" => "EST", "EG" => "EGY", "EH" => "ESH", "ER" => "ERI", "ES" => "ESP", "ET" => "ETH", "FI" => "FIN", "FJ" => "FJI", "FK" => "FLK", "FM" => "FSM", "FO" => "FRO", "FR" => "FRA", "GA" => "GAB", "GB" => "GBR", "GD" => "GRD", "GE" => "GEO", "GF" => "GUF", "GG" => "GGY", "GH" => "GHA", "GI" => "GIB", "GL" => "GRL", "GM" => "GMB", "GN" => "GIN", "GP" => "GLP", "GQ" => "GNQ", "GR" => "GRC", "GS" => "SGS", "GT" => "GTM", "GU" => "GUM", "GW" => "GNB", "GY" => "GUY", "HK" => "HKG", "HM" => "HMD", "HN" => "HND", "HR" => "HRV", "HT" => "HTI", "HU" => "HUN", "ID" => "IDN", "IE" => "IRL", "IL" => "ISR", "IM" => "IMN", "IN" => "IND", "IO" => "IOT", "IQ" => "IRQ", "IR" => "IRN", "IS" => "ISL", "IT" => "ITA", "JE" => "JEY", "JM" => "JAM", "JO" => "JOR", "JP" => "JPN", "KE" => "KEN", "KG" => "KGZ", "KH" => "KHM", "KI" => "KIR", "KM" => "COM", "KN" => "KNA", "KP" => "PRK", "KR" => "KOR", "KW" => "KWT", "KY" => "CYM", "KZ" => "KAZ", "LA" => "LAO", "LB" => "LBN", "LC" => "LCA", "LI" => "LIE", "LK" => "LKA", "LR" => "LBR", "LS" => "LSO", "LT" => "LTU", "LU" => "LUX", "LV" => "LVA", "LY" => "LBY", "MA" => "MAR", "MC" => "MCO", "MD" => "MDA", "ME" => "MNE", "MF" => "MAF", "MG" => "MDG", "MH" => "MHL", "MK" => "MKD", "ML" => "MLI", "MM" => "MMR", "MN" => "MNG", "MO" => "MAC", "MP" => "MNP", "MQ" => "MTQ", "MR" => "MRT", "MS" => "MSR", "MT" => "MLT", "MU" => "MUS", "MV" => "MDV", "MW" => "MWI", "MX" => "MEX", "MY" => "MYS", "MZ" => "MOZ", "NA" => "NAM", "NC" => "NCL", "NE" => "NER", "NF" => "NFK", "NG" => "NGA", "NI" => "NIC", "NL" => "NLD", "NO" => "NOR", "NP" => "NPL", "NR" => "NRU", "NU" => "NIU", "NZ" => "NZL", "OM" => "OMN", "PA" => "PAN", "PE" => "PER", "PF" => "PYF", "PG" => "PNG", "PH" => "PHL", "PK" => "PAK", "PL" => "POL", "PM" => "SPM", "PN" => "PCN", "PR" => "PRI", "PS" => "PSE", "PT" => "PRT", "PW" => "PLW", "PY" => "PRY", "QA" => "QAT", "RE" => "REU", "RO" => "ROU", "RS" => "SRB", "RU" => "RUS", "RW" => "RWA", "SA" => "SAU", "SB" => "SLB", "SC" => "SYC", "SD" => "SDN", "SE" => "SWE", "SG" => "SGP", "SH" => "SHN", "SI" => "SVN", "SJ" => "SJM", "SK" => "SVK", "SL" => "SLE", "SM" => "SMR", "SN" => "SEN", "SO" => "SOM", "SR" => "SUR", "SS" => "SSD", "ST" => "STP", "SV" => "SLV", "SX" => "SXM", "SY" => "SYR", "SZ" => "SWZ", "TC" => "TCA", "TD" => "TCD", "TF" => "ATF", "TG" => "TGO", "TH" => "THA", "TJ" => "TJK", "TK" => "TKL", "TL" => "TLS", "TM" => "TKM", "TN" => "TUN", "TO" => "TON", "TR" => "TUR", "TT" => "TTO", "TV" => "TUV", "TW" => "TWN", "TZ" => "TZA", "UA" => "UKR", "UG" => "UGA", "UM" => "UMI", "US" => "USA", "UY" => "URY", "UZ" => "UZB", "VA" => "VAT", "VC" => "VCT", "VE" => "VEN", "VG" => "VGB", "VI" => "VIR", "VN" => "VNM", "VU" => "VUT", "WF" => "WLF", "WS" => "WSM", "YE" => "YEM", "YT" => "MYT", "ZA" => "ZAF", "ZM" => "ZMB", "ZW" => "ZWE"); return isset($map[$alpha2]) ? $map[$alpha2] : $alpha2 ; } + + /** + * Convert a float to the integer value, using BCMul if available. + * If BCMul is not available use the two-line cast method to avoid floating point precision issues + * + * @param float $input the input value + * @return int the integer value of the conversion + */ + static public function floatToInt($input) { + if (function_exists('bcmul')) { + return intval(bcmul($input, 100)); + } else { + $multiplied = round($input * 100); + return (int)$multiplied; + } + + } } diff --git a/README.markdown b/README.markdown index 6f2f8ff..aa57e2c 100644 --- a/README.markdown +++ b/README.markdown @@ -1,7 +1,7 @@ PHP API Library for Fat Zebra ============================== -Release 1.1.0 for API version 1.0 +Release 1.1.7 for API version 1.0 A PHP library for the [Fat Zebra](https://www.fatzebra.com.au) Online Payment Gateway (for Australian Merchants) Now supports recurring billing (subscriptions, plans, customers) @@ -36,7 +36,7 @@ Usage try { $gateway = new FatZebra\Gateway(USERNAME, TOKEN, TEST_MODE); - $purchase_request = new FatZebra\PurchaseRequest($_POST['amount'], $_POST['reference'], $_POST['name'], $_POST['card_number'], $_POST['card_expiry_month'] ."/". $_POST['card_expiry_year'], $_POST['card_cvv']); + $purchase_request = new FatZebra\PurchaseRequest($_POST['amount'], $_POST['reference'], $_POST['name'], $_POST['card_number'], $_POST['card_expiry_month'] ."/". $_POST['card_expiry_year'], $_POST['card_cvv'], null, 'AUD'); $response = $gateway->purchase($purchase_request); @@ -62,7 +62,7 @@ Usage try { $gateway = new FatZebra\Gateway(USERNAME, TOKEN, TEST_MODE); - $response = $gateway->token_purchase($_POST['token'], $amount, $reference); + $response = $gateway->token_purchase($_POST['token'], $amount, $reference, null, 'AUD'); $_SESSION['response'] = $response; header("Location: index.php");