Передача переменной цены в PayPal с помощью пользовательской кнопки - PullRequest
27 голосов
/ 10 марта 2011

У меня есть форма и пользовательская кнопка PayPal, но как передать переменную стоимость / цена в 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>

У меня есть переменная $total = "238.00";

Ответы [ 8 ]

23 голосов
/ 13 марта 2012

Предыдущий код не работал для меня.После сильной головной боли я наконец-то понял, что вам нужно перейти в PayPal, и на шаге 2 создания кода кнопки убедитесь, что вы нажимаете кнопку unhosted, а затем скопируете незашифрованный код кнопки, который даст вам что-то вроде этого (я отключил свойбизнес-значение для безопасности):

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

Этот код создает кнопку, в которую пользователь может ввести сумму, которая по умолчанию начинается с 16.99, но вы также можете легко заменить ее переменной PHP.

14 голосов
/ 10 марта 2011

Добавить еще одно скрытое поле для суммы

<input type="hidden" name="amount" value="<?php echo $total; ?>">
12 голосов
/ 06 ноября 2012

Я попробовал и потерпел неудачу со всем вышеперечисленным.Я обнаружил, что это ответ на сайте 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="me@mybusiness.com">
    <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>

Проверьте это, и вы поймете, как это работает ... измените название компании на адрес электронной почты человека, которому вы хотите заплатить и т. Д.

5 голосов
/ 25 июня 2013

Вот версия 2013 года: перейдите к созданию кнопки, когда вы перейдете к шагу 2, снимите флажок, перейдите к шагу 3, затем создайте кнопку.Когда у вас есть код, он будет выглядеть следующим образом:

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

Ваша «бизнес» ценность не будет XXXXXXXX, поэтому убедитесь, что вы оставляете ту, которую дает вам Paypal.Вы также можете установить URL отмены и возврата.

Для более продвинутых пользователей PHP: на самом деле я установил строку PHP, и она отлично работает!Например, см. Ниже:

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

И так далее ... Как вы можете видеть, $ mydescription - это переменная PHP, а $ myprice - переменная PHP.Я настроил HTML-форму для сбора данных и использовал ее в качестве формы обработки платежей.Когда пользователь нажимает кнопку «Отправить», я перехожу на страницу PHP для использования в качестве почтовой программы, вставки базы данных, автоответчика и, наконец, перенаправления заголовка.URL для перенаправления - это Paypal URL с переменными в строке!Эта ветка помогла мне найти правильный код кнопки Paypal, чтобы строка правильно работала с колебаниями цен!К вашему сведению - если вы новичок в PHP, поле изображения в строке не используется.Только URL, а затем скрытые имена и значения.

3 голосов
/ 29 августа 2012

Я нашел решение:

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

необходимо изменить на

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

Первый шифрует данные, отправленные формой - что вызвало проблему с моей проверкой.

1 голос
/ 14 декабря 2013

Вот один, который позволяет пользователю ввести цену и ссылку.

ПРИМЕЧАНИЕ: Вам нужно сменить бизнес с shop@ekerner.com на свой адрес электронной почты PayPal,но я согласен, если вы этого не сделаете, потому что это просто означает, что я получу ваши платежи.

Вы также можете изменить currency_code и lc в соответствии с вашим языком ...

                        <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="shop@ekerner.com" />
                                <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>
0 голосов
/ 20 февраля 2016

К сожалению, на момент написания этой статьи все остальные ответы на этот вопрос были неправильными - то есть, если вы пытаетесь изменить цену кнопки hosted ; о чем был вопрос.

Правильный способ сделать это ниже:

Важные примечания: Когда вы обновляете информацию о кнопке, она не только обновляется для этого сеанса пользователя, но и обновляется в вашей учетной записи PayPal - поэтому новое имя / цена и т. Д. Будут влиять на всех пользователей, которые попытайтесь использовать это.

Также следует помнить, что при изменении содержимого размещенной кнопки вам необходимо передать все данные кнопки, как при ее создании; Так, например, если вы пропустите это имя, имя элемента будет пустым, и Paypal позволит пользователю установить его.

На этой ноте мы продолжим ..

Я лично начал с этого класса:

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

?>

Кредит: https://www.smashingmagazine.com/2011/09/getting-started-with-the-paypal-api/

Тогда я сделал следующее:

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

Обратите внимание, что хотя Paypal сообщает, что BUTTONSUBTYPE необязательно, вы, скорее всего, получите ошибку, если не включите ее.

К сожалению, документы Paypal не очень понятны и не дают лучших примеров, поэтому я надеюсь, что это сэкономит кому-то еще много часов, которые я потратил, чтобы узнать, как это сделать.

0 голосов
/ 12 декабря 2015

Несмотря на старый пост, он наткнулся на меня при поиске. И на первых страницах нигде нет ответа на этот вопрос! Прочитав около 10 часов, мне удалось сделать рабочий пример. Но помните, что PayPal постоянно меняется, поэтому в какой-то момент это решение больше не будет работать.

Перво-наперво. Вы никогда не можете иметь значение переменной для элемента. Итак, первый обходной путь - отправить запрос, как если бы товар был общим в вашей корзине! Да, умный ход:)

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="upload" value="1">
    <input type="hidden" name="business" value="XVR95QDG6M53J">
    <input type="hidden" name="item_name_1" value="This is the name of what you are selling">
    <input type="hidden" name="amount_1" value="<?php echo $total_cost; ?>">
    <input type="hidden" name="currency_code" value="the currency code">
    <input type="hidden" name="lc" value="if you dont need delete">
    <input type="hidden" name="shopping_url" value="link to your shop or cart on your website">
    <input type="hidden" name="retun" value="URL the user returns if payment is OK">
    <input type="hidden" name="cancel_return" value="URL the user returns if payment is canceled">
    <input type="submit" class="read-more-btn4" value="Text of [read more] button">
</form>

Вы можете изменить значение business на ваше. Но мне все равно:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...