Не удается указать «сумму» для каждого платежного запроса в PayPal HtmlButton

#paypal #paypal-sandbox

#paypal #paypal-песочница

Вопрос:

Я пытаюсь интегрироваться с PayPal, используя подход «HTML Buttons». Процесс оформления заказа довольно прост: пользователь нажимает «Купить сейчас» -> переведен на PayPal -> обработан платеж -> возвращен на сайт.

В зависимости от товара, который клиент хочет «Купить сейчас», «сумма» в отправленной форме будет отличаться, и я не могу заставить PayPal принять значение, которое я отправляю. Я всегда вижу текстовый ввод, который является пустым при перенаправлении на PayPal.

Я пробовал размещенные и не размещенные кнопки, но все еще не смог увидеть желаемый эффект.

размещенный HTML-пример кнопки:

 <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
  <input type="hidden" name="cmd" value="_s-xclick">
  <input type="hidden" name="hosted_button_id" value="HOSTEDBTNVALUE">
  <input type="image" src="https://www.sandbox.paypal.com/en_GB/SG/i/btn/btn_buynowCC_LG.gif" name="submit" alt="PayPal – The safer, easier way to pay online!" style="border: 0;">
  <img alt="" src="https://www.sandbox.paypal.com/en_GB/i/scr/pixel.gif" style="border: 0; width: 1; height: 1;">
  <input type="text" readonly="true" name="item_name" value="Test PayPal integration payment">
  <div class="form-group" id="amount_field">
    <label class="control-label col-md-2" for="amount">Amount</label>
    <div class="col-md-5">
      <input type="text" id="amount" name="amount" value="100" aria-describedby="amount_info_0" class="form-control"><span id="amount_info_0" class="help-block">Real</span></div>
  </div>
  <div class="form-group" id="txnRef_field">
    <label class="control-label col-md-2" for="txnRef">Transaction Ref</label>
    <div class="col-md-5">
      <input type="text" id="txnRef" name="txnRef" value="8d724ad470af4d9d91d49f84068c4bab" aria-describedby="txnRef_info_0" class="form-control"><span id="txnRef_info_0" class="help-block">Required</span></div>
  </div>
  <input type="hidden" name="currency_code" value="SGD">
</form>
  

На данный момент «сумма» выше является текстовым вводом, поскольку это моя страница тестирования интеграции, в реальном приложении это будет скрытый ввод, доступный только для чтения, встроенный в форму.

Вот пример кода не размещенной кнопки:

 <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
  <input type="hidden" name="cmd" value="_s-xclick">
  <input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----ReallyLongKey-----END PKCS7-----">
  <input type="image" src="https://www.sandbox.paypal.com/en_GB/SG/i/btn/btn_buynowCC_LG.gif" name="submit" alt="PayPal – The safer, easier way to pay online!" style="border: 0;"><img alt="" src="https://www.sandbox.paypal.com/en_GB/i/scr/pixel.gif" style="border: 0; width: 1; height: 1;">
  <input type="hidden" name="notify_url" value="https://myapplication.com/transaction/paypal/status">
  <input type="hidden" name="currency_code" value="SGD">
  <input type="hidden" name="custom" value="ad4a63e2f2f04b908ddb8e7c67f9c67a">
  <input type="text" readonly="true" name="item_name" value="Test PayPal integration payment">
  <div class="form-group" id="amount_field">
    <label class="control-label col-md-2" for="amount">Amount</label>
    <div class="col-md-5">
      <input type="text" id="amount" name="amount" value="100" aria-describedby="amount_info_0" class="form-control"><span id="amount_info_0" class="help-block">Real</span></div>
  </div>
  <div class="form-group" id="txnRef_field">
    <label class="control-label col-md-2" for="txnRef">Transaction Ref</label>
    <div class="col-md-5">
      <input type="text" id="txnRef" name="txnRef" value="ad4a63e2f2f04b908ddb8e7c67f9c67a" aria-describedby="txnRef_info_0" class="form-control"><span id="txnRef_info_0" class="help-block">Required</span></div>
  </div>
</form>
  

Ниже у меня есть скриншоты страницы приложения и то, что я вижу в результате на странице оплаты PayPal. Пожалуйста, извините за отсутствие выравнивания и стиля. Это должно быть подтверждением концепции, прежде чем она станет привлекательной.

  1. тестовая страница моего приложения для интеграции введите описание изображения здесь

  2. страница PayPal, где ожидается, что сумма будет исправлена на основе моего запроса и недоступна для редактирования. введите описание изображения здесь

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

Спасибо.

Комментарии:

1. Я бы посоветовал вам попробовать самый простой код, если что-то не работает. Кроме того, не забудьте узнать, что означает каждый параметр. Кроме того, попробуйте следующий код . Если у вас это не работает, пожалуйста, укажите код, который генерирует PayPal, с настройками по умолчанию (при создании кнопки). Там не должно быть hosted_button_id параметра.

2. И, как я уже говорил в другом вопросе, при использовании размещенных кнопок вы не можете переопределить такие вещи, как цена в форме. Цена «размещена» в PayPal. Из того, что я помню.

3. @x-yuri спасибо за отзыв. Я смог добиться этого, заставив PayPal сгенерировать кнопку со следующими настройками: 1. Идентификаторы учетной записи продавца: используйте мой основной адрес электронной почты [не использовал безопасный идентификатор учетной записи продавца] 2. снимите флажок «сохранить кнопку в PayPal». Кроме того, в интерфейсе генерации кнопок html я нажал ссылку «удалить защиту кода», которая изменила значение «cmd» с «_s-xclick» на «_xclick» есть ли какие-либо проблемы с параметрами, которые я использовал?

4. Я не эксперт в PayPal, и прошло некоторое время с тех пор, как я имел с этим дело, и сейчас у меня есть доступ только к личной учетной записи PayPal. С учетом сказанного, я не вижу ничего неправильного в выбранных вами настройках. Насколько я могу судить, все эти настройки связаны с сокрытием того, что вы передаете в PayPal. Идентификатор продавца для скрытия электронной почты, размещенных кнопок и шифрования (code protection) предназначен для скрытия всех данных, которые будут переданы в PayPal…

5. …Но, как это часто бывает с проблемами безопасности, вы никогда не знаете, что может быть использовано против вас. Итак, если это легко сделать, почему бы не предпринять некоторые дополнительные шаги? IIRC, вы можете зашифровать данные формы на своей стороне, для этого не нужно использовать размещенные кнопки. Что касается размещенных кнопок, если это всего лишь одна или несколько кнопок со статическими данными, тогда имеет смысл разместить их. Если нет, то, скорее всего, это будет перетаскивание, если это вообще возможно, поэтому имеет смысл переключиться на кнопки, не размещенные на хостинге. Но все зависит от проекта, который вы разрабатываете. Подумайте о последствиях, если что-то пойдет не так.

Ответ №1:

Я смог добиться этого, заставив PayPal сгенерировать кнопку со следующими настройками: 1. Merchant account IDs: Use my primary email address [не использовался безопасный идентификатор учетной записи продавца] 2. снимите save button at PayPal флажок. Кроме того, в интерфейсе генерации кнопок html я нажал на ссылку, remove code protection которая преобразовала cmd значение из _s-xclick в _xclick