【问题标题】:Passing information via PHP for a payment platform通过 PHP 为支付平台传递信息
【发布时间】:2018-03-19 04:10:45
【问题描述】:

我有一家基于服务的公司和一个完全使用 Dreamweaver 创建的网站。它没有购物车,而且我们出售的任何服务的价格都不完全相同,因此包含购物车是没有意义的。

我的银行为我提供了一个支付网关来自动支付并允许客户选择自己的货币,但它是为带有购物车或数据库的网站而构建的。

所以我试图找到一个解决方案:

1 - 允许我询问客户的详细信息

2 - 要求客户确认他们应支付的金额(需要在 0 到 10000 欧元之间,不允许使用点、逗号或空格,包括 2 位小数)

3 - 在单独的页面上确认他们的姓名和填写表格的金额(他们的终端没有显示要支付的金额,所以我想向客户确认这一点)

4 - 向支付终端发送正确的信息

5 - 返回我们的网站以确认付款已完成

6 - 向我发送一封电子邮件,其中包含客户填写的所有信息并且付款已获批准。

这是银行提供的代码

<form action="https://hpp.prueba.santanderelavontpvvirtual.es/pay" method="POST">
<input type="hidden" name="MERCHANT_ID" value="<?=$merchantid?>">
<input type="hidden" name="ORDER_ID" value="<?=$orderid?>">
<input type="hidden" name="ACCOUNT" value="<?=$account?>">
<input type="hidden" name="CURRENCY" value="<?=$curr?>">
<input type="hidden" name="AMOUNT" value="<?=$amount?>">
<input type="hidden" name="TIMESTAMP" value="<?=$timestamp?>">
<input type="hidden" name="DCC_ENABLE" value="1">
<input type="hidden" name="SHA1HASH" value="<?=$sha1hash?>">
<input type="hidden" name="HPP_LANG" value="EN">
<input type="hidden" name="AUTO_SETTLE_FLAG" value="1">
<input type="hidden" name="MERCHANT_RESPONSE_URL" value="tpv-mailer.php">
<input type="Submit" value="Pay by credit card on a Secure Website">
</form>

我是php新手,银行发给我的文件根本不清楚,所以我在这个问题上卡了一段时间。

我有表单从客户那里请求数据,认为 POST 工作并且支付系统工作(尽管它只收取相同的金额)但我似乎找不到将客户填写的 $amount 传递给的代码 ">在银行网关上而不破坏哈希。

我正在考虑通过 url 发送此信息或创建会话。有没有人有这方面的经验并且可以帮助我?

非常感谢您!

【问题讨论】:

  • @LasVegasCoder 您在评论中所说的一切都不正确

标签: php post get payment-gateway payment


【解决方案1】:

这就是我的做法:

  1. 使用您自己的多步骤表单从头开始(因为您想确认他们的姓名和金额)。

  2. 通过 jQUery AJAX 将表单发布到 PHP 脚本。

  3. 在您的 PHP 脚本中验证每个字段。请记住,客户可以发送任何东西,因此您要确保他们写的是实际金额。

  4. 准备您将从 PHP 脚本发送到银行 API 端点的 POST 请求。使用用户提交的字段(在验证它们之后)并生成您可能需要的任何其他字段,例如时间戳和返回 URL。

  5. 将此 POST 请求发送到您的银行。

  6. 阅读他们的回复。

  7. 处理他们的响应,例如将 JSON 发送回您的 jQuery AJAX 函数,其中包含有关下一步做什么的信息,例如重定向到哪个页面。您还可以在此处配置 PHP 以向您发送通知电子邮件。

您不必使用 AJAX,但通过这种方式,您可以根据需要向您的客户显示一个漂亮的“正在处理...”视图。

您需要完全了解银行要求的所有参数,例如$sha1hhash 的来源。如果他们的文档很差,那么总会有其他选择,例如:

也就是说,如果您正在经营公司并且如您所提到的那样不熟悉 PHP,您可能需要考虑聘请专业人士为您做这件事。值得投资。

【讨论】:

  • 感谢您的及时回复。我希望有一个比使用 AJAX 更简单的解决方案,并且我不想更改支付平台(PayPal 需要巨额佣金......)。其他参数工作正常,我只需要一种让客户真正填写 $amount 的方法。但我认为如果我无法解决这个问题,雇用某人可能是一个不错的选择。
  • 您可以跳过 jQuery AJAX 然后使用普通表单提交(提交到您的 PHP 脚本)。关键是您在整个过程中有一个中间步骤,这样您就可以允许客户指定他们想要的任何金额,您对其进行验证,然后将其发送到您银行的 API。
  • 从一个简单的表单开始,例如,您可以 POST 到 payment.php。在payment.php 中,使用$_POST 读取提交的值。对这些值运行您想要的任何验证,然后向您的银行 (https://hpp.prueba.santanderelavontpvvirtual.es/pay) 创建一个 POST 请求。这是一个关于如何做最后一点的例子:stackoverflow.com/questions/5647461/…
  • 谢谢您,我将尝试一下,希望这个或您以前的解决方案有效!
【解决方案2】:

在花了一整天的时间尝试学习 PHP 之后,我找到了解决问题的方法。由于我在网上找不到任何文档来回答这个问题,如果有一天有人需要,我想分享它:

首先你需要创建一个 3 步的 php 表单:

  • 首页是一个标准表单,它向我的客户询问信息、过滤和清理信息
  • 它重定向到充当邮件程序并收集信息的第二页。在标头中,它通过电子邮件将收集到的信息发送给我,然后调用支付网关。在正文中,它总结了先前发送的信息,并为客户端提供了到网关的链接
  • 第三页是网关响应。它让客户知道任何错误或感谢他们的预订,并重新向我发送一封包含预订确认的电子邮件。

我需要的代码是:

第 1 页:询问应存为 $charge 的应付金额

在第 2 页: 在标题中:

$amount=$_REQUEST['charge'];

in body - 显示要支付的金额:

<?php
$FIRSTNAME=$_REQUEST['firstname'];
$LASTNAME=$_REQUEST['lastname'];
$CHARGE=$_REQUEST['charge'];
echo <<<TEXT
<h3 style="text-align:left;padding-left:1em">Hello, $FIRSTNAME $LASTNAME, balance is $amount euros</h3>
TEXT;
?>

支付平台似乎正在运行,现在由客户决定金额,无需访问数据库。

【讨论】:

  • 查找 XSS,对于初学者。如果您还不知道它是什么,并且您正在处理财务信息,我建议您为此项目雇用某人。
猜你喜欢
  • 2021-02-03
  • 2014-08-06
  • 1970-01-01
  • 2014-09-11
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2012-08-18
  • 2013-08-15
相关资源
最近更新 更多