developer - paypal/rest-api-sdk-php laravel
Cifrado dinámico del botón de Paypal (6)
quizás podrías intentar 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 tu declaración xD
Estoy diseñando un sitio de pedidos usando PHP y 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.
Deseo encriptarlo por razones de seguridad. Me gustaría saber cómo hacerlo en mi servidor.
La única manera de hacerlo es consultar dinámicamente 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.
Según su publicación, parece muy confundido acerca de lo que significa 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 una vez que abandona su sitio, por ejemplo, agregando un hash del pedido al número de pedido (¡y un vale!) Que 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).
Desarrollé un kit de herramientas de integración de PHP con el Estándar de pagos del sitio web de PayPal .
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 de IPN es implementada por las clases de ayuda.
Lo que debe hacer es bastante complejo, primero, los botones encriptados de intro, paypal tienen el siguiente diseño:
<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 codificado (compruebe los valores de los botones que desea crear) y el campo cifrado es el contenido real del botón en el siguiente diseño:
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
Tenga en cuenta que estos están en el formato pair = value, para una 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, debe firmar estos valores con su certificado (certificado x509) y su clave privada, luego debe 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 le 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.
¿No podría alguien con su dirección de correo electrónico de PayPal enviarle una factura falsa, pidiendo nombres de productos a los 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 cifrar botones?