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

时间:2017-02-01 17:34:27

标签: php html security paypal

我有一个3页的结帐流程。第一页是客户信息。第二页是卡片信息。第三页是评论&确认订单。

我正在使用paypal api处理付款处理。现在我的付款页面设置了一个存储在一个数组中的paypal api的请求参数,并在客户点击确认&付款,我通过paypal api发送请求。这是处理信用卡付款的正确方法吗?我是否只需使用mcrypt或其他加密方法存储$nvp_string?或暂时存储在数据库中并在支付订单后删除信息?

Payment Information Page

// 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);    
}

Confirm & Pay Page

// 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);

1 个答案:

答案 0 :(得分:1)

在数据库中存储变量以实现3个步骤,这个想法确实充满了问题。首先,您永远不想进入信用卡信息存储业务,它可能实际上是基于您的支付提供商和其他因素对TOS。你也必须考虑废弃过程之类的东西。

当我建立这样的网站时,我会有3个(或更多)步骤,但它只在一个页面中。建立3个不同的屏幕"在一个文件上的div / templates中,然后在不更改文件的情况下在这些div / templates之间切换。这样,数据仍然是一种常见形式(跨越3个div /模板),我根本不必处理会话或数据库中变量的存储。它也可以快速切换。实际上,您唯一考虑任何重要性的是处理后退按钮行为,这可以通过URL散列来完成。当您到达流程中的最后一个屏幕时,只需提交表单即可。