贝宝快速结账与PayPal REST API集成

问题描述:

我正在尝试将贝宝快速结账集成与贝宝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) 请求来做到这一点。

任何人都可以帮助我。

谢谢。

分享一些服务器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);