简单的sagepay支付php

时间:2016-12-18 02:14:54

标签: php integration sagepay

我被赋予了重新设计网站的任务,用户最终会为活动购买门票。

旧网站使用PayPal立即购买按钮,但客户希望网站执行相同的操作,但希望使用SagePay。

在确认页面中显示变量$ ticketNumber和$ ticketAmount的阶段的网站,这是以前的设计有PayPal按钮的地方,所以我必须以某种方式在这里集成SagePay。

我已经浏览了SagePay网站和文档,我已经下载了Integration_and_Protocol_Guidelines pdf和php集成工具包,但我不能做任何事情,因为有大约一百页,包括,库和模板等

如果我使用drop-in或自己的表单方法,我不会感到困扰,因为网站是安全的。

我有来自sagepay的测试vendorname,Integration Key和Integration Password。

sagepay技术支持人员告诉我,鼠尾草是最佳选择,但它解释的3个简单步骤仍然让我感到困惑。

我没有任何代码显示,因为我尝试的所有内容都显示空白页面,所以我做错了。

我做了什么(使用插入式方法),我在确认页面中添加了这些js包括:

<script src="https://pi-test.sagepay.com/api/v1/js/sagepay.js"></script>
<script src="https://pi-test.sagepay.com/api/v1/js/sagepay-dropin.js">

然后我在确认文本下添加了这个脚本,它显示了票号和金额:

<?php
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://pi-test.sagepay.com/api/v1/merchant-session-keys",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{ "vendorName": "<myvendorname>" }',
  CURLOPT_HTTPHEADER => array(
    "Authorization: Basic <Base64 Encoded Integration Key:Integration Password>",
    "Cache-Control: no-cache",
    "Content-Type: application/json"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);
?>

然后在那之下,我添加了这段代码:

<form>
  <h2>Payment Details</h2>
    <div id="sp-container"></div>
    <div id="submit-container">
      <input type="submit">
    </div>
</form>
<script>
  sagepayCheckout({ merchantSessionKey: 'F42164DA-4A10-4060-AD04-F6101821EFC3' }).form();
</script>

它确实显示了一个卡片输入表单,但在我点击提交按钮后没有显示任何内容。

我确实在表单认为它会用它来发送付款之后添加此代码,但页面只是空白:

<?php
$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://pi-test.sagepay.com/api/v1/transactions",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{' .
                          '"transactionType": "Payment",' .
                          '"paymentMethod": {' .
                          '    "card": {' .
                          '        "merchantSessionKey": "' . $merchantSessionKey . '",' .
                          '        "cardIdentifier": "' . $cardIdentifier . '"' .
                          '    }' .
                          '},' .
                          '"vendorTxCode": "$ticketNo",' .
                          '"amount": 100,' .
                          '"currency": "GBP",' .
                          '"description": "Online Payment",' .
                          '"apply3DSecure": "UseMSPSetting",' .
                          '"customerFirstName": "Sam",' .
                          '"customerLastName": "Jones",' .
                          '"billingAddress": {' .
                          '    "address1": "407 St. John Street",' .
                          '    "city": "London",' .
                          '    "postalCode": "EC1V 4AB",' .
                          '    "country": "GB"' .
                          '},' .
                          '"entryMethod": "Ecommerce"' .
                        '}',
  CURLOPT_HTTPHEADER => array(
    "Authorization: Basic <Base64 Encoded Integration Key:Integration Password>",
    "Cache-Control: no-cache",
    "Content-Type: application/json"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);
?>

我还必须让用户输入他们的账单地址等,因为这似乎是sagepay所要求的,所以我不得不考虑从他们那里抓住它。

我不知道我哪里出错了,因为说明书向我扔了很多代码而没有告诉我该如何处理它。我在他们的文档中的某处读到我不需要很多开发人员的经验,我想我会试一试。我不是一个完整的新手,但我对php很陌生,因为我的职业生涯让我在ASP工作了很多年。

非常感谢任何帮助。

提前致谢。 尼科

2 个答案:

答案 0 :(得分:0)

  

我没有任何代码显示,因为我尝试的所有内容都显示空白页面,所以我做错了。

...

  

我对php很陌生,因为我的职业生涯让我在ASP工作了很多年。

我要做的第一件事就是进行健全检查。当PHP返回空白页面时,这通常是因为存在错误(例如PHP在生产配置中运行)。所以你应该做的第一件事是:

在Web服务器显然要打开的文件中创建以下代码(我使用index.php)

<?php
echo('This is some PHP');

你应该在屏幕上看到“这是一些PHP”字样。

现在试试这个:

<?php
echo($This_is_some_PHP);

只要你没有名为$ This_is_some_PHP的变量(请说你没有 - 如果你这样做,请暂时注释掉) - 那么你应该会在屏幕上看到错误。

如果您看到一个空白的屏幕,您的PHP正在生产配置中运行 - 通过启用屏幕上的打印错误和错误报告将其切换到开发人员配置。这样当出现问题时,你至少开始有机会调试它们。然后你就可以开始调试这个问题了。

答案 1 :(得分:0)

请检查Apache或Nginx日志。我相信您没有安装curl。