Динамическое шифрование кнопки Paypal

Я разрабатываю сайт заказа с помощью PHP & Mysql. На заключительном этапе пользователю предоставляются кнопки Paypal для оплаты Заказов, которые он сделал. Таким образом, имя элемента, значение являются переменными. Эти значения являются переменными, я не могу использовать зашифрованную кнопку из Paypal. Я должен использовать либо незашифрованную кнопку, либо зашифровать ее, прежде чем показывать ее пользователю.

Я хочу зашифровать его по соображениям безопасности. Я хотел бы знать, как это сделать на моем сервере.

возможно, вы могли бы попытаться поместить эти переменные во временную таблицу с уникальным идентификатором. затем используйте этот идентификатор для кнопок. запрашивая переменные из таблицы всякий раз, когда клиент нажимает кнопки PayPal. Я просто надеюсь, что понял ваше утверждение правильно xD

То, что вам нужно сделать, довольно сложно, во-первых, встроенные, зашифрованные кнопки PayPal имеют следующий макет:

<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="http://img.ruphp.com/php/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="http://img.ruphp.com/php/pixel.gif" width="1" height="1"> </form> 

Поле cmd указывает зашифрованную кнопку «Купить» (проверьте значения для кнопок, которые вы хотите создать), а зашифрованное поле является фактическим содержимым кнопки в следующем макете:

  cert_id=ZQCMJTZS27U4F cmd=_xclick business=contact@mybiz.com 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 

Обратите внимание, что они находятся в формате пары = значение, для полного описания здесь: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_html_Appx_websitestandard_htmlвариант&#x44B; .

Теперь, чтобы получить зашифрованное поле, хорошо зашифрованное, вам нужно подписать эти значения с вашим сертификатом (сертификат x509) и вашим личным ключом, тогда вам нужно зашифровать это подписанное сообщение с помощью публичного сертификата Paypal.

Перейдя к практике, для этого вы можете (нужно) использовать следующие две функции PHP (часть расширения OpenSSL): openssl_pkcs7_sign и openssl_pkcs7_encrypt.

Я нашел эту последнюю часть очень сложной для настройки, поэтому я рекомендую вам скачать PHP SDK для PayPal здесь: https: // http://www.x.com/ community / ppx / sdks # WPST и прямо здесь: https: // cms .paypal.com / cms_content / US / en_US / files / developer / PP_PHP_WPS_Toolkit.zip , этот SDK поставляется с классом EWPServices, который содержит метод encryptButton, который дает вам зашифрованную кнопку довольно легко; если вы хотите посмотреть на кости, посмотрите в класс PPCrypto, который предлагает вам метод signAndEncrypt, который дает вам только зашифрованную строку, необходимую для этого поля, и показывает вам процесс шифрования кнопки.

С вашего поста вы, кажется, очень смущены тем, что означает шифрование и к чему его применять. Какова модель угрозы? (т. е. как его можно подорвать).

Вы не должны ожидать, что paypal всегда будет обрабатывать заказ, отправленный в браузер клиента. Вы ДОЛЖНЫ проверить, что сделал Paypal.

Вы можете быть уверены в целостности заказа после того, как он покинет ваш сайт, например, добавив хеш заказа в номер заказа (и соль!), Который вы отправляете в Paypal. Это должно позволить вам проверить заказ без ссылки на PLU / сохраненный заказ (до тех пор, пока скрипт, обрабатывающий возврат из PayPal, знает соль).

Я разработал набор инструментов для интеграции PHP с PayPal Website Payments Standard .

Все проблемы, о которых вы упомянули, обрабатываются внутри классами-помощниками. Для упрощения настройки предусмотрена базовая конфигурация. Например, все переменные шифрования (ваш секретный ключ, открытый сертификат и т. Д.) И подлежат настройке. В статье подробно объясняется, как использовать классы.

PS: Подтверждение IPN реализуется вспомогательными классами.

Единственный способ сделать это – динамически запрашивать PayPal для шифрования кнопки каждый раз.

Однако этот метод неэффективен, я думаю, было бы намного лучше использовать IPN PayPal. Есть много примеров и классов в Интернете о том, как это сделать.

Не может ли кто-либо с вашим почтовым адресом в PayPal отправить вам фиктивный счет-фактуру, запрашивая названия продуктов по неправильным ценам? Если они собираются решить проблему изменения кода js / html, чтобы отправить вам фиктивный счет-фактуру … они могли бы просто написать свои собственные (просто отправить форму «paypal.com/cgi-bin/webscr»). Все, что вам действительно нужно, это право электронной почты продавца?

Так почему все проблемы с зашифровкой кнопок?