Pagos Electrónicos
Implementación y Desarrollo
Sobre mi
● Ingeniero en Sistemas (UNAPEC)
● Msc. Electronic Commerce
(University of Westminster)
● 1ra promoción Técnico en
Multimedia (ITLA)
● 15 años de experiencia en el
área web
René Olivo
rene@minet.com.do
@rene_olivo
Objetivos
● Demostrar la facilidad de implementar métodos de
pagos en plataformas de comercio electrónico.
● Analizar los distintos métodos de integración de las
plataformas de pagos para poder elegir la herramienta
adecuada para un proyecto determinado.
Métodos de Pagos que veremos hoy
● Cardnet
● Visanet
● Paypal
● Authorize
Métodos de pagos locales
Ventajas
● Faciles de implementar.
● Aceptan tarjetas de débito locales.
● Buen soporte para empresas y personas sin
experiencia.
Desventajas
● Interfaces poco agradables y no se pueden
customizar.
● No ofrecen métodos de confirmación de
pago.
● No poseen sandboxes permanentes.
● Costo elevado para microempresas.
Flujo de pago
Cardnet
https://www.cardnet.com.do
Características
● Soporta método integrado de pago.
https://clecto.com.do/carrito/
Método de pago integrado
var inputs = [
'<h4>Número de Tarjeta:</h4>',
'<input name="CredicardNumber" value="4234567842345678">',
'<h4>Expira (YY/MM):</h4>',
'<input name="expdate_year" value="16" size="2"> / ',
'<input name="expdate_month" value="06" size="2">',
'<h4>CVV / CVC:</h4>',
'<input name="CreditVerificationValue" value="678" size="3">'
];
$('form[method=post][enctype]').prepend( inputs.join( '' ) );
Visanet
http://visanet.com.do
Características
● Soporta método integrado a través de SOAP
(yay!).
● Posibilidad de cancelar transacciones a
través de HTTP POST o SOAP.
https://www.paragourmet.com/index.php?route=checkout/confirm
SOAP
https://github.com/vpulim/node-soap
(Buena Suerte)
Recomendaría el uso de
métodos de pagos locales?
Sí.
Métodos de Pago
Internacionales
Ventajas
● Poseen distintas formas de integración.
● Facilitan SDKs para la implementación de
métodos de integración más complejos.
● Promueven el uso de SandBoxes para hacer
pruebas.
Paypal
https://developer.paypal.com/
https://sandbox.paypal.com/
Características
● Variedad de métodos de pagos:
○ Buy Now
○ Add to Cart
○ Custom Cart
○ Payment Pro
Buy Now
https://github.com/reneolivo/rent-a-coder/tree/dev/paypal/buy-now
https://developer.paypal.com/docs/classic/paypal-payments-standard/integration-
guide/Appx_websitestandard_htmlvariables/#id08A6HF00TZS
Buy Now Params
*business el email de la empresa
*cmd el tipo de checkout
*item_name nombre del producto
*currency_code USD, DOP, etc.
*amount el precio
quantity La cantidad
return la URL a retornar
rm Método de retorno (0 GET, 1 GET params, 2
POST)
cancel_return la URL cuando se cancela la transacción
Instant Payment Notifications (IPN)
● Más confiable que usar notify_url.
● Reenvía el mensaje hasta que se confirme su
recepción.
https://developer.paypal.
com/docs/classic/ipn/gs_IPN/
Procesar IPNs
router.post('/payment-confirmation', function(req, res) {
req.body.cmd = '_notify-validate';
curl.request({
url : 'https://www.sandbox.paypal.com/cgi-bin/webscr',
method : 'POST',
data : req.body
}, function response(err, response, headers) {
//VALIDAR ERRORES
res.send(200, '');
//ENVIAR EMAIL DE CONFIRMACION
}
);
});
Custom Cart
https://github.com/reneolivo/rent-a-coder/tree/dev/paypal/custom-cart
https://www.paypal.com/cgi-bin/webscr?cmd=p/pdn/howto_checkout-outside
Authorize.net
https://developer.authorize.net/sandbox/
https://sandbox.authorize.net/
Características
● SDK oficiales para varios lenguajes
● Permite la realización de pagos recurrentes.
● Customer Information Manager (CIM)
○ Datos del usuario
○ Tarjetas de créditos
○ Cuentas bancarias
○ Direcciones de envío
○ Direcciones de pago
Customer Information Manager (CIM)
● Simplifica los deberes y cumplimientos para
ser PCI Complient.
● Almacena información sensible en los
servidores de Authorize.
Flujo de información
Información cruda1
Validación e inserción2
Información
procesada
3
Confirmación de
recepción y ID de
la data
4
Actualización de la
data original
5
Confirmación6
Authorize.net CIM Hello World
var secrets = require( '../../data/secrets' );
var Authorize = require( 'auth-net-cim' );
var auth = new Authorize({
api : secrets.authorize.loginId,
key : secrets.authorize.transactionKey,
sandbox : true
});
Authorize.net CIM Hello World
auth.createCustomerProfile({
merchantCustomerId : '12345678',
email : 'test@example.com',
description : 'this is a test'
}, function(err, response) {
console.log(err, response);
});
Authorize.net CIM Hello World
null
{ messages:
{ resultCode: 'Ok',
message: { code: 'I00001', text: 'Successful.' } },
customerProfileId: 27289360,
customerPaymentProfileIdList: {},
customerShippingAddressIdList: {},
validationDirectResponseList: {}
}
Demo
Link:
http://107.170.180.166:3000/
Tarjetas de prueba:
http://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm
Creación de un Cliente
auth.createCustomerProfile({
merchantCustomerId : '12345678',
email : 'test@example.com',
description : 'this is a test'
}, callback);
Creación de una Dirección
auth.createCustomerShippingAddress({
customerProfileId: '12345678',
shippingAddress: new Authorize.ShippingAddress({
firstName : 'Bob',
lastName : 'Smith',
address : '123 Sesame St',
city : 'Gainesville',
state : 'FL',
zip : 32601,
country : 'us'
})
}, callback);
Creación de una Cuenta Bancaria
auth.createCustomerPaymentProfile({
customerProfileId : '12345678',
paymentProfile : {
customerType : 'business',
payment : new Authorize.Payment({
bankAccount : new Authorize.BankAccount({
accountType : 'businessChecking',
routingNumber : '121042882',
accountNumber : '123456789123',
nameOnAccount : 'Jane Doe',
bankName : 'Pandora Bank'
})
})}});
Creación de una Tarjeta de Pago
auth.createCustomerPaymentProfile({
customerProfileId : '12345678',
paymentProfile : {
customerType : 'individual',
payment : new Authorize.Payment({
creditCard : new Authorize.CreditCard({
cardNumber : '4111111111111111',
expirationDate : '2012-10',
cardCode : '111'
})
})}});
Creación de una Transacción
auth.createCustomerProfileTransaction(
'AuthCapture', /* AuthOnly, CaptureOnly, PriorAuthCapture */
{
amount: 56.01,
tax: {amount: 12.44, name: 'State Tax', description : 'FL'
customerShippingAddressId : '123',
customerProfileId : '123',
customerPaymentProfileId : '123',
order: {
invoiceNumber : 1337
}
}, callback)
Q&A
Retos
Crear un shopping
cart usando Paypal
Add to Cart
Usar Paypal
Payment Pro en vez
de Authorize.net
CIM
Implementar
sistema de
reservación de
programadores
Muchas gracias!

Pagos electrónicos