【问题标题】:Is this a proper way to handle credit card payments?这是处理信用卡付款的正确方法吗?
【发布时间】:2017-06-18 13:43:15
【问题描述】:

我有一个 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);

【问题讨论】:

    标签: php html security paypal


    【解决方案1】:

    在数据库中存储变量以进行 3 步过程是一个真正充满问题的想法。一方面,您永远不想涉足信用卡信息存储业务,而且根据您的支付提供商和其他因素,它实际上可能违反 TOS。您还必须考虑诸如废弃流程之类的事情。

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

    【讨论】:

    • 使用这种方法意味着我必须将我所有的表单验证重新输入到 javascript 中,然后正确吗?因为直到最后我都不再“发布”信息了?
    • 是的,无论哪种情况,您都希望通过前端验证来增强后端验证(不必更改),因为之前“啁啾”对用户更加友好表单提交比事后处理...它也更有效,特别是在信用卡支付等极易出错的操作中。但是,客户端验证不够可靠,无法独立存在,因为任何客户端都可以通过正确的知识绕过。
    猜你喜欢
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2020-02-29
    相关资源
    最近更新 更多