php - pasarela - Botón de PayPal con ''min_amount'' AND ''set_customer_limit''
pasarela de pago paypal php (1)
Creé un botón de PayPal no alojado con una entrada de texto para permitir a los usuarios definir una cantidad a pagar. Es un botón de suscripción.
Ahora el problema es que debe haber un monto mínimo para pagar , digamos 101 (CHF - francos suizos).
De acuerdo con los documentos de PayPal HTML-Variables , tengo la posibilidad de agregar los siguientes valores en entradas ocultas a mi formulario para que funcione.
-
set_customer_limit
con un valor demax_limit_own
-
min_amount
con un valor de101
El set_customer_limit
funciona, pero no el min_amount
. Cualquier cantidad es aceptada
Abrí un boleto en el soporte técnico, pero no recibí respuesta hasta ahora.
Aquí está mi formulario:
<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>
Por el momento, solo valido la cantidad mínima con JavaScript, que no es realmente seguro ...
EDITAR
Como idea, podría implementar otro formulario (enviarlo por AJAX, onchange, onkeyup, lo que sea), que establece el monto mínimo otorgado por el usuario antes del formulario de PayPal y luego ponerlo en la entrada de PayPal (establecer en oculto nuevamente )
<input type="hidden" name="a3" value="<?php echo $_POST[''pre_min_amount''] ?>">
De esa manera podría validar la cantidad mínima con PhP, antes de enviar el formulario de PayPal. Pero eso no me parece una forma limpia. ¡Realmente me alegro si alguien pudiera darme una pista!
La respuesta del soporte técnico de PayPal es: ¡ No, no es posible!
(La fecha de respuesta fue el 05/02/2015 ) Con suerte, esto será posible en el futuro. Si es así, publique su respuesta!
Realmente sugeriría utilizar la API de PayPal para este tipo de cosas (incluida la creación de una cuenta de desarrollador, el byte a través de los documentos, etc.).
Entonces, esta "solución" es una solución rápida y sucia .
Primero, agregue un formulario pequeño (lo llamo el min_amount
por el momento) a la página (le dice al usuario que primero debe establecer el monto):
<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>
A continuación, agregue el formulario completo de PayPal a una variable PHP con NowDoc y agregue el valor publicado de la forma min_amount
a la entrada a3
:
$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;
Después de enviar, verifique si el monto mínimo es verdadero y luego solo muestre el formulario de 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;
}
Como dije, es rápido y sucio (no hay más tiempo para este proyecto), pero se asegura de validar la cantidad mínima en el servidor, no solo con Javascript. También puede enviar la forma min_amount
con una llamada AJAX, pero luego la devolución de esta llamada se realiza en el lado del cliente, lo que tampoco es realmente seguro. (Claro que también puedes)
Por cierto, no estoy orgulloso de esta solución en absoluto, pero a veces, la vida de un programador es difícil y estoy seguro de que todos los codificadores tenían que hacer algún tipo de código de q & d de alguna manera, en alguna parte; -) ...
Actualización: 05/08/2015
Todo depende del país en el que se registra la cuenta correspondiente. Servicios completos garantizados por PayPal solo en EE. UU. Y Canadá