Ответ 1
Добавьте еще одно скрытое поле для суммы
<input type="hidden" name="amount" value="<?php echo $total; ?>">
У меня есть форма и пользовательская кнопка 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="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";
Добавьте еще одно скрытое поле для суммы
<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="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.
Я пробовал и терпел неудачу со всем вышеперечисленным. Я нашел, что это ответ от веб-сайта 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 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="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>
Ваше значение "business" не будет 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">
Первый шифрует данные, отправленные формой, что вызвало проблему с моей проверкой.
Здесь вы можете ввести цену и ссылку.
ПРИМЕЧАНИЕ.. Вам нужно будет изменить бизнес с [email protected] на ваш адрес электронной почты 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="[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> </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>
Хотя старый пост, он наткнулся на меня при поиске. И нигде на первых страницах ответа на вопрос! Прочитав около 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
не является обязательным, вы, скорее всего, получите сообщение об ошибке, если вы его не включите.
К сожалению, документы Paypal не очень ясны и не дают лучших примеров, поэтому я надеюсь, что это спасет кого-то еще много часов, проведенных нами, чтобы выяснить, как это сделать.