Динамическое шифрование кнопки Paypal
Я проектирую сайт заказа с помощью PHP и Mysql. На заключительном этапе пользователю предоставляются кнопки Paypal для оплаты Заказов, которые он сделал. Таким образом, имя элемента, значение являются переменными.
Эти значения являются переменными, я не могу использовать зашифрованную кнопку из Paypal. Я должен использовать либо незашифрованную кнопку, либо зашифровать ее, прежде чем показывать ее пользователю.
Я хочу зашифровать его по соображениям безопасности. Я хотел бы знать, как это сделать на моем сервере.
Ответы
Ответ 1
возможно, вы могли бы попытаться поместить эти переменные во временную таблицу с уникальным идентификатором. затем используйте этот идентификатор для кнопок. запрашивая переменные из таблицы всякий раз, когда клиент нажимает кнопки PayPal. Я просто надеюсь, что я понял ваше утверждение правильно xD
Ответ 2
Что вам нужно сделать, это довольно сложно, во-первых, кнопки ввода, зашифрованные 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
[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
Обратите внимание, что они в формате "пара = значение", для полной ссылки смотрите здесь: 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), посмотрите здесь: https://cms.paypal.com/us/cgi-bin/?cmd=_render. -компонент & content_ID = разработчик /e_howto_html_encryptedwebpayments # id08A3I0N30Y4
Ответ 3
Из вашего сообщения вы, кажется, очень смущены тем, что означает шифрование и к чему его применять. Какова модель угрозы? (т.е. как его можно подорвать).
Нельзя ожидать, что PayPal всегда будет обрабатывать заказ, отправленный в клиентский браузер. Вы ДОЛЖНЫ проверить, что сделал Paypal.
Вы можете быть уверены в целостности заказа после того, как он покинет ваш сайт, например. добавив хэш порядка в номер заказа (и соль!), который вы отправляете в Paypal. Это должно позволить вам проверить заказ без ссылки на PLU/сохраненный заказ (при условии, что обработка script возвращает от paypal знает соль).
Ответ 4
Я разработал инструментарий PHP с пакетом PayPal Website Payments Standard.
Все проблемы, о которых вы упомянули, обрабатываются внутри вспомогательными классами. Для упрощения настройки предусмотрена базовая конфигурация. Например, все переменные шифрования (ваш секретный ключ, открытый сертификат и т.д.) И подлежат настройке. В статье подробно объясняется, как использовать классы.
PS: Подтверждение IPN реализуется вспомогательными классами.
Ответ 5
Единственный способ сделать это - динамически запрашивать PayPal для шифрования кнопки каждый раз.
Однако этот метод неэффективен, я думаю, было бы намного лучше использовать IPN PayPal. Есть много примеров и классов в Интернете о том, как это сделать.
Ответ 6
Не может ли кто-либо с вашим почтовым адресом в PayPal отправить вам фиктивный счет, запрашивая названия продуктов по неверным ценам? Если они собираются решить проблему изменения кода js/html, чтобы отправить вам фиктивный счет-фактуру... они могли бы просто написать свои собственные (просто отправить форму "paypal.com/cgi-bin/webscr" ). Все, что вам действительно нужно, это право электронной почты продавца PayPal?
Итак, почему все проблемы с зашифровкой кнопок?