2010-11-05 17 views
16

Estoy diseñando un sitio de pedido usando PHP & Mysql. En la etapa final, al usuario se le otorgan los botones de Paypal para pagar los Pedidos que ha realizado. Entonces, el Nombre del Artículo, el Valor son variables. Estos valores son variables, no puedo usar un botón encriptado de Paypal. Tendré que usar un botón no encriptado o encriptarlo antes de mostrárselo al usuario.Cifrado de botón de Paypal dinámico

Deseo encriptarlo por razones de seguridad. Me gustaría saber cómo hacerlo en mi servidor.

Respuesta

2

quizás podría tratar de poner esas variables en una tabla temporal con una identificación única. luego usa esa identificación para los botones. consultar las variables de la tabla cada vez que el cliente haga clic en los botones de PayPal. Solo espero haber entendido bien su declaración xD

1

La única manera de hacerlo es consultar dinámicamente a PayPal para cifrar el botón cada vez.

Sin embargo, este método no es eficiente, creo que sería mucho mejor usar PayPal IPN. Hay muchos ejemplos y clases en línea sobre cómo hacer esto.

+0

Creo que IPN podría ser la manera de resolver esto. O eso o el botón personalizado. Lo investigaré más a fondo ... –

+2

Nota: IPN verifica después de los pagos, por lo que aún tendrá casos en los que reciba un pago manipulado. A pesar de que no obtienen el producto, parece un poco desordenado porque habrá manipulado pagos que se le enviarán de vez en cuando. –

29

Lo que hay que hacer es bastante compleja, en primer lugar, la introducción, botones de paypal cifrados tienen la siguiente distribución:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
<input type="hidden" name="cmd" value="_s-xclick"> 
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIIEQYJKo...Encrypted stuff...IF5ioje8JH0LAA+5U7P+tabAMOL37k=-----END PKCS7-----"> 
<input type="image" src="https://www.paypalobjects.com/es_XC/MX/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal, la forma más segura y rápida de pagar en línea."> 
<img alt="" border="0" src="https://www.paypalobjects.com/es_XC/i/scr/pixel.gif" width="1" height="1"> 
    </form> 

El campo cmd indica un botón Comprar ahora cifrada (comprobar los valores de los botones que desee crear), y el campo encriptado es el contenido real del botón en la siguiente distribución:

cert_id=ZQCMJTZS27U4F 
    cmd=_xclick 
    [email protected] 
    item_name=Handheld Computer 
    item_number=1234 
    custom=sc-id-789 
    amount=500.00 
    currency_code=USD 
    tax=41.25 
    shipping=20.00 
    no_note=1 
    cancel_return=http://www.company.com/cancel.htm 

Nota, éstos están en el formato de par = valor, para una mirada referencia completa aquí: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlvariables.

Ahora la teoría, para obtener el campo encriptado, bien encriptado, necesita firmar estos valores con su certificado (certificado x509) y su clave privada, entonces necesita encriptar este mensaje firmado con el certificado público de PayPal.

Yendo a la práctica, para hacerlo puede (necesita) utilizar las siguientes dos funciones PHP (parte de la extensión OpenSSL): openssl_pkcs7_sign y openssl_pkcs7_encrypt.

Encontré esta última parte muy difícil de configurar, por lo que le recomiendo que descargue el PHP SDK para PayPal disponible aquí: https: // www.x.com/community/psx/sdks#WPST y directamente aquí: https://cms.paypal.com/cms_content/US/en_US/files/developer/PP_PHP_WPS_Toolkit.zip , este SDK viene con la clase EWPServices que contiene el método encryptButton que te da el botón encriptado bastante fácil; si desea ver los huesos, busque en la clase PPCrypto que le ofrece el método signAndEncrypt que le proporciona solo la cadena encriptada que necesita para el campo y le muestra el proceso de encriptación del botón.

+2

Por cierto, si no sabe cómo obtener su certificado y su clave privada (y/o el certificado de Paypal), mire aquí: https://cms.paypal.com/us/cgi-bin/?cmd= _render-content & content_ID = developer/e_howto_html_encryptedwebpayments # id08A3I0N30Y4 – Rafael

+0

Este tutorial también es útil: http://www.stellarwebsolutions.com/en/articles/paypal_button_encryption_php.php – curtisblackwell

+5

La mejor solución. Debe ser marcado como respuesta. En realidad, le dice cómo cifrar de forma dinámica los botones de PayPal. –

4

Según su publicación, parece muy confundido acerca de qué es el cifrado y a qué se lo aplica. ¿Cuál es el modelo de amenaza? (es decir, cómo se puede subvertir).

No hay forma de que espere que PayPal siempre procese el pedido que envió al navegador del cliente. DEBE verificar lo que procesó Paypal.

Puede estar más seguro de la integridad del pedido después de que abandone su sitio, p. agregando un hash del pedido al número de orden (¡y una sal!) lo envía a Paypal. Esto debería permitirle verificar el pedido sin referencia al PLU/orden almacenada (siempre que el script que procesa el retorno desde PayPal conozca la sal).

+0

Brillante. No pensé en esto cuando publiqué esta pregunta que se me cerró (http://stackoverflow.com/q/14489512/105539). Así que simplemente use la variable 'personalizada' y, entre otras cosas, puede que necesite poner allí, agregue como md5 ($ sSalt. $ SProduct. $ SPrice) y asegúrese de que se alineen en el proceso de IPN. – Volomike

+1

Esta no es la solución que el solicitante está buscando. Probablemente ya esté haciendo esto. El motivo de un botón encriptado sería, en primer lugar, reducir en gran medida la amenaza al hacer que sea muy difícil enviar pagos manipulados en primer lugar. –

2

Desarrollé un PHP integration toolkit with PayPal Website Payments Standard.

Todos los problemas que mencionas aquí se manejan dentro de las clases de ayuda. Se proporcionan algunas configuraciones básicas para una fácil configuración. Por ejemplo, todas las variables de cifrado (su clave privada, certificado público, ...) y sujeto a configuración. El artículo explica en detalles cómo usar las clases.

PD: Solo la confirmación IPN es implementada por las clases de ayuda.

0

¿No podría nadie con su dirección de correo electrónico de PayPal enviarle una factura falsa, pidiendo nombres de productos a precios incorrectos? Si van a tomarse la molestia de cambiar su código js/html para enviarle una factura falsa ... podrían simplemente escribir la suya (solo un formulario enviado a 'paypal.com/cgi-bin/webscr'). Todo lo que realmente necesita es el correo electrónico de paypal del vendedor, ¿verdad?

Entonces, ¿por qué todo el problema de encriptar botones?

+0

Cualquier persona puede presionar la tecla 'F12' en la página de pago en su navegador, luego edite el HTML según sea necesario. Bajar la cantidad es obvio, y a menos que compruebe si hay una coincidencia antes del envío (recomendado por PayPal), la han abaratado. Incluso si detectara la discrepancia, tendrá que disputar con el cliente y probablemente le reembolsará el dinero. Con los botones encriptados, se evita que toda la información esencial se altere, y en sus preferencias de PayPal, solo puede permitir botones encriptados, lo que previene sus escenarios. – Patanjali