2017-08-24 76 views
0

我在名爲pp.js的腳本中運行以下代碼。我在我的index.html上運行這個頁面加載測試。我使用最新的webpack模塊捆綁每個源文件。使用節點js運行PayPal API時出錯

var paypal = require('paypal-rest-sdk'); 

    var user_config ={ 
     'mode': 'sandbox', //sandbox or live 
     'client_id': 'xxxxxxx', 
     'client_secret': 'xxxxxxx' 
     }; 

    paypal.configure(user_config); 

    var create_payment_json = { 
     "intent": "sale", 
     "payer": { 
      "payment_method": "paypal" 
     }, 
     "redirect_urls": { 
      "return_url": "http://return.url", 
      "cancel_url": "http://cancel.url" 
     }, 
     "transactions": [{ 
      "item_list": { 
       "items": [{ 
        "name": "item", 
        "sku": "item", 
        "price": "1.00", 
        "currency": "USD", 
        "quantity": 1 
       }] 
      }, 
      "amount": { 
       "currency": "USD", 
       "total": "1.00" 
      }, 
      "description": "This is the payment description." 
     }] 
    }; 

// TILL HERE THERE IS NO ERROR 

    paypal.payment.create(create_payment_json, function (error, payment) { 
     if (error) { 
      console.log("There seems to be some error... I hope it can be corrected."); 
      throw error; 
     } else { 
      console.log("Create Payment Response"); 
      console.log(payment); 
     } 
    }); 

當碼的最後一位即運行paypal.payment.create(create_ ...我收到我的瀏覽器的控制檯下面的錯誤。

Error thrown into the console

如何糾正呢?

回答

1

這段代碼應該在服務器端運行。在貝寶SDK追蹤同一個問題:https://github.com/paypal/PayPal-node-SDK/issues/220

報價1(從聯票)

請參閱#149 (comment)。看起來你正試圖在瀏覽器中運行這個代碼,這可能是一個安全問題。如果用戶有權訪問您的憑證或擁有訪問令牌,則他們可以做任何您可以作爲商家執行的操作(例如,創建更多支付,退還人員資金等)。

報價2(從#149 ticket):

我做了一些更多的研究。顯然,這個request.js:54 Uncaught Error: Invalid value for opts.mode.錯誤來自stream-http/request.js版本。我猜你試圖在瀏覽器中使用browserify並使用stream-http來模擬node.js的內置http模塊。

您是否試圖在瀏覽器中運行此SDK代碼(而不是在服務器端的node.js進程中)?

此node.js SDK只應在安全服務器上使用。我使用browserify的經驗非常有限。除非我弄錯了,否則您需要讓此SDK訪問您的客戶端ID和客戶端密碼才能使此SDK正常工作,並且如果您的代碼在瀏覽器中運行,則您將向任何瀏覽器客戶端公開證書。這將允許任何客戶能夠對您的帳戶執行任何操作(例如,退還您的所有付款)。

如果只是代碼的一部分打算在瀏覽器中運行,另一部分在服務器上但代碼全部在一個項目中,我建議將代碼分成兩個不同的項目,其中包含不同的package.json文件所以你可以有單獨的依賴關係。

+0

你是對的!當我在DOS命令行中運行包含來自節點運行時環境的API代碼的javascrip文件時,它完美地工作。感謝您的參考。感謝您的幫助@jannis! –