Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这是处理信用卡付款的正确方式吗?_Php_Html_Security_Paypal - Fatal编程技术网

Php 这是处理信用卡付款的正确方式吗?

Php 这是处理信用卡付款的正确方式吗?,php,html,security,paypal,Php,Html,Security,Paypal,我有一个3页的结账流程。第一页是客户信息。第二页是卡片信息。第三页为订单审核确认页 我正在使用paypal api处理付款处理。现在,我已经设置了paypal api的付款页面,其中的请求参数存储在一个数组中,在客户单击confirm&pay之后,我通过paypal api发送请求。这是处理信用卡付款的正确方式吗?我是否需要使用mcrypt或其他加密方法来存储$nvp_字符串?或者在订单付款后临时存储在数据库中并删除信息 付款信息页面 // Store request params in an

我有一个3页的结账流程。第一页是客户信息。第二页是卡片信息。第三页为订单审核确认页

我正在使用paypal api处理付款处理。现在,我已经设置了paypal api的付款页面,其中的请求参数存储在一个数组中,在客户单击confirm&pay之后,我通过paypal api发送请求。这是处理信用卡付款的正确方式吗?我是否需要使用mcrypt或其他加密方法来存储
$nvp_字符串
?或者在订单付款后临时存储在数据库中并删除信息

付款信息页面

// 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);
确认和付款页面

// 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/templates中构建3个不同的“屏幕”,然后在这些div/templates之间切换,而不更改文件。这样,数据仍然是一种常见的形式(跨越3个div/模板),我根本不需要处理会话或数据库中变量的存储。在这两者之间切换也很快。实际上,您唯一需要考虑的是处理后退按钮行为,这可以通过URL哈希来实现。当您到达流程中的最后一个屏幕时,只需提交表单。

使用此方法意味着我必须将所有表单验证重新转换为javascript,然后更正?因为我直到最后才“发布”信息?是的,在这两种情况下,您都希望通过前端验证来增强后端验证(无需更改),因为在表单提交前“唧唧喳喳”比在表单提交后处理更方便用户…这也更高效,尤其是在像信用卡支付这样的高度容易出错的操作中。然而,客户端验证本身不够可靠,因为任何客户端验证都可以通过正确的知识绕过。