Кнопка PayPal с параметром 'min_amount' AND 'set_customer_limit'
Я создал не размещенную PayPal-Button с текстовым вводом, чтобы пользователи определяли сумму, которую нужно заплатить. Это кнопка подписки.
Теперь проблема в том, что должна быть минимальная сумма для оплаты, скажем 101 (CHF - швейцарские франки).
В соответствии с документами HTML-переменные PayPal у меня есть возможность добавить следующие скрытые входы в мою форму, чтобы заставить ее работать.
-
set_customer_limit
со значением max_limit_own
-
min_amount
со значением 101
Работает set_customer_limit
, но не min_amount
. Любая сумма принимается.
Я открыл билет при технической поддержке, но до сих пор не ответил.
Здесь моя форма:
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_xclick-subscriptions">
<!-- //... -->
<input type="hidden" name="cancel_return" value="mydomain.com/cancel">
<input type="hidden" name="return" value="mydomain.com/paid">
<input type="hidden" name="token" value="<?php echo $token; ?>">
<input type="hidden" name="src" value="1">
<input type="text" name="a3" value="101.00">
<input type="hidden" name="p3" value="1">
<input type="hidden" name="t3" value="Y">
<input type="hidden" name="currency_code" value="CHF">
<input type="hidden" name="bn" value="PP-SubscriptionsBF:btn_subscribeCC_LG.gif:NonHostedGuest">
<!-- the concerned inputs -->
<input type="hidden" name="set_customer_limit" value="max_limit_own">
<input type="hidden" name="min_amount" value="101">
<!-- ---- -->
<input type="image" src="https://www.paypalobjects.com/de_DE/CH/i/btn/btn_subscribeCC_LG.gif" border="0" name="submit" alt="Jetzt einfach, schnell und sicher online bezahlen – mit PayPal.">
<img alt="" border="0" src="https://www.paypalobjects.com/de_DE/i/scr/pixel.gif" width="1" height="1">
</form>
На данный момент я просто проверяю минимальную сумму с помощью JavaScript, который не очень безопасен...
ИЗМЕНИТЬ
В качестве идеи я мог бы реализовать другую форму (отправить ее AJAX, onchange, onkeyup, что угодно), которая устанавливает минимальную сумму, указанную пользователем перед формой PayPal, и затем помещает ее в вход PayPal (устанавливается для скрытия снова):
<input type="hidden" name="a3" value="<?php echo $_POST['pre_min_amount'] ?>">
Таким образом, я могу проверить минимальную сумму с помощью PhP, прежде чем отправлять форму PayPal. Но это не кажется мне чистым способом. Действительно рад, если кто-нибудь может дать мне подсказку!
Ответы
Ответ 1
Ответ технической поддержки PayPal: Нет, это невозможно!
(Дата ответа была 05/02/2015). Надеюсь, это будет возможно в будущем. Если да, напишите свой ответ!
Я бы действительно предлагал использовать API PayPal для такого рода вещей (включая создание учетной записи разработчика, прохождение через документы и т.д.).
Итак, это "решение" - это быстрое и грязное обходное решение.
Сначала добавьте небольшую форму (назовем ее min_amount
-form на данный момент) на страницу (сообщив пользователю, что он должен сначала установить сумму):
<form id="min_amount" method="post" action="<?php echo $_SERVER['PHP_SELF'] ?>">
<input type="text" id="pre_min_amount" name="pre_min_amount" value="101">
<input type="submit" value="Set min. Amount">
</form>
Затем добавьте всю форму PayPal к переменной PHP с NowDoc и добавьте опубликованное значение из min_amount
-form в a3
input:
$min_amount = 0;
$payPalForm = <<<SOME
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<!-- //... -->
<input type="hidden" name="a3" value="$min_amount">
</form>
SOME;
После отправки проверьте, соответствует ли минимальная сумма, а затем отображает только форму PayPal:
if (isset($_POST['pre_min_amount']) && is_numeric($_POST['pre_min_amount']) && floatval($_POST['pre_min_amount']) >= 101) {
$min_amount = htmlspecialchars($_POST['pre_min_amount']);
echo $payPalForm;
}
Как я уже сказал, он быстрый и грязный (для этого проекта больше нет времени), но вы гарантируете проверку минимальной суммы на стороне сервера, а не только на Javascript. Вы также можете отправить min_amount
-form с помощью вызова AJAX, но тогда возврат этого вызова выполняется на стороне клиента, что также не является безопасным. (Конечно, вы также можете)
Кстати, я не горжусь этим решением, но иногда жизнь программистов сложная, и я уверен, что все, что вам нужно, - это код q & d каким-то образом, где-то... -)...
Обновление: 08/05/2015
Все зависит от страны, в которой зарегистрирована соответствующая учетная запись. Полные услуги, гарантированные PayPal только в США и Канаде.