无法在 PayPal HTMLButton 上为每个付款请求指定“金额”

Posted

技术标签:

【中文标题】无法在 PayPal HTMLButton 上为每个付款请求指定“金额”【英文标题】:Not able to specify "amount" per payment request on PayPal HTMLButton 【发布时间】:2017-03-05 18:34:15 【问题描述】:

我正在尝试使用“html 按钮”方法与 PayPal 集成。 结帐流程相当简单, 用户点击“立即购买” -> 转移到 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"  style="border: 0;">
  <img  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"  style="border: 0;"><img  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 支付页面上看到的结果。请原谅缺乏对齐和样式。这意味着在它变得漂亮之前是一个概念证明。

    我的应用程序集成测试页面

    paypal 页面,其中金额预计将根据我的请求进行固定且不可编辑。

不知道我在这里做错了什么。请帮忙。

谢谢。

【问题讨论】:

如果某些东西不起作用,我建议您尝试最简单的代码。另外,请务必了解每个参数 means 的含义。此外,请尝试the following code。如果它不适合您,请提供 paypal 使用默认设置生成的代码(创建按钮时)。应该没有hosted_button_id 参数。 就像我在另一个问题中所说的那样,使用托管按钮时,您不能覆盖表单中的价格等内容。价格在贝宝上“托管”。据我所知。 @x-yuri 感谢您的反馈。我可以通过使用以下设置让 PayPal 生成按钮来实现它: 1. 商家帐户 ID:使用我的主电子邮件地址 [未使用安全的商家帐户 ID] 2. 取消选中“在 PayPal 上保存按钮”复选框。另外,在html按钮生成界面中,我点击了链接“删除代码保护”,使“cmd”值从“_s-xclick”变为“_xclick”,我使用的选项有什么问题吗? 我不是贝宝专家,我已经有一段时间没有处理它了,我现在只能访问贝宝个人帐户。话虽如此,我认为您选择的设置没有任何问题。据我所知,所有这些设置都与隐藏您传递给贝宝的内容有关。隐藏电子邮件、托管按钮和加密(代码保护)的商家 ID 是隐藏所有要传递到贝宝的数据... ...但是由于安全问题经常发生,您永远不知道可以用来对付您的东西。所以如果很容易做到,为什么不采取一些额外的步骤呢? 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

【讨论】:

以上是关于无法在 PayPal HTMLButton 上为每个付款请求指定“金额”的主要内容,如果未能解决你的问题,请参考以下文章

您如何在 iPhone 上为 PayPal 的电话 SDK 保护您的 PayPal 应用程序 ID?

多个项目:使用 PHP 的 PayPal 表单中的动态项目名称和编号

Paypal 使用 Laravel 预先批准的付款

PHP 和 Paypal IPN 订阅和定期付款

无法在 TestFlight 上为设备授予构建权限

Flutter:无法在 codemagic 上为 ios 构建