2017-10-20 125 views
0

我正在嘗試將貝寶快速結賬集成與貝寶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文件。我不能使用return paypal.request.get(CREATE_URL,data) 請求來做到這一點。

任何人都可以幫助我。

謝謝。

回答

0

分享一些服務器PHP代碼的例子。

PHP代碼中CREATE_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代碼中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' => '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);