2014-07-05 83 views
0

我使用信用卡支付寶付款代碼從下面定點
失敗的信用卡與支付寶付款

http://code.tutsplus.com/tutorials/how-to-process-credit-cards-with-paypal-payments-pro-using-php--net-25397 

,並從這裏 -

https://www.paypal.com/uk/cgi-bin/webscr?cmd=_profile-api-signature 

得到了我的API證書,我輸入我的API用戶名,API密碼和簽名,但它返回「ACK =失敗」。我按照其意見,但沒有得到正確的解決方案,我的代碼是 -
包括/ config.php文件

// Set sandbox (test mode) to true/false. 
$sandbox = TRUE; 
// Set PayPal API version and credentials. 
$api_version = '85.0'; 
$api_endpoint = $sandbox ? 'https://api-3t.sandbox.paypal.com/nvp' : 'https://api-3t.paypal.com/nvp'; 
$api_username = $sandbox ? 'SANDBOX_USERNAME_GOES_HERE' : 'LIVE_USERNAME_GOES_HERE'; 
$api_password = $sandbox ? 'SANDBOX_PASSWORD_GOES_HERE' : 'LIVE_PASSWORD_GOES_HERE'; 
$api_signature = $sandbox ? 'SANDBOX_SIGNATURE_GOES_HERE' : 'LIVE_SIGNATURE_GOES_HERE'; 

工藝信用card.php

// Include config file 
require_once('includes/config.php'); 

// Store request params in an array 
$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' => '022013',   
        '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); 

var_dump($result); 

// Parse the API response 
$nvp_response_array = parse_str($result); 




// Function to convert NTP string to an array 
function NVPToArray($NVPString) 
{ 
    $proArray = array(); 
    while(strlen($NVPString)) 
    { 
     // name 
     $keypos= strpos($NVPString,'='); 
     $keyval = substr($NVPString,0,$keypos); 
     // value 
     $valuepos = strpos($NVPString,'&') ? strpos($NVPString,'&'): strlen($NVPString); 
     $valval = substr($NVPString,$keypos+1,$valuepos-$keypos-1); 
     // decoding the respose 
     $proArray[$keyval] = urldecode($valval); 
     $NVPString = substr($NVPString,$valuepos+1,strlen($NVPString)); 
    } 
    return $proArray; 
} 

錯誤

ACK=Failure 
L_SHORTMESSAGE0=Security error 
L_LONGMESSAGE0=Security header is not valid 

如何解決這個問題?

回答

0

很簡單的谷歌搜索想出了這個: http://www.prestashop.com/forums/topic/125029-security-header-is-not-valid-read-first/

它說:

[...]您憑據不正確或 [...] 您使用 SandBox證書與生產模式(或生產憑證 沙盒模式)。如果您正在進行生產,您必須檢查 非活動SandBox模式(請務必填寫您的生產憑證 而不是您的沙箱憑證填寫配置表單)。

並補充說:

如果問題沒有從測試模式,這意味着您的憑據是不正確的到來。

所以我會從那裏開始。

此外,而不是與foreach結構手動創建查詢字符串,試圖尋找到http-build-query()功能:http://php.net/manual/en/function.http-build-query.php