Paypal NVP API con Codeigniter
Las tiendas online son uno de los productos más usados en desarrollo web, pero suele ser lo que más dolores de cabeza da debido al pago por tarjeta de crédito. Afortunadamente, Paypal ofrece la posibilidad de pagar mediante tarjeta de crédito. Para ello, Paypal dispone de una API NVP muy cómoda de usar.
Para los usuarios de Codeigniter existe una librería que nos facilita toda la tarea. En el controlador primero debemos indicar el SetExpressCheckout que prepara la transacción. Cuando aceptemos el OK de la llamada se redireccionará a Paypal para que el usuario pueda realizar la compra, que devolverá la llamada a una URL nuestra y en ese caso, cogiendo los datos devueltos por Paypal podremos confirmar la transacción:
define('PAYPAL_URL', 'https://www.sandbox.paypal.com/webscr&cmd=_express-checkout&token=');
class Demo extends Controller {
function Demo()
{
parent::Controller();
}
function index() {
$this->paypal_api_lib->add_nvp('RETURNURL', 'http://servidor/demo/ok');
$this->paypal_api_lib->add_nvp('CANCELURL', 'http://servidor/demo/cancel');
$this->paypal_api_lib->add_nvp('NOSHIPPING', '0');
$this->paypal_api_lib->add_nvp('ALLOWNOTE', '1');
$this->paypal_api_lib->add_nvp('SOLUTIONTYPE', 'Sole'); // esto es lo que no obliga a que se tenga que tener cuenta Paypal
$this->paypal_api_lib->add_nvp('LANDINGPAGE', 'Billing');
$this->paypal_api_lib->add_nvp('AMT', '69.00');
$this->paypal_api_lib->add_nvp('NOSHIPPING', '2');
$this->paypal_api_lib->add_nvp('HDRIMG', 'http://servidor/logo.gif');
$this->paypal_api_lib->add_nvp('CURRENCYCODE', 'EUR');
$this->paypal_api_lib->add_nvp('L_NAME0', 'Librito');
$this->paypal_api_lib->add_nvp('L_AMT0', '59.00');
$this->load->library('session');
$sesion = array('paypalAmount'=>'69.00');
$this->session->set_userdata($sesion);
if($this->paypal_api_lib->send_api_call('SetExpressCheckout')){
if (strtoupper($this->paypal_api_lib->nvp_data["ACK"]) =="SUCCESS") {
$token = urldecode($this->paypal_api_lib->nvp_data["TOKEN"]);
$payPalURL = PAYPAL_URL.$token;
header("Location: ".$payPalURL);
exit();
}
}
paypal_errors();
}
function ok() {
$this->load->library('session');
$this->paypal_api_lib->add_nvp('TOKEN', $_REQUEST['token']);
$this->paypal_api_lib->add_nvp('PAYERID', $_REQUEST['PayerID']);
$this->paypal_api_lib->add_nvp('PAYMENTACTION', 'Sale');
$this->paypal_api_lib->add_nvp('AMT', $this->session->userdata('paypalAmount'));
$this->paypal_api_lib->add_nvp('CURRENCYCODE', 'EUR');
$this->paypal_api_lib->add_nvp('IPADDRESS', $_SERVER['SERVER_NAME']);
if($this->paypal_api_lib->send_api_call('DoExpressCheckoutPayment')) {
var_dump($this->paypal_api_lib->nvp_data);
} else {
paypal_errors();
}
}
}
Interesante estudio sobre comparativa de sentencias en PHP5 que obtienen el mismo resultado, para conocer cual de ellas es la más rápida. Por ejemplo: es más rápido concatenar una cadena a una variable usando el punto (.) que incluyéndo la variable entre comillas dobles, para expresiones regulares es más rápido usar preg_match que eregi, es 8 veces más rápido usar explode que split. También es una buena referencia para saber como hacer lo mismo de distintas formas. Pero lo que más me ha sorprendido es que comparando con PHP4 las expresiones regulares se han vuelto más lentas (casi 7 veces más rápido en PHP4 que en PHP5), lo cual me hace pensar que o bien es debido a una mejora que completa las expresiones regulares, o antes no se hacÃan muy bien, porque ir a peor no tiene mucho sentido.
Ya hemos hablado en otras ocasiones sobre
Justo lo que estaba buscando, gracias! Lo que más me gusta de Codeigniter es la comunidad que hay…
Jonay, espero que te ayude, la verdad es que me volvà loco intentando entender cómo iba Paypal, pero gracias a esta librerÃa fue todo muy fácil
Saludos
Gracias por tan interesante información || Igualmente me gustarÃa invitar a las personas interesadas en Paypal y otras pasarelas de pago a que participen aportando sus comentarios en mi blog, para ello sólo tienen que visitar http://www.tudineroefectivo.com || Espero que la información que encuentren en mi blog les resulte interesante