通过POST(HTTP)与支付网关交互

时间:2011-06-28 14:15:55

标签: php javascript html

我有一个表单,客户填写信用卡信息,姓名等。该信息将发送至https://someurl.com/processPayment。信用卡公司的服务器使用XML文档进行响应。这是我感到困惑的地方,我该如何处理呢?

表单将您发送到显示XML文档的表单的action属性中的链接。我需要将XML文档返回到我的页面,以便我可以处理它所拥有的信息。例如,我必须在不离开站点的情况下发送请求,等待响应字符串然后处理它。

有人能给我一个简单的例子来说明这是如何实现的吗?

6 个答案:

答案 0 :(得分:0)

听起来像是一个完美的javascript应用程序。具体来说,我会使用带有Form Plugin的jQuery。像往常一样制作表单,然后在页面上包含一些JS脚本,从他们的示例中复制/粘贴几行jQuery代码,你就可以了。

http://jquery.malsup.com/form/

你必须自己完成剩下的工作,但是你将在你的javascript“成功”功能中获得XML页面的全文,这样你就可以从那里做任何你想做的事。

答案 1 :(得分:0)

也许不是直接发送到支付网关,而是应该发布到您自己的一个页面,例如/process.php,然后使用您的PHP向支付网关发出POST请求。然后,网关会将XML返回到PHP脚本以进行解析/验证。

  • 用户提交表单。
  • 表单会使用信用卡信息点击您的服务器。
  • 您的服务器使用其信用卡信息访问网关并获取XML文件。
  • 解析XML文件,并根据其内容显示成功或失败消息。

您可以使用curl通过PHP发出POST请求。这可能不是PCI compliant,但除了将用户发送到支付网关网站之外,没有其他解决方案。

他们可能会提供可以更好地满足您需求的托管解决方案。如果你对PHP有点新手,你可能不想过多地使用信用卡和安全性。

答案 2 :(得分:0)

您可以将用户详细信息发布到 服务器上的脚本中,然后该脚本将格式化为&将详细信息转发到https://someurl.com/processPayment,阅读响应XML,解析并存储它,然后将一些内容返回给用户。

或者,寻找someurl.com提供的托管解决方案,否则你就拥有大量的&昂贵的PCI合规义务。

答案 3 :(得分:0)

我觉得我确实知道关于php的一两件事,我知道这个项目涉及的责任。我只与信用卡公司供应的测试网关合作,实际上并没有涉及货币危险。令我感到困惑的是,我可以将标准的html表单发送到此URL并获得xml响应,但是当我尝试使用javascript(有或没有jquery)或使用php时,我总是得到错误代码500,完全相同的消息我当我将网址更改为http://some_crazy_url_that_doesnt_exist.com时,我尝试在其他服务器网址上使用相同的php代码,它没有给出任何响应,因为提供的参数都是错误的但我没有得到错误代码和http://someurl.com/processPayment一样500。如果您有兴趣并且想指出一些错误,我使用的代码如下:

<?php
function do_post_request($url, $data, $optional_headers = null)
{
  $params = array('http' => array(
              'method' => 'POST',
              'content' => $data
            ));
  if ($optional_headers !== null) {
    $params['http']['header'] = $optional_headers;
  }
  $ctx = stream_context_create($params);
  $fp = @fopen($url, 'rb', false, $ctx);
  if (!$fp) {
    throw new Exception("Problem with $url, $php_errormsg");
  }
  $response = @stream_get_contents($fp);
  if ($response === false) {
    throw new Exception("Problem reading data from $url, $php_errormsg");
  }
  return $response;
}

&GT;

    

答案 4 :(得分:0)

我很惊讶您的php服务器必须收集用户信用卡数据并发布。我希望流程更像是:

客户表示他想购买您的产品

无论哪种    - 您显示一个要求信用卡详细信息的表单 - 表单的操作属性设置为信用卡网关的服务器(奇怪的情况) 要么    - 您的php服务器将用户重定向到信用卡网关托管的表单,传递您的商家ID或类似信息。

当信用卡网关收集完用户的详细信息后,他们的Web服务器会将用户重定向回您自己的Web服务器上的预定义页面。然后该页面从cc网关获取xml(curl请求或类似信息)并确保它们实际支付了他们想要的内容。

根据xml的结果,您将用户重定向到“感谢购买”或“购买失败”页面。

大多数支付网关(以及大多数消费者)不希望Joe的网上商店访问其完整的信用卡详细信息。因此,大多数支付网关都提供了自己的表单,您可以将用户重定向到(在SSL服务器上),因此您实际上不必为滥用客户的信用卡号码收取/处理/负责。

答案 5 :(得分:0)

@James这就是我希望的样子,但是老板希望现场支付不会被重定向到安全支付网关。