2015-05-04 7 views
32

Ho creato un pulsante PayPal non ospitato con un input di testo per consentire agli utenti di definire un importo da pagare. È un pulsante di abbonamento.Pulsante PayPal con 'min_amount' E 'set_customer_limit'

Ora il problema è che ci deve essere un importo minimo da pagare, dire 101 (CHF - franchi svizzeri).

In base ai documenti di PayPal HTML-Variables, ho la possibilità di aggiungere le seguenti variabili in input nascosti al mio modulo per farlo funzionare.

  • set_customer_limit con un valore di max_limit_own
  • min_amount con un valore di 101

Il set_customer_limit funziona ma non il min_amount. Qualsiasi importo è accettato

Ho aperto un ticket al supporto tecnico, ma nessuna risposta fino ad ora.

Ecco la mia forma:

<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> 

Per quanto riguarda il momento, ho solo convalidare l'importo minimo con JavaScript, che non è davvero sicuro ...


EDIT

Come idea, potrei implementare un altro modulo (inviarlo da AJAX, onchange, onkeyup, qualunque cosa), che imposta l'importo minimo fornito dall'utente da ribalta il PayPal-modulo e metterlo in PayPal ingresso poi (impostato su nascosto di nuovo):

<input type="hidden" name="a3" value="<?php echo $_POST['pre_min_amount'] ?>"> 

In questo modo ho potuto validare l'importo minimo con PHP, prima di presentare il PayPal-modulo. Ma non mi sembra un modo pulito. Davvero contento se qualcuno potesse darmi un suggerimento!

risposta

29

La risposta del supporto tecnico PayPal è: No, non è possibile!

(Data di risposta era 05/02/2015) Speriamo che questo sia possibile in futuro. Se è così, per favore pubblica la tua risposta!


avrei davvero consiglia di utilizzare l'PayPal API per questo genere di cose (tra cui la creazione di un account di sviluppatore, byting attraverso la documentazione, ecc).

Quindi questa "soluzione" è una soluzione rapida & sporca.


In primo luogo, aggiungere una piccola forma (io lo chiamo il min_amount -form per ora) alla pagina (raccontando l'utente, che deve impostare prima l'importo):

<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> 

quindi, aggiungere l'intera forma PayPal a una variabile PHP con NowDoc e aggiungere il valore inviato dal min_amount -form al a3 ingresso:

$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; 

Dopo la presentazione, controllare se l'importo minimo è vero e poi mostrare solo la PayPal-modulo:

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; 
} 

Come ho già detto, è veloce e sporco (non di più tempo per questo progetto), ma si assicura per convalidare l'importo minimo sul lato server, non solo con Javascript. Puoi anche inviare il min_amount -form con una chiamata AJAX, ma il ritorno di questa chiamata è sul lato client, che non è nemmeno sicuro. (Certo si può anche)

BTW, io non sono orgoglioso di questa soluzione a tutti, ma a volte, una vita ai programmatori è difficile e sono sicuro che tutti voi programmatori là fuori ha dovuto fare un po 'q codice & d qualche modo , da qualche parte; -) ...


Aggiornamento:08/05/2015

Tutto dipende dal paese in cui è registrato l'account in materia. Servizi completi garantiti da PayPal solo negli Stati Uniti e in Canada

+0

'value =" {$ _POST ['pre_min_amount']} "' <- si dovrebbe disinfettare questo invece di scrivere $ _POST direttamente in html – Pharaoh

+0

@Pharaoh non necessario perché I provalo con 'floatval' e se falso il modulo non va su –

+0

Assumi questa stringa:' 200 'Passa il test' floatval() ', ma inietta ancora javascript. – Pharaoh