web-dev-qa-db-fra.com

Passer la variable de prix à Paypal avec un bouton personnalisé

J'ai un formulaire et un bouton Paypal personnalisé, mais comment transmettre la variable valeur/prix à PayPal?

<form action="https://www.Paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_s-xclick">
    <input type="hidden" name="hosted_button_id" value="ZEFZFYBY2SZB8">
    <input type="image" src="https://www.Paypal.com/en_US/i/btn/btn_paynowCC_LG.gif" border="0" name="submit" alt="Paypal - The safer, easier way to pay online!">
    <img alt="" border="0" src="https://www.Paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

J'ai une variable $total = "238.00";

27
Denoteone

Ajouter un champ caché supplémentaire pour le montant

<input type="hidden" name="amount" value="<?php echo $total; ?>">
14
Shakti Singh

Le code précédent ne fonctionnait pas pour moi. Après beaucoup de maux de tête, j'ai finalement compris que vous devez aller dans Paypal et à l'étape 2 de la création du code du bouton, assurez-vous de cliquer sur le bouton non hébergé, puis copiez le code du bouton non crypté, ce qui vous donnera quelque chose comme ça (j'ai effacé mon valeur commerciale pour la sécurité):

<form action="https://www.Paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="XXX">
    <input type="hidden" name="lc" value="CA">
    <input type="hidden" name="item_name" value="Tangled Roots">
    <input type="hidden" name="button_subtype" value="services">
    <input type="hidden" name="no_note" value="0">
    <input type="hidden" name="cn" value="Add special instructions to the seller">
    <input type="hidden" name="no_shipping" value="2">
    <input name="amount" value="16.99">
    <input type="hidden" name="currency_code" value="CAD">
    <input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHosted">
    <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="Paypal - The safer, easier way to pay online!">
    <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

Ce code crée un bouton où l'utilisateur peut entrer le montant, qui par défaut commence à 16,99, mais vous pouvez tout aussi facilement le remplacer par une variable PHP.

24
Julian

J'ai essayé et échoué avec tout ce qui précède. J'ai trouvé que c'était la réponse du site Paypal .

<form name="_xclick" action="https://www.Paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="[email protected]">
    <input type="hidden" name="currency_code" value="USD">
    <input type="hidden" name="item_name" value="Teddy Bear">
    <input type="hidden" name="amount" value="12.99">
    <input type="image" src="http://www.paypalobjects.com/en_US/i/btn/btn_buynow_LG.gif"         border="0" name="submit" alt="Make payments with Paypal - it's fast, free and secure!">
</form>

Testez cela et vous comprendrez comment cela fonctionne ... changez l'entreprise en adresse e-mail de la personne que vous souhaitez payer, etc.

12
IanOSullivan

Voici la version 2013: Allez créer un bouton, quand vous arrivez à l'étape 2, décochez la case, passez à l'étape 3 puis créez le bouton. Une fois que vous avez le code, il ressemblera à ceci:

<form action="https://www.Paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="XXXXXXXX">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="item_name" value="Payments">
<input type="hidden" name="amount" value="100.00">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="button_subtype" value="services">
<input type="hidden" name="no_note" value="0">
<input type="hidden" name="cn" value="Add special instructions to the seller:">
<input type="hidden" name="no_shipping" value="2">
<input type="hidden" name="rm" value="1">
<input type="hidden" name="return" value="http://YOURSITE.com/">
<input type="hidden" name="cancel_return"     value="http://YOURSITE.com/payments.html">
<input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHostedGuest">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_buynowCC_LG.gif"     border="0" name="submit" alt="Paypal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1">
</form>

Votre valeur "commerciale" ne sera pas XXXXXXXX, alors assurez-vous de laisser celle que Paypal vous donne. Vous pouvez également définir vos URL d'annulation et de retour.

Pour les utilisateurs PHP plus avancés: j'ai en fait configuré une chaîne PHP et cela fonctionne très bien! Par exemple, voir ci-dessous:

 https://www.Paypal.com/cgi-bin/webscr?cmd=_xclick&businesss=XXXXXXXXX&lc=US&item_name=$mydescription&amount=$myprice&........

Et ainsi de suite ..... Comme vous pouvez le voir, $ mydescription est une variable PHP et $ myprice est une variable PHP. Ce que j'ai fait a été de configurer une Formulaire HTML pour collecter des données et utilisé ce formulaire comme formulaire de traitement des paiements. Une fois que l'utilisateur a cliqué sur soumettre, je le fais accéder à une page PHP pour l'utiliser comme courrier, insertion de base de données, répondeur automatique et enfin une redirection d'en-tête. L'URL de la redirection est l'URL Paypal avec les variables dans la chaîne! Ce fil m'a en fait aidé à trouver le bon code de bouton Paypal pour que la chaîne fonctionne correctement avec les variations de prix! FYI - Si vous êtes un débutant = PHP person, le champ image n'est pas utilisé dans la chaîne. Seulement l'URL puis les noms et valeurs cachés.

5
Phil Mulkins

J'ai trouvé la solution:

<input type="hidden" name="cmd" value="_s-xclick">

doit être changé en

<input type="hidden" name="cmd" value="_xclick">

Le premier chiffre les données envoyées par le formulaire - ce qui a causé le problème avec ma caisse.

3
mavame

En voici une qui permet à l'utilisateur d'entrer un prix et une référence.

REMARQUE: Vous devrez changer d'entreprise de [email protected] à votre adresse e-mail Paypal, mais c'est très bien si je ne le fais pas car cela signifie simplement que je recevrai vos paiements.

Vous aimerez peut-être aussi changer currency_code et lc pour l'adapter à votre région ...

                        <form action="https://www.Paypal.com/cgi-bin/webscr" method="post">
                            <fieldset>
                                <input type="hidden" name="cmd" value="_xclick" />
                                <input type="hidden" name="business" value="[email protected]" />
                                <input type="hidden" name="lc" value="AU" />
                                <input type="hidden" name="item_name" value="Payment" />
                                <input type="hidden" name="item_number" value="P1" />
                                <input type="hidden" name="currency_code" value="AUD" />
                                <input type="hidden" name="button_subtype" value="services" />
                                <input type="hidden" name="no_note" value="0" />
                                <input type="hidden" name="cn" value="Comments" />
                                <input type="hidden" name="no_shipping" value="1" />
                                <input type="hidden" name="rm" value="1" />
                                <input type="hidden" name="return" value="http://www.ekerner.com/payments/?payment=success" />
                                <input type="hidden" name="cancel_return" value="http://www.ekerner.com/payments/?payment=cancelled" />
                                <input type="hidden" name="bn" value="PP-BuyNowBF:btn_paynowCC_LG.gif:NonHostedGuest" />
                                <table>
                                        <tr><td style="padding:0 5px 5px 0;">Amount AUD</td><td style="padding:0 5px 5px 0;"><input type="text" name="amount" maxlength="200" /></td></tr>
                                        <tr><td style="padding:0 5px 5px 0;"><input type="hidden" name="on0" value="Reference" />Reference</td><td style="padding:0 5px 5px 0;"> <input type="text" name="os0" maxlength="200" /></td></tr>
                                        <tr><td>&nbsp;</td><td style="padding:0 5px 5px 0;">
                                                <input style="position:relative; left:-10px; background:#ffffff; border:0;" type="image" src="https://www.paypalobjects.com/en_AU/i/btn/btn_paynowCC_LG.gif" name="submit" alt="Paypal . The safer, easier way to pay online." />
                                                <img alt="" style="border:0;" src="https://www.paypalobjects.com/en_AU/i/scr/pixel.gif" width="1" height="1" />
                                        </td></tr>
                                </table>
                            </fieldset>
                        </form>
1
ekerner

Malheureusement au moment de la rédaction, toutes les autres réponses à cette question sont incorrectes - c'est-à-dire si vous essayez de changer le prix d'un bouton hébergé; c'est de cela qu'il s'agissait.

La bonne façon de procéder est la suivante:

Remarques importantes: Lorsque vous mettez à jour les détails du bouton, il n'est pas seulement mis à jour pour cette session d'utilisateurs, il le met à jour dans votre compte Paypal - donc le nouveau nom/prix, etc. affectera tous les utilisateurs qui tentent de l'utiliser.

Aussi, soyez avisé lorsque vous modifiez le contenu d'un bouton hébergé, vous devez lui transmettre tous les détails du bouton comme lorsque vous l'avez créé; Ainsi, par exemple, si vous omettez de lui donner un nom d'article, le nom de l'article sera vide et Paypal permettra à l'utilisateur de le définir.

Sur cette note, nous allons continuer ..

J'ai personnellement commencé avec cette classe:

<?php

class Paypal
{
    /**
     * Last error message(s)
     * @var array
     */
    protected $_errors = array();

    /**
     * API Credentials
     * Use the correct credentials for the environment in use (Live / Sandbox)
     * @var array
     */
    protected $_credentials = array(
        'USER' => 'seller_1297608781_biz_api1.lionite.com',
        'PWD' => '1297608792',
        'SIGNATURE' => 'A3g66.FS3NAf4mkHn3BDQdpo6JD.ACcPc4wMrInvUEqO3Uapovity47p',
    );

    /**
     * API endpoint
     * Live - https://api-3t.Paypal.com/nvp
     * Sandbox - https://api-3t.sandbox.Paypal.com/nvp
     * @var string
     */
    protected $_endPoint = 'https://api-3t.sandbox.Paypal.com/nvp';

    /**
     * API Version
     * @var string
     */
    protected $_version = '74.0';

    /**
     * Make API request
     *
     * @param string $method string API method to request
     * @param array $params Additional request parameters
     * @return array / boolean Response array / boolean false on failure
     */
    public function request($method, $params = array())
    {
        $this->_errors = array();
        if (empty($method)) { //Check if API method is not empty
            $this->_errors = array('API method is missing');
            return false;
        }

        //Our request parameters
        $requestParams = array(
                'METHOD' => $method,
                'VERSION' => $this->_version
            ) + $this->_credentials;

        //Building our NVP string
        $request = http_build_query($requestParams + $params);

        //cURL settings
        $curlOptions = array(
            CURLOPT_URL => $this->_endPoint,
            CURLOPT_VERBOSE => 1,
            CURLOPT_SSL_VERIFYPEER => true,
            CURLOPT_SSL_VERIFYHOST => 2,
            CURLOPT_CAINFO => dirname(__FILE__) . '/cacert.pem', //CA cert file
            CURLOPT_RETURNTRANSFER => 1,
            CURLOPT_POST => 1,
            CURLOPT_POSTFIELDS => $request
        );

        $ch = curl_init();
        curl_setopt_array($ch, $curlOptions);

        //Sending our request - $response will hold the API response
        $response = curl_exec($ch);

        //Checking for cURL errors
        if (curl_errno($ch)) {
            $this->_errors = curl_error($ch);
            curl_close($ch);
            return false;
            //Handle errors
        } else {
            curl_close($ch);
            $responseArray = array();
            parse_str($response, $responseArray); // Break the NVP string to an array
            return $responseArray;
        }
    }
}

?>

Crédit: https://www.smashingmagazine.com/2011/09/getting-started-with-the-Paypal-api/

Ensuite, j'ai fait ce qui suit:

include(dirname(__FILE__) . '/includes/Paypal.class.php');

$Paypal = new Paypal();

// Set our method
$method = 'BMUpdateButton';

// Set our params
$params = array(
    'HOSTEDBUTTONID' => 'your_button_id',
    'BUTTONTYPE' => 'BUYNOW',
    'BUTTONSUBTYPE' => 'SERVICES',
    'L_BUTTONVAR0' => 'item_name=Your Description',
    'L_BUTTONVAR1' => 'amount=999.00',
    'L_BUTTONVAR2' => 'currency_code=AUD',
    'L_BUTTONVAR3' => 'cancel_return=http://www.example.com/cancel.html',
    'L_BUTTONVAR4' => 'return=http://www.example.com/success.html'
);

// Make request to change button details
$result = $Paypal->request($method, $params);

Notez que même si Paypal dit que BUTTONSUBTYPE est facultatif, vous obtiendrez probablement une erreur si vous ne l'incluez pas.

Malheureusement, les documents Paypal ne sont pas très clairs et ne fournissent pas les meilleurs exemples, donc j'espère que cela économisera à quelqu'un d'autre les nombreuses heures que j'ai passées à découvrir comment faire cela.

0
Brett