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.







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 :|