我有一个 3 页的结帐流程。第一页是客户信息。第二页是卡片信息。第三页是审查和确认订单。
我正在使用 paypal api 来处理付款。现在我设置了支付页面,其中存储在数组中的 paypal api 请求参数,在客户点击确认并付款后,我通过 paypal api 发送请求。这是处理信用卡付款的正确方法吗?我是否只需要使用 mcrypt 或其他一些加密方法来存储 $nvp_string
?还是暂存在数据库中,订单支付后删除信息?
支付信息页面
// Store request params in an array THESE ARE STATIC VARIABLES FOR TESTING
$request_params = array
(
'METHOD' => 'DoDirectPayment',
'USER' => $api_username,
'PWD' => $api_password,
'SIGNATURE' => $api_signature,
'VERSION' => $api_version,
'PAYMENTACTION' => 'Sale',
'IPADDRESS' => $_SERVER['REMOTE_ADDR'],
'CREDITCARDTYPE' => 'MasterCard',
'ACCT' => '5522340006063638',
'EXPDATE' => '022018',
'CVV2' => '456',
'FIRSTNAME' => 'Tester',
'LASTNAME' => 'Testerson',
'STREET' => '707 W. Bay Drive',
'CITY' => 'Largo',
'STATE' => 'FL',
'COUNTRYCODE' => 'US',
'ZIP' => '33770',
'AMT' => '100.00',
'CURRENCYCODE' => 'USD',
'DESC' => 'Testing Payments Pro'
);
// Loop through $request_params array to generate the NVP string.
$nvp_string = '';
foreach($request_params as $var=>$val)
{
$nvp_string .= '&'.$var.'='.urlencode($val);
}
确认并支付页面
// Send NVP string to PayPal and store response
$curl = curl_init();
curl_setopt($curl, CURLOPT_VERBOSE, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_URL, $api_endpoint);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $nvp_string);
$result = curl_exec($curl);
curl_close($curl);
// Parse the API response
$nvp_response_array = parse_str($result);
最佳答案
在数据库中为三步流程存储变量是一个充满问题的想法。首先,您永远不想涉足信用卡信息存储业务,而且根据您的支付提供商和其他因素,它实际上可能违反 TOS。您还必须考虑诸如废弃流程之类的事情。
当我构建这样的网站时,我会有一个 3(或更多)步骤的过程,但它都在一个页面中。在一个文件的 div/模板中构建 3 个不同的“屏幕”,然后在不更改文件的情况下在这些 div/模板之间切换。这样,数据仍然是一种通用形式(跨越 3 个 div/模板),我根本不必处理 session 或数据库上的变量存储。在两者之间切换也非常快。实际上,您唯一要考虑的重要事项是处理后退按钮行为,这可以通过 URL 散列来完成。当您到达流程的最后一个屏幕时,只需提交表单即可。
关于php - 这是处理信用卡付款的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41986076/