Dziś jest piątek, 21 listopada 2008 roku (z kalendarza...)

Authorize.net

Icon

18.01.2006, 17:26

Webmaster

Komentarze (5)

Powrót

Authorize.net to amerykańska usługa udostępniająca specjalną bramkę płatności on-line. Za jej pomocą można obsługiwać wszystkie popularne karty kredytowe oraz wykonywać transakcje opłat za towar, a przy tym łatwa do zintegrowania ze stroną WWW. Jeśli chodzi o PHP, jedyną niezbędną biblioteką jest cURL z obsługą SSL'a.

Okazuje się jednak, że integracja z bramką nie jest taka łatwa. Dokumentacja jest dosyć dziwna i trzeba spędzić z nią nieco czasu, aby połapać się, co do czego. Ponadto problem może sprawić sam cURL. W ostatnich dniach kończę pewien projekt zaczęty jeszcze we wrześniu, gdyż dopiero teraz klient wykupił sobie konto na authorize.net i przez to tak późno mogłem przystąpić do implementowania płatności na jego stronie. Niestety, zmarnowałem chyba tydzień na próby połączenia. Najpierw okazało się, że na serwerze nie działa cURL. Potem, gdy działał, też nie działał, bo się zawieszał przy próbie łączenia się z czymkolwiek :).

Skrypt zaczął prawidłowo działać dzisiaj, lecz pojawił się problem z jego wiekiem. Cudem zdobyłem go z jakiejś strony, ale okazał się być przestarzały i trzeba było go trochę poprzerabiać. Z racji takiej, że niesamowicie ciężko jest trafić na jakiś sensowny skrypt ilustrujący w PHP podłączenie do authorize.net metodą AIM, podrzucam mój kod. Najpierw biblioteka (pobiera tylko podstawowe dane i nie obsługuje E-CHECK):

<?php
 
	class paymentOnline
	{
		private $login;
		private $password;
		private $test;
		
		private $cardNumber;
		private $expDate;
		private $amount;
		private $firstName;
		private $lastName;
	
		public function __construct($login, $password, $test = FALSE)
		{
			$this -> login = $login;
			$this -> password = $password;
			$this -> test = $test;
		} // end __construct();
		
		public function setCardData($cardNumber, $expDate)
		{
			$this -> cardNumber = $cardNumber;
			$this -> expDate = $expDate;		
		} // end setCardData();
		
		public function setAmount($amount)
		{
			$this -> amount = $amount;		
		} // end setAmount();
		
		public function setCustomerInfo($firstName, $lastName)
		{
			$this -> firstName = $firstName;
			$this -> lastName = $lastName;
		} // end setCustomerInfo();
		
		public function sendTransaction()
		{
			// Connect to authorize.net
			$ch=curl_init('https://secure.authorize.net/gateway/transact.dll'); 
 
			$data = array(
				'x_version=3.1',
				'x_method=CC',
				'x_login='.urlencode($this -> login),
				'x_password='.$this -> password,
				'x_delim_data=TRUE',
				'x_delim_char=|',
				'x_encap_char=',
				'x_type=AUTH_CAPTURE',
				'x_amount='.$this -> amount,
				'x_first_name='.$this -> firstName,
				'x_last_name='.$this -> lastName,
				'x_card_num='.$this -> cardNumber,
				'x_exp_date='.$this -> expDate
			);
			if($this -> test == TRUE)
			{
				$data['x_test_request'] = 'TRUE';
			}
 
			curl_setopt ($ch, CURLOPT_POST, 1);
			curl_setopt($ch, CURLOPT_HEADER, 0);
			curl_setopt($ch, CURLOPT_POSTFIELDS, implode('&',$data));
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
			$answer = curl_exec($ch);
			
			if($answer[0] == '1')
			{
				return 1;	
			}
			else
			{
				throw new Exception($answer[1], $answer[3]);
			}
		} // end sendTransaction();	
	}
?>

A oto przykładowe użycie pracujące w trybie testowym i używające testowego numeru karty kredytowej:

<?php
	require('./gateway.php');	
	try
	{
		$gw = new paymentOnline('twoj_login', 'twoje_haslo', true);
		$gw -> setCardData('5424000000000015', '12/06');
		$gw -> setAmount('56.30');
		$gw -> setCustomerInfo('John', 'Brown');
		
		$gw -> sendTransaction();
		echo 'Transakcja przebiegla poprawnie';
		
	}
	catch(Exception $exception)
	{
		echo 'Blad #'.$exception -> getCode().': '.$exception -> getMessage().'<br/>';
	}
?>

Oczywiście aby uruchomić ten skrypt, należy mieć własne konto na authorize.net.

Powrót

Przypisy:

Komentarze

Napisał NuLL w środę, 18 stycznia 2006 o 21:34

Z moich doswidczen wynika ze wiekszosc bramek tego typu nalezy do bardzo upierdliwych rzeczy - tu jest o tyle latwo ze jest CURL o ktorym troche wiem. Ale w niektorych bramkach autoryacja przebiego via URL :D - niestety te urle maja dziwny schemat i naprawde trudno je miejscami skumac :|

Napisał hwao w środę, 18 stycznia 2006 o 22:12

najlepsze jest fsockopen + xml :D

Napisał shw w środę, 18 stycznia 2006 o 23:00

wybie blad przy echo w przykladowym skrypcie - tak mi sie jakos w oczy rzucil nadprogramowy nawias.

Napisał Zyx w czwartek, 19 stycznia 2006 o 13:06

Authorize.net też daje możliwość łączenia się przez URL.

Napisał bela_666 w sobotę, 21 stycznia 2006 o 10:46

Heh, ja ostatnio miałem nieprzyjemność pracy z netbilling.com, też podobna usługa. W dokumentacji było napisane, że trzeba wysłać dane postem, a w praktyce getem bylo trzeba.

Strona 1 z 1 :: 1

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2008 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia