Está en la página 1de 8

IPN Paypal – Retorno de Variables a Asp.

net – Vb

Fuente: http://elrinconderaydiaz.blogspot.com.es/2012/04/ipn-paypal-retorno-de-variables-aspnet.html

Después de tanto tiempo he logrado recuperar las variables que retornan a mi Website después de un Pago hecho con Paypal. Voy a
explicar cómo logramos nuestro objetivo:

Ipn Paypal: La Notificación de Pago Instantanea, es una funcionalidad muy útil con la cual podemos interactuar con nuestra propia
aplicación. Básicamente, nos da la posibilidad de tomar decisiones en el caso que el pago haya sido confirmado o bien ejecutar
determinadas rutinas en nuestro programa si el pago no fue aceptado.

Para caso de ejemplo vamos a mutilizar una herramienta de prueba que nos da Paypal, llamada Sandbox, donde podemos crear
cuentas de prueba y simular un caso de compra venta con dichas cuentas, claro está, con dinero ficticio

Pasos para configurar IPN

1. Ingresamos al siguiente link https://developer.paypal.com/us/cgi-bin/ . Si no tenemos una cuenta Sandbox, creamos una. Al
finalizar la creación de la cuenta nos llegará un email a nuestra cuenta de correo para dándonos la bienvenida a Sandbox. En mi
caso, ya tengo una cuenta creada, así que procedo a Loguearme.
Nota: Tratar de evitar que la cuentas de correo y password sean las mismas de nuestra cuenta paypal, ya que si entregas estas
credenciales a otra persona, tendrá acceso a tu cuenta Paypal

2. Ya dentro de Sandbox vemos un Panel de opciones al lado izquierdo de la página. Ingresamos a la Opción Test Accounts. Aquí es
donde crearemos nuestras cuentas de Prueba. Hacemos clic en “New Test Account: Preconfigured”
Nota: Es importante tomar nota del password autogenerado, para poder ingresar posteriormente a las cuentas de prueba

Primero creamos una cuenta Personal (cliente). Para ello elegimos la opción Buyer Aquí ingresamos los datos
necesarios. El email lo dejamos igual, ya que Sandbox, generará una cuenta email aleatoria no real. En mi caso, como
hará pruebas, en el campo Account Balance coloqué 5000 dólares de saldo. Hacemos clic en Create Account
3. Ahora seguimos el PASO 2, y nuevamente creamos una cuenta, pero esta vez Cuenta Business (Opción Seller). Clic en Create
Account

4. Ahora nuestro Panel principal debería quedar de la siguiente forma:


En círculos estoy identificando los tipos de cuentas.
5. Para mi ejemplo he creado una aplicación en Asp.net 2005 – Vb, con la que envio datos a Paypal, y luego recepciono las variables.
Para ellos vamos a crear dos páginas:
La primera página tendrá la siguiente forma:

Y su codeBehind es el siguiente:
Partial Class paypal_sendPaypal
Inherits System.Web.UI.Page

Protected Sub Button1_Click(ByVal sender As Object, ByVal eAs System.EventArgs) Handl


es Button1.Click
Dim item As String = "Lapiz"
Dim link As String = "https://www.sandbox.paypal.com/cgi-
bin/webscr?cmd=_xclick&business=raydia_1334695546_biz@misitio.com&item_name=" + item
+ "&amount=" + CStr(50.5)
+"&no_shipping=1&item_number=Feb2012004563" ' Response.Redirect(link)
End Sub
End Class

Con este código, le indico a Paypal (Sandbox): la cuenta business (quien vende), el ítem(articulo), el amount(precio)
y ítem_number (código del articulo)

La 2da página (para mi ejemplo) es una Página en blanco que al recibir los datos de PayPal (Sandbox), enviará un email a mi cuenta
de correo (el manejo de la información recibida, depende de cada necesidad) con todos los datos recibidos

Muestro el codeBehind: ipn.aspx.vb


Nota: Esta clase la da Paypal, solo hay que adaptarla a lo que necesitamoshttps://cms.paypal.com/mx/cgi-bin/?cmd=_render-
content&content_ID=developer/library_code_ipn_code_samples

Imports System.Net
Imports System.IO
Imports Capa_negocio
Partial Class paypal_ipn
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e AsSystem.EventArgs) Handles M
e.Load

'Aqui definimos de quein vamos a recibir valores de Paypal o Sandbox. Para este
ejemplo usaremos la variable strSandbox
Dim strSandbox As String ="https://www.sandbox.paypal.com/cgi-bin/webscr"
Dim strLive As String = "https://www.paypal.com/cgi-bin/webscr"

Dim req As HttpWebRequest =CType(WebRequest.Create(strSandbox), HttpWebRequest) '


creamos el request

'Set values for the request back


req.Method = "POST"
req.ContentType = "application/x-www-form-urlencoded"
Dim Param() As Byte =
Request.BinaryRead(HttpContext.Current.Request.ContentLength)
Dim strRequest As String = Encoding.ASCII.GetString(Param)

strRequest = strRequest + "&cmd=_notify-validate" ' hasta aqui ya tenemos


recuprados los valores
Dim x As String = strRequest
req.ContentLength = strRequest.Length

'for proxy
'Dim proxy As New WebProxy(New System.Uri("http://url:port#"))
'req.Proxy = proxy

'Send the request to PayPal and get the response


Dim streamOut As StreamWriter = NewStreamWriter(req.GetRequestStream(),
Encoding.ASCII)
streamOut.Write(strRequest)
streamOut.Close()
Dim streamIn As StreamReader
= NewStreamReader(req.GetResponse().GetResponseStream())
Dim strResponse As String = streamIn.ReadToEnd()

Dim objEmail As New clsEmail 'clase personalizada para envio de correos (propia)
Dim SUBJECT As String

If strResponse = "VERIFIED" Then ' si el proceso terminó correctamente


SUBJECT = "Confirmación Paypal - BIEN - " & Date.Now
Dim mensaje As String = ""
Try
'el strRequest, viene en un formato var=valor&var1=valor1....Por tanto lo
descompongo con 2 SPLIT
'El primero para separar por el caracter "&" : var=valor
'El segundo para separar por el caracter "=" :
'Como las variables vienen de una url, vienen con una codificacion que no
es totalmente legible
'(ejemplo @ se representa por %40, ect) utilizamos HttpUtility.UrlDecode
para decodificar los datos extraidos

Dim descomponer() As String = strRequest.Split("&")


For i As Integer = 0 To descomponer.Length - 1
Dim linea As String = descomponer(i)
Dim dividir() As String = linea.Split("=")
mensaje = mensaje & dividir(0) & vbTab & ":"& vbTab &
HttpUtility.UrlDecode(dividir(1)) & vbCrLf
Next
objEmail.SendMail(objEmail.emailFrom, objEmail.mailPruebas, "",
SUBJECT, "Paypal está OK - " & vbCrLf & mensaje, _
False, System.Net.Mail.MailPriority.High)
Catch ex As Exception
Throw
End Try

ElseIf strResponse = "INVALID" Then


SUBJECT = "Confirmación Paypal - MAL - " & Date.Now
Try
objEmail.SendMail(objEmail.emailFrom, objEmail.mailPruebas, "",
SUBJECT, "Paypal está INVALIDO", _
True, System.Net.Mail.MailPriority.High)
Catch ex As Exception
Throw
End Try

'log for manual investigation


Else
SUBJECT = "Confirmación Paypal - NO SE - " & Date.Now
Try
objEmail.SendMail(objEmail.emailFrom, objEmail.mailPruebas, "",
SUBJECT, "Paypal está - NINGUNA", _
True, System.Net.Mail.MailPriority.High)
Catch ex As Exception
Throw
End Try
'Response wasn't VERIFIED or INVALID, log for manual investigation
End If
streamIn.Close()
End Sub

End Class

6. Ahora que ya tenemos nuestras páginas, vamos a configurar la Url de Retorno nuestra cuenta Business para que al finalizar un Pago
PayPal, las variables retornen a nuestra página ipn.aspx. Para ello seleccionamos la cuenta Business y hacemos clic en ENTER
SANSBOX TEST SITE

7. Dentro de nuestra cuenta Business, hacemos clic en Perfil


8. En Perfil, hacemos clic en la opción Preferencias de Notificación de Pago Instantanea

9. Hacemos clic en Editar Configuración, y escribimos la dirección url de nuestra página IPN.aspx. También hacemos clic en Recibir
mensajes IPN. Clic en Guardar

10. Ok, hasta aquí ya tenemos configurada nuestra cuenta para que envie mensajes a nuestra página Ipn.aspx. Ahora probamos
nuestra Aplicación
11. Al revisar mi cuenta de correo Eléctrónico, llegó esto:
Espero haber sido de ayuda. Saludos

También podría gustarte