【发布时间】:2017-05-03 11:01:26
【问题描述】:
我的任务是重新设计一个用户最终购买活动门票的网站。
旧网站使用 PayPal 立即购买按钮,但客户希望该网站做同样的事情,但想改用 SagePay。
该站点处于变量 $ticketNumber 和 $ticketAmount 显示在确认页面中的阶段,这是以前的设计有一个 PayPal 按钮的地方,所以我必须在此处以某种方式集成 SagePay。
我浏览过 SagePay 网站和文档,下载了 Integration_and_Protocol_Guidelines pdf 和 php 集成工具包,但我无法从任何东西中脱颖而出,因为大约有一百页,包括,库和模板等。
如果我使用 drop-in 或自己的表单方法,我不会担心,因为网站是安全的。
我有一个来自 sagepay 的测试供应商名称、集成密钥和集成密码。
sagepay 技术支持人员告诉我,sage pay pi 是可行的方法,但它解释的 3 个简单步骤仍然让我感到困惑。
我没有任何代码可以显示,因为我尝试过的所有内容都显示一个空白页,所以我做错了。
我做了什么(使用drop-in方法),是我在确认页面中添加了这些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 中工作了很多年。
任何帮助将不胜感激。
提前致谢。 妮可
【问题讨论】:
-
只是为了确保我们在这里处于正确的位置,您是否在每次提交抄送表格时都创建
merchantSessionKey?merchantSessionKey创建后只会持续 400 秒。然后您正在获取与您的抄送表单一起提交的cardIdentifier?cardIdentifier将是代表卡片的一次性令牌。 -
Sage Pay 网站在实施 Sage Pay PI 时提供了更加结构化的方法。如果您还没有这样做并且仍然遇到困难,请查看integrations.sagepay.co.uk/content/getting-started-overview
标签: php integration opayo