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.
Creo que IPN podría ser la manera de resolver esto. O eso o el botón personalizado. Lo investigaré más a fondo ... –
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. –