Передача переменной цены в PayPal с помощью настраиваемой кнопки

У меня есть форма и пользовательская кнопка PayPal, но как передать переменную value / price в 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="http://img.ruphp.com/php/btn_paynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> <img alt="" border="0" src="http://img.ruphp.com/php/pixel.gif" width="1" height="1"> </form> 

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

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

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

Предыдущий код не работал для меня. После долгих головных болей я, наконец, понял, что вам нужно войти в 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="http://img.ruphp.com/php/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> <img alt="" border="0" src="http://img.ruphp.com/php/pixel.gif" width="1" height="1"> </form> 

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

Я пробовал и терпел неудачу со всем вышеперечисленным. Я нашел, что это ответ с веб-сайта 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://img.ruphp.com/php/btn_buynow_LG.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!"> </form> 

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

Вот версия 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="http://img.ruphp.com/php/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> <img alt="" border="0" src="http://img.ruphp.com/php/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, чтобы использовать ее как Mailer, Database Insertion, Autoresponder и, наконец, перенаправление заголовка. URL-адрес для перенаправления – это URL-адрес Paypal с переменными в строке! Этот поток действительно помог мне найти правильный код кнопки Paypal, чтобы строка корректно работала с ценовыми вариациями! FYI. Если вы являетесь новичком PHP, поле изображения не используется в строке. Только URL, а затем скрытые имена и значения.

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

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

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

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

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

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

ПРИМЕЧАНИЕ. Вам нужно будет изменить бизнес с 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="http://img.ruphp.com/php/btn_paynowCC_LG.gif" name="submit" alt="PayPal . The safer, easier way to pay online." /> <img alt="" style="border:0;" src="http://img.ruphp.com/php/pixel.gif" width="1" height="1" /> </td></tr> </table> </fieldset> </form> 

Хотя старый пост, он наткнулся на меня при поиске. И нигде на первых страницах ответа на вопрос! Прочитав около 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 на свой. Но мне все равно!

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

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

Важные примечания. Когда вы обновляете сведения о кнопке, он не просто обновляется для этого сеанса пользователей, он обновляет его в вашей учетной записи 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 является обязательным, вы, скорее всего, получите сообщение об ошибке, если вы его не BUTTONSUBTYPE .

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