Динамическое шифрование кнопки Paypal
Я разрабатываю сайт заказов с использованием PHP и Mysql. На последнем этапе пользователю предоставляются кнопки Paypal для оплаты сделанных им заказов. Итак, Имя элемента, Значение являются переменными. Эти значения являются переменными, я не могу использовать зашифрованную кнопку от Paypal. Мне придется использовать либо незашифрованную кнопку, либо зашифровать ее, прежде чем показывать ее пользователю.
Я хочу зашифровать его из соображений безопасности. Я хотел бы знать, как это сделать на моем сервере.
6 ответов
Может быть, вы можете попробовать поместить эти переменные во временную таблицу с уникальным идентификатором. затем используйте этот идентификатор для кнопок. запрашивать переменные из таблицы всякий раз, когда клиент нажимает кнопки 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="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>
Поле 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_htmlvariables.
Теперь теория, чтобы получить зашифрованное поле, хорошо зашифрованное, вам нужно подписать эти значения вашим сертификатом (сертификат x509) и вашим закрытым ключом, а затем вам необходимо зашифровать это подписанное сообщение с помощью открытого сертификата PayPal.
Переходя к практике, для этого вы можете (нужно) использовать следующие две функции PHP (часть расширения OpenSSL): openssl_pkcs7_sign и openssl_pkcs7_encrypt.
Я нашел эту последнюю часть очень сложной для настройки, поэтому я рекомендую вам скачать PHP SDK для PayPal здесь: https:// 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 шифрование кнопки каждый раз.
Однако этот метод неэффективен, я думаю, что было бы намного лучше использовать PayPal IPN. Есть много примеров и классов онлайн о том, как это сделать.
Не мог ли кто-нибудь с вашим адресом электронной почты PayPal выслать вам поддельный счет с просьбой указать названия продуктов по неправильным ценам? Если им придется изменить ваш js / html-код для отправки вам фиктивного счета-фактуры... они могут просто написать свой собственный (просто отправьте форму на "paypal.com/cgi-bin/webscr"). Все, что вам действительно нужно, это электронная почта продавца, верно?
Так почему все проблемы с шифрованием кнопок?