2015-01-10 3 views
0

온라인 리소스에서 일부 코드를 어셈블 한 dodirectpayment NVP를 사용하여 페이팔 API를 설정하려고 시도했지만 제출할 때 응답이 전혀 없으며 단지 흰색 화면 만 표시됩니다. 내 코드에 에코가없는 것을 알았지 만 paypal에서 보내는 응답을 에코하는 방법을 모르겠습니다. 어떤 도움이라도 좋을 것입니다. 모든 고객 정보와 자격 증명은 모두 샌드 박스에서 가져온 것입니다. 감사!paypal api dodirectpayment nvp php

enter code here <?php 

class Paypal { 
    /** 
    * Last error message(s) 
    * @var array 
    */ 
    protected $_errors = array(); 

    /** 
    * API Credentials 
    * Use the correct credentials for the environment in use (Live/Sandbox) 
    * @var array 
    */ 
    protected $_credentials = array(
     'USER' => 'centerfusiondesign-test_api1.gmail.com', 
     'PWD' => 'JBTYXGQHZY37RXGH', 
     'SIGNATURE' => 'ANRk81o3BhdjleyZOhWslseXywLQAfcftsn6e71ykaqxRzNASgC3NYUn', 
    ); 

    /** 
    * API endpoint 
    * Live - https://api-3t.paypal.com/nvp 
    * Sandbox - https://api-3t.sandbox.paypal.com/nvp 
    * @var string 
    */ 
    protected $_endPoint = 'https://api-3t.sandbox.paypal.com/nvp'; 

    /** 
    * API Version 
    * @var string 
    */ 
    protected $_version = ' 95.0'; 

    /** 
    * Make API request 
    * 
    * @param string $method string API method to request 
    * @param array $params Additional request parameters 
    * @return array/boolean Response array/boolean false on failure 
    */ 
    public function request($method,$params = array()) { 
     $this -> _errors = array(); 
     if(empty($method)) { //Check if API method is not empty 
     $this -> _errors = array('API method is missing'); 
     return false; 
     } 

     //Our request parameters 
     $requestParams = array(
     'METHOD' => $method, 
     'VERSION' => $this -> _version 
    ) + $this -> _credentials; 

     //Building our NVP string 
     $request = http_build_query($requestParams + $params); 

     //cURL settings 
     $curlOptions = array (
     CURLOPT_URL => $this -> _endPoint, 
     CURLOPT_VERBOSE => 1, 
     CURLOPT_SSL_VERIFYPEER => true, 
     CURLOPT_SSL_VERIFYHOST => 2, 
     CURLOPT_CAINFO => dirname(__FILE__) . '/cacert.pem', //CA cert file 
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_POST => 1, 
     CURLOPT_POSTFIELDS => $request 
    ); 

     $ch = curl_init(); 
     curl_setopt_array($ch,$curlOptions); 

     //Sending our request - $response will hold the API response 
     $response = curl_exec($ch); 

     //Checking for cURL errors 
     if (curl_errno($ch)) { 
     $this -> _errors = curl_error($ch); 
     curl_close($ch); 
     return false; 
     //Handle errors 
     } else { 
     curl_close($ch); 
     $responseArray = array(); 
     parse_str($response,$responseArray); // Break the NVP string to an array 
     return $responseArray; 
     } 
    } 
} 

$requestParams = array(
    'IPADDRESS' => $_SERVER['REMOTE_ADDR'], 
    'PAYMENTACTION' => 'Sale' 
); 

$creditCardDetails = array(
    'CREDITCARDTYPE' => 'Visa', 
    'ACCT' => '9229382', 
    'EXPDATE' => '012020', 

); 

$payerDetails = array(
    'FIRSTNAME' => 'John', 
    'LASTNAME' => 'Doe', 
    'COUNTRYCODE' => 'US', 
    'STATE' => 'NY', 
    'CITY' => 'New York', 
    'STREET' => '14 Argyle Rd.', 
    'ZIP' => '10010' 
); 

$orderParams = array(
    'AMT' => '500', 
    'ITEMAMT' => '496', 
    'SHIPPINGAMT' => '4', 
    'CURRENCYCODE' => 'GBP' 
); 

$item = array(
    'L_NAME0' => 'iPhone', 
    'L_DESC0' => 'White iPhone, 16GB', 
    'L_AMT0' => '496', 
    'L_QTY0' => '1' 
); 

$paypal = new Paypal(); 
$response = $paypal -> request('DoDirectPayment', 
    $requestParams + $creditCardDetails + $payerDetails + $orderParams + $item 
); 

if(is_array($response) && $response['ACK'] == 'Failure') { // Payment successful 
    // We'll fetch the transaction ID for internal bookkeeping 
    $transactionId = $response['TRANSACTIONID']; 


} 


?> 

저는 약간 PHP에 익숙해 져서 제 실수가 너무 바보가되고 싶습니다. 감사합니다!

+1

코드에 실제 사용자 이름과 암호가 있습니까? – tobygriffin

+0

Fiddler와 같은 HTTP 디버거를 사용하면 응답 내용을 더 잘 이해할 수 있습니다. – J0e3gan

답변

0

빈 흰색 화면이 나타나면 PHP 오류가 발생하지만 오류보고 기능이 설정되어 있지 않은 것입니다.

스크립트 맨 위에 추가하십시오.

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 

그런 다음 스크립트를 다시 실행하면 오류가 표시됩니다.

+0

내 [PayPal 용 PHP 클래스 라이브러리] (https://github.com/angelleye/paypal-php-library)를 살펴볼 수도 있습니다. DoDirectPayment를 포함한 모든 기능 샘플을 제공하며 PayPal의 SDK보다 훨씬 쉽습니다. –

1

CURL 피어 인증서 확인을 사용하도록 설정 한 것 같습니다. 서버에서 설정하기 전까지는 테스트 목적으로 사용하지 않도록 설정하는 것이 좋습니다.

교체 :

CURLOPT_SSL_VERIFYPEER => true, 
CURLOPT_SSL_VERIFYHOST => 2, 
CURLOPT_CAINFO => dirname(__FILE__) . '/cacert.pem', //CA cert file 

로 :

CURLOPT_SSL_VERIFYPEER => FALSE, 
CURLOPT_SSL_VERIFYHOST => FALSE, 

을 또한, 응답을 확인하기 위해 아래 사항

print_r($response); 

추가

$response = $paypal -> request('DoDirectPayment', 
    $requestParams + $creditCardDetails + $payerDetails + $orderParams + $item 
); 
이 링크에 대해 참조로, 프로에 샌드 박스 비즈니스 계정을 업그레이드 할 수 있습니다, 또한

<?php 
class Paypal { 
    /** 
    * Last error message(s) 
    * @var array 
    */ 
    protected $_errors = array(); 

    /** 
    * API Credentials 
    * Use the correct credentials for the environment in use (Live/Sandbox) 
    * @var array 
    */ 
    protected $_credentials = array(
     'USER' => 'centerfusiondesign-test_api1.gmail.com', 
     'PWD' => 'JBTYXGQHZY37RXGH', 
     'SIGNATURE' => 'ANRk81o3BhdjleyZOhWslseXywLQAfcftsn6e71ykaqxRzNASgC3NYUn', 
    ); 

    /** 
    * API endpoint 
    * Live - https://api-3t.paypal.com/nvp 
    * Sandbox - https://api-3t.sandbox.paypal.com/nvp 
    * @var string 
    */ 
    protected $_endPoint = 'https://api-3t.sandbox.paypal.com/nvp'; 

    /** 
    * API Version 
    * @var string 
    */ 
    protected $_version = ' 95.0'; 

    /** 
    * Make API request 
    * 
    * @param string $method string API method to request 
    * @param array $params Additional request parameters 
    * @return array/boolean Response array/boolean false on failure 
    */ 
    public function request($method,$params = array()) { 
     $this -> _errors = array(); 
     if(empty($method)) { //Check if API method is not empty 
     $this -> _errors = array('API method is missing'); 
     return false; 
     } 

     //Our request parameters 
     $requestParams = array(
     'METHOD' => $method, 
     'VERSION' => $this -> _version 
    ) + $this -> _credentials; 

     //Building our NVP string 
     $request = http_build_query($requestParams + $params); 

     //cURL settings 
     $curlOptions = array (
     CURLOPT_URL => $this -> _endPoint, 
     CURLOPT_VERBOSE => 1, 
     CURLOPT_SSL_VERIFYPEER => FALSE, 
     CURLOPT_SSL_VERIFYHOST => FALSE, 
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_POST => 1, 
     CURLOPT_POSTFIELDS => $request 
    ); 

     $ch = curl_init(); 
     curl_setopt_array($ch,$curlOptions); 

     //Sending our request - $response will hold the API response 
     $response = curl_exec($ch); 

     //Checking for cURL errors 
     if (curl_errno($ch)) { 
     $this -> _errors = curl_error($ch); 
     curl_close($ch); 
     return false; 
     //Handle errors 
     } else { 
     curl_close($ch); 
     $responseArray = array(); 
     parse_str($response,$responseArray); // Break the NVP string to an array 
     return $responseArray; 
     } 
    } 
} 

$requestParams = array(
    'IPADDRESS' => $_SERVER['REMOTE_ADDR'], 
    'PAYMENTACTION' => 'Sale' 
); 

$creditCardDetails = array(
    'CREDITCARDTYPE' => 'Visa', 
    'ACCT' => '9229382', 
    'EXPDATE' => '012020', 

); 

$payerDetails = array(
    'FIRSTNAME' => 'John', 
    'LASTNAME' => 'Doe', 
    'COUNTRYCODE' => 'US', 
    'STATE' => 'NY', 
    'CITY' => 'New York', 
    'STREET' => '14 Argyle Rd.', 
    'ZIP' => '10010' 
); 

$orderParams = array(
    'AMT' => '500', 
    'ITEMAMT' => '496', 
    'SHIPPINGAMT' => '4', 
    'CURRENCYCODE' => 'GBP' 
); 

$item = array(
    'L_NAME0' => 'iPhone', 
    'L_DESC0' => 'White iPhone, 16GB', 
    'L_AMT0' => '496', 
    'L_QTY0' => '1' 
); 

$paypal = new Paypal(); 
$response = $paypal -> request('DoDirectPayment', 
    $requestParams + $creditCardDetails + $payerDetails + $orderParams + $item 
); 
print_r($response); 

if(is_array($response) && $response['ACK'] == 'Failure') { // Payment successful 
    // We'll fetch the transaction ID for internal bookkeeping 
    $transactionId = $response['TRANSACTIONID']; 
} 
?> 

:

나 아래의 전체 코드가 도와 드리겠습니다 https://stackoverflow.com/a/21926016/4410290

희망이 도움이 .. :)

+0

많은 분들께 감사드립니다. –

관련 문제