PHP 中的 PayFlowPro 托管结账页面





5.00/5 (2投票s)
PayFlowPro 托管结账页面是 PayPal 提供的一项支付服务,可帮助您满足 PCI 合规性要求。
引言
PayFlowPro 托管结账页面是 PayPal 提供的一项支付服务。 本文介绍了在 PHP 网站中实施此支付服务的步骤。
背景
如果您正在网站中实施支付系统,则有责任遵守 PCI 合规性标准,以保护个人信息并在处理支付卡交易时在您的网站上实施安全保障措施。
PayFlowPro 托管结账页面可帮助您满足 PCI 合规性要求。 它在您的网站之外的 PayPal 页面上进行支付。 因此,您无需在您的网站上收集客户的支付相关信息,如信用卡号、有效期等。
使用代码
创建 PayFlowPro 帐户
点击此处注册 PayFlowPro 帐户或访问 URL https://registration.paypal.com/welcomePage.do
创建帐户后,您需要配置托管结账页面。 请参阅文档 https://www.paypal-knowledge.com/infocenter/index?page=content&widgetview=true&id=FAQ1493&viewlocale=en_US&direct=en,其中包含创建 PayFlowPro 沙盒帐户和配置托管结账页面的完整信息。
PHP 中的支付服务
以下是使用 PayFlowPro 托管结账页面进行支付的步骤
- 将支付信息提交给 PayFlowPro 并获取安全密钥
- 将页面重定向到托管结账页面
- 从 PayFlowPro 收集支付响应
将支付信息提交给 PayFlowPro
在启动支付流程之前,我们需要将支付信息提交给 PayFlowPro。 PayFlowPro 提供了传递这些值的参数。
将输入参数准备为数组
$parameters = array();
$parameters['AMT'] = '100';
$parameters['CURRENCY'] = 'USD';
$parameters['FIRSTNAME'] = '***';
$parameters['LASTNAME'] = '***';
$parameters['PHONENUM'] = '***';
$parameters['EMAIL'] = '***';
$parameters['STREET'] = '***';
$parameters['STATE'] = '***';
$parameters['CITY'] = '***';
添加 PayFlowPro 帐户详细信息
$parameters['USER'] = '***';
$parameters['VENDOR'] = '***';
$parameters['PARTNER'] = '***';
$parameters['PWD'] = '***';
添加唯一的安全令牌 ID
// SECURETOKENID - random 36 alpha numeric characters.
// SECURETOKENID - should be unique for each test, means you need to generate new id for each test payments.
$parameters['SECURETOKENID'] = '***';
$parameters['CREATESECURETOKEN'] = 'Y';
$parameters['TRXTYPE'] = 'S';
提交输入参数并从 PayFlowPro 获取 SECURETOKEN。
注意:如果您想使用实时帐户进行支付,请在下面的代码中使用 URL https://payflowpro.paypal.com 而不是 https://pilot-payflowpro.paypal.com。
$curl_url = 'https://pilot-payflowpro.paypal.com';
$curl_param = array();
foreach($parameters as $key => $value) {
$curl_param[] = "$key=$value";
}
$curl_params = implode('&',$curl_param);
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_VERBOSE => false,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $curl_params,
);
$ch = curl_init($curl_url);
curl_setopt_array($ch,$options);
$content = curl_exec( $ch );
$response_status = curl_getinfo( $ch );
curl_close ( $ch );
从 PayFlowPro 读取安全令牌
if($content != '') {
$response = array();
foreach(explode('&', $content) as $item) {
$key_value = explode('=', $item);
$response[$key_value[0]] = $key_value[1];
}
// Validate response
if(isset($response['RESULT']) && $response['RESULT'] == '0') {
$securetoken = $response['SECURETOKEN'];
$securetokenid = $response['SECURETOKENID'];
}
else {
print_r($content);
}
}
将页面重定向到托管结账页面
从 PayFlowPro 获取安全令牌后,将页面重定向到托管结账页面
注意:如果您想使用实时帐户进行支付,请在下面的代码中使用 URL https://payflowlink.paypal.com 而不是 https://pilot-payflowlink.paypal.com
if(!empty($securetoken) && !empty($securetokenid)) {
$querystring = array(
'SECURETOKEN' => $securetoken,
'SECURETOKENID' => $securetokenid,
);
header('Location: https://pilot-payflowlink.paypal.com?' . http_build_query($querystring, '', '&'));
exit;
}
用户将被重定向到 PayFlowPro 托管结账页面(支付页面)
从 PayFlowPro 收集支付响应
完成支付流程后,PayFlowPro 将页面提交回网站。 根据您的托管结账页面设置,从 $_POST 或 $_GET 变量读取响应。 在感谢页面中打印 PNREF 唯一 ID
<?php if($_POST['RESULT'] == 0) { print 'Thank you for your payment, please note transaction number ' . $_POST['PNREF']; } ?>
完成后,您的代码应如下所示
文件:testpayment.php
<?php
// Preparing input parameters.
$parameters = array();
$parameters['AMT'] = '100';
$parameters['CURRENCY'] = 'USD';
$parameters['FIRSTNAME'] = '***';
$parameters['LASTNAME'] = '***';
$parameters['PHONENUM'] = '***';
$parameters['EMAIL'] = '***';
$parameters['STREET'] = '***';
$parameters['STATE'] = '***';
$parameters['CITY'] = '***';
// Add PayFlowPro account details.
$parameters['USER'] = '***';
$parameters['VENDOR'] = '***';
$parameters['PARTNER'] = '***';
$parameters['PWD'] = '***';
// Add unique secure token id.
// random 36 alpha numeric characters.
$parameters['SECURETOKENID'] = '***';
$parameters['CREATESECURETOKEN'] = 'Y';
$parameters['TRXTYPE'] = 'S';
// Send values to PayFlowPro.
$curl_url = 'https://pilot-payflowpro.paypal.com';
$curl_param = array();
foreach($parameters as $key => $value) {
$curl_param[] = "$key=$value";
}
$curl_params = implode('&',$curl_param);
$options = array(
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HEADER => false,
CURLOPT_VERBOSE => false,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $curl_params,
);
$ch = curl_init($curl_url);
curl_setopt_array($ch,$options);
$content = curl_exec( $ch );
$response_status = curl_getinfo( $ch );
curl_close ( $ch );
// Read response.
if($content != '') {
$response = array();
foreach(explode('&', $content) as $item) {
$key_value = explode('=', $item);
$response[$key_value[0]] = $key_value[1];
}
// Validate response
if(isset($response['RESULT']) && $response['RESULT'] == '0') {
$securetoken = $response['SECURETOKEN'];
$securetokenid = $response['SECURETOKENID'];
}
else {
print_r($content);
}
}
// Redirect to PayFlowPro Hosted Checout Page.
if(!empty($securetoken) && !empty($securetokenid)) {
$querystring = array(
'SECURETOKEN' => $securetoken,
'SECURETOKENID' => $securetokenid,
);
header('Location: https://pilot-payflowlink.paypal.com?' . http_build_query($querystring, '', '&'));
exit;
}
?>
文件:response.php
<?php
if($_POST['RESULT'] == 0) {
print 'Thank you for your payment, please note transaction number ' . $_POST['PNREF'];
}
?>
执行步骤
1. 创建 PayFlowPro 帐户并设置托管结账页面,请记住将返回 URL 配置为 "response.php"(完整 URL)。 只有这样,PayPal 才会重定向回我们的自定义页面 "response.php"
2. 在文件 testpayment.php 中更新 '***' 的相应值并保存该文件,请记住为 'SECURETOKENID' 使用唯一值,您需要在每次测试支付中更改此参数的值。
3. 通过 Apache 服务器浏览文件 testpayment.php,它将自动将页面重定向到 PayFlowPro 托管结账页面。
4. 输入测试信用卡号码并完成支付流程。 页面将重定向回 response.php,该页面将显示 PayPal 中生成的 PNREF 号码。 您可以在此页面上获取测试信用卡号码 https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm
参考
https://developer.paypal.com/docs/classic/products/paypal-payments-pro/
https://developer.paypal.com/docs/classic/payflow/gs_ppa_hosted_pages/
https://www.paypalobjects.com/en_US/vhelp/paypalmanager_help/credit_card_numbers.htm