【发布时间】:2020-06-18 07:52:32
【问题描述】:
我正在将 PHP 中的 eWay 支付网关与定期支付集成。它适用于澳大利亚地区。我准备了以下HTML 表格:
<form action="submit.php" method="post" id="signup-form" class="creditly-card-form agileinfo_form">
<div class="signup-form credit-wrapper">
<div class="control full-flex">
<div class="form-control first">
<input type="email" name="email" id="email" placeholder="Email Address"/>
</div>
<div class="form-control last">
<input type="text" name="username" id="username" placeholder="Username"/>
</div>
</div>
<div class="control full">
<div class="form-control">
<input type="text" name="cardholder_name" id="cardholder_name" placeholder="Name On Card" class="billing-address-name form-control"/>
</div>
</div>
<div class="control full">
<div class="form-control">
<div class="card-type"></div>
<input type="text" name="cardnumber" id="cardnumber" pattern="(\d*\s){3}\d*" class="credit-card-number form-control" autocomplete="cc-number" autocompletetype="cc-number" x-autocompletetype="cc-number" />
</div>
</div>
<div class="control full-flex">
<div class="form-control first">
<input type="text" class="security-code form-control" name="cardcvv" id="cardcvv" inputmode="numeric" pattern="\d*" placeholder="CVV" />
</div>
<div class="form-control last">
<input type="text" name="expiredate" id="expiredate" placeholder="MM / YY" class="expiration-month-and-year form-control"/>
</div>
</div>
<div class="control full">
<input type="submit" class="submitbtn credit-wrapper-submit" value="Submit"/>
<!--<button class="submitbtn credit-wrapper-submit" type="submit"><span>Submit</span></button>-->
</div>
</div>
</form>
我使用jQuery在提交按钮点击提交表单,请看:
$("#signup-form").submit(function(e){
e.preventDefault();
var formData = $(this).serialize();
showLoader();
$.ajax({
url: "php/submit-signup.php",
method: "POST",
dataType: "json",
data: {
formdata: formData
},
success: function(data) {
hideLoader();
if (data.status) {
showsweetSuccessPopup(data.message);
} else {
showsweetErrorPopup(data.message);
return false;
}
}
});
});
在服务器端,我使用以下代码。我没有在我的数据库上保存卡详细信息,它仅用于第三方 api 调用: $formData = 数组(); parse_str($_POST['formdata'], $formData);
if (isset($formData['username'])) {
$client = \Eway\Rapid::createClient($this->apiKey, $this->apiPassword, $this->apiEndpoint);
$customer = [
'Email' => $formData['email'],
'CardDetails' => [
'Name' => $formData['cardholder_name'],
'Number' => $formData['cardnumber'],
'ExpiryMonth' => $formData['expiryMonth'],
'ExpiryYear' => $formData['expiryYear'],
'CVN' => $formData['cardcvv'],
]
];
$apiResult = $client->createCustomer(\Eway\Rapid\Enum\ApiMethod::DIRECT, $customer);
//further code
}
是 PCI 投诉表还是我应该为它做其他事情?我已经做了以下事情
- 我没有在我的数据库中保存信用卡详细信息。它仅用于调用 eWay api 并将令牌返回给我,用于保存在数据库中。
- 集成了 SSL。
- 托管服务提供商确保硬件和软件合规。
请帮助和建议!
【问题讨论】:
-
您应该通过验证器传递表单输入以检查字符串、位数等
-
我已经在这部分应用了服务器端和客户端验证。我没有包含该代码,因为它可能会增加内容长度。
-
好吧,那么我认为这里没有其他事情可做,请咨询您的支付网关提供商,看看他们的文档中是否有任何内容
-
理想情况下,您需要将付款直接从用户浏览器发送到支付网关。事实上,您的服务器在范围内并且需要符合要求。根据正在处理的交易数量,有不同级别的合规性,但是如果您的卡详细信息通过您的服务器,您需要确保它得到适当的控制——访问控制到位,源代码可能经过审查/外部审查等,它是一项正在进行的工作。 (来源:我搭建全球PCI DSS Level 1认证平台)
-
如果请求绝对必须通过您的服务器,因为您同时使用其他数据,看起来 eWay 提供了client side encryption option,这意味着您的服务器上的卡详细信息不可读,将其排除在范围之外。
标签: php ajax payment-gateway pci-compliance