2017-10-20 8 views
0

PayPal Express 통합을 PayPal REST API와 통합하려고합니다.PayPal REST API와의 빠른 통합 체크

JS 파일은 다음과 같다 :

paypal.Button.render({ 
    env: 'sandbox', // sandbox | production 
    commit: true, 
    payment: function() { 
     var CREATE_URL = 'createpayment'; 

     return paypal.request.get(CREATE_URL) 
      .then(function(res) { 
       return res.paymentID; 
      }); 
    }, 

    onAuthorize: function(data, actions) { 
     var EXECUTE_URL = 'executepayment'; 
     var data = { 
      paymentID: data.paymentID, 
      payerID: data.payerID 
     }; 
     return paypal.request.post(EXECUTE_URL, data) 
      .then(function (res) { 
       window.alert('Payment Complete!'); 
      }); 
    } 

}, '#paypal-button-container'); 

지금은 CREATE_URL해야하며 EXECUTE_URL의 URL의 PHP 파일해야하는지 알아낼 수 없습니다. 나는 그들의 많은 문서를 읽었다. 나는 php에서 토큰을 얻으려면 먼저 요청을해야한다는 것을 이해하고, 작성 - 지불 요청을하고 실행 - 지불 curl reuqest를 수행해야한다. 하지만 나는 운이 없다.

나는 또한 어떻게 지불 값을 CREATE_URL PHP 파일에 전달해야하는지 이해하지 못합니다.

며칠 전 모든 예제에서 내 질문에 대한 좋은 답변을 찾았지만 찾을 수없는 이틀 정도였습니다.

업데이트 : 또한 입금액을 지불 요청에서 PHP 파일로 전달해야합니다. 그리고 저는 paypal.request.get (CREATE_URL, data) 리턴요청을 사용하여 그렇게 할 수 없습니다.

아무나 도와주세요.

감사합니다.

답변

0

서버 PHP 코드에 대한 몇 가지 예를 들려주십시오. CREATE_URL에서

PHP 코드 : EXECUTE_URL에서

<?php 
 
    $curl = curl_init(); 
 
     
 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
 
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
 
    curl_setopt($curl, CURLOPT_POST, true); 
 
    curl_setopt($curl, CURLOPT_URL, 'https://api-3t.sandbox.paypal.com/nvp'); 
 
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query(array(
 
     'USER' => 'xxxxx', 
 
     'PWD' => 'xxxxx', 
 
     'SIGNATURE' => 'xxxxx', 
 
     
 
     'METHOD' => 'SetExpressCheckout', 
 
     'VERSION' => '108', 
 
     'LOCALECODE' => 'en_US', 
 
     
 
     'PAYMENTREQUEST_0_AMT' => 100, 
 
     'PAYMENTREQUEST_0_CURRENCYCODE' => 'USD', 
 
     'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale', 
 
     'PAYMENTREQUEST_0_ITEMAMT' => 100, 
 
     
 
     'L_PAYMENTREQUEST_0_NAME0' => 'test name', 
 
     'L_PAYMENTREQUEST_0_DESC0' => 'test desc', 
 
     'L_PAYMENTREQUEST_0_QTY0' => 1, 
 
     'L_PAYMENTREQUEST_0_AMT0' => 100, 
 
     
 
     'CANCELURL' => 'http://localhost/cancel.html', 
 
     'RETURNURL' => 'http://localhost/success.html' 
 
    ))); 
 
     
 
    $response = curl_exec($curl); 
 
     
 
    curl_close($curl); 
 
     
 
    $nvp = array(); 
 
     
 
    if (preg_match_all('/(?<name>[^\=]+)\=(?<value>[^&]+)&?/', $response, $matches)) { 
 
     foreach ($matches['name'] as $offset => $name) { 
 
      $nvp[$name] = urldecode($matches['value'][$offset]); 
 
     } 
 
    } 
 
    if (isset($nvp['ACK']) && $nvp['ACK'] == 'Success') { 
 
     echo $nvp['TOKEN']; 
 
    } else { 
 
     //failed 
 
    } 
 

 
    ?>

PHP 코드 :

<?php 
 
$curl = curl_init(); 
 
    
 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
 
curl_setopt($curl, CURLOPT_POST, true); 
 
curl_setopt($curl, CURLOPT_URL, 'https://api-3t.sandbox.paypal.com/nvp'); 
 
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query(array(
 
    'USER' => 'xxxxx', 
 
    'PWD' => 'xxxxx', 
 
    'SIGNATURE' => 'xxxxx', 
 
    
 
    'METHOD' => 'DoExpressCheckoutPayment', 
 
    'VERSION' => '108', 
 
    'LOCALECODE' => 'en_US', 
 
    
 
    'TOKEN' => $_POST['TOKEN'], 
 
    'PayerID' => $_POST['PAYERID'], 
 
    
 
    'PAYMENTREQUEST_0_AMT' => 100, 
 
    'PAYMENTREQUEST_0_CURRENCYCODE' => 'USD', 
 
    'PAYMENTREQUEST_0_PAYMENTACTION' => 'Sale', 
 
    'PAYMENTREQUEST_0_ITEMAMT' => 100, 
 
     
 
    'L_PAYMENTREQUEST_0_NAME0' => 'test name', 
 
    'L_PAYMENTREQUEST_0_DESC0' => 'test desc', 
 
    'L_PAYMENTREQUEST_0_QTY0' => 1, 
 
    'L_PAYMENTREQUEST_0_AMT0' => 100, 
 
))); 
 
    
 
$response = curl_exec($curl); 
 
    
 
curl_close($curl); 
 
    
 
$nvp = array(); 
 
    
 
if (preg_match_all('/(?<name>[^\=]+)\=(?<value>[^&]+)&?/', $response, $matches)) { 
 
    foreach ($matches['name'] as $offset => $name) { 
 
     $nvp[$name] = urldecode($matches['value'][$offset]); 
 
    } 
 
} 
 
    
 
print_r($nvp);