2017-07-18 41 views
0

這是我第一次嘗試在我的網站實施付款,並且貝寶幾乎沒有什麼東西我覺得很難掌握。貝寶 - 從服務器發送金額

在我的應用程序中,用戶可以上傳他想翻譯的視頻。每個視頻可以翻譯成多種語言。 總價是根據用戶選擇的視頻持續時間和請求的語言來計算的。

在最簡單的方式可能的,我加入這個代碼到我的網站

<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> 
 
     <input type="hidden" name="cmd" value="_xclick"> 
 
     <input type="hidden" name="business" value="myFakeBusinees"> 
 
     <input type="hidden" name="item_name" [value]="transactionId"> 
 
     <input type="hidden" name="currency_code" value="USD"> 
 
     <input type="hidden" name="amount" [value]="totalPrice"> 
 
     <input type="image" src="http://www.paypal.com/en_US/i/btn/x-click-but01.gif" name="submit" (click)="submit()"> 
 
     <input type="submit" value="Paypal"/> 
 
    </form>

在貝寶我配置了一個RETURNURL到我的服務器,並付款後,我的總結顯示用戶。

這種方法的問題是用戶可以從客戶端更改隱藏字段的數量。儘管我可以在調用returnUrl之後檢查服務器中的付款金額,但我不想啓用這種情況。

我試圖讀取服務器API,但我不確定它做我想要的。 我想過以下流程,並想知道這是否正確,以及如果貝寶支持這一點。

流量:

  • 用戶創建客戶的訂單。每個訂單都有一個transactionId
  • 當用戶點擊付款按鈕時,客戶端發送一個帶有transactionId的請求到服務器。
  • 服務器計算totalPrice,併發送payapel爲此金額創建一個令牌。服務器向客戶端返回令牌。
  • 客戶收回令牌並正在導航到貝寶。
  • 在貝寶網站,用戶選擇他的付款方式並付款。貝寶服務器比將這個令牌的確認返回給myserver。
  • 我的服務器根據transactionId檢查令牌,如果一切正常,則向用戶顯示「您的訂單已創建」頁面。

任何幫助將非常感激。我想要弄明白文件中的流程有點困難。

回答

1

基本上你想要做的是調用API createOrder在後端(見下面的代碼的NodeJS),當在付款按鈕用戶點擊並獲得return_url並使用了window.location如cancel_url 從前端:window.location的.origin +'/ success-url',以便在本地服務器, 階段和生產測試時沒有問題。然後當用戶重定向到https://example.com/success-url時,paymentIdPayerID將通過 payapal傳遞到URL本身,然後從該頁面您可以在您的後端調用executeOrder

這裏是鏈接到documentation

下面是一個示例的NodeJS代碼:

exports.createOrder = (data, callback) => { 
    /* First step when user clicks 'Pay with paypal' on place-order screen */ 
    var create_payment_json = { 
    "intent": "sale", 
    "payer": { 
     "payment_method": "paypal" 
    }, 
    "redirect_urls": { 
     "return_url": data.return_url, 
     "cancel_url": data.cancel_url 
    }, 
    "transactions": [{ 
     "amount": { 
     "total": getAmountFromNoOFVideos(), 
     "currency": "USD" 
     }, 
     "description": "Video Translation" 
    }] 
    }; 

    paypal.payment.create(create_payment_json, function (error, payment) { 
    if (error) { 
     callback(error); 
    } else { 
     if(payment.payer.payment_method === 'paypal') { 
     for(var i=0; i < payment.links.length; i++) { 
      var link = payment.links[i]; 
      if (link.method === 'REDIRECT') { 
      redirectUrl = link.href; 
      } 
     } 
     } 
     callback(null, redirectUrl, payment.id) 
    } 
    }); 
} 

exports.executeOrder = (data, callback) => { 
    /* Second and final step in place-order screen */ 
    let paymentId = data.paymentId; 
    let PayerID = data.PayerID; 

    var details = { "payer_id": PayerID }; 
    paypal.payment.execute(paymentId, details, function (error, payment) { 
    if (error) { 
     console.log("\x1b[31m", "PAYPAL ERROR: ", error) 
     callback(error); 
    } else { 
     callback(null, true); 
    } 
    }); 
} 

PayPal的流程: - 假設你的網站鏈接是www.videotranslate.com

  1. 用戶點擊收費您的網站上的按鈕www.videotranslate.com
  2. 您從您的角度成分/服務(根據你的設計)
  3. 在AJAX的成功函數中調用你從createOrder功能redirectUrl 在後臺做一個AJAX調用API www.videotranslate.com/api/createOrder
  4. 當用戶做出了通過支付寶付款成功PayPal將 用戶重定向到www.videotranslate.com/success-callback
  5. 現在這個頁面上您從角
  6. 一個AJAX調用API www.videotranslate.com/api/executeOrder如果用戶取消了對PayPal付款,PayPal會將用戶重定向到 www.videotranslate.com/cancel-callback,在這裏您可以顯示一個錯誤 吐司並要求用戶再次付款。
+0

首先,非常感謝您的幫助。 可以請你幫我幾個問題: 1.誰在調用createOrder?我的客戶或PayPal 2.請求的流程是什麼 - 誰(客戶端,服務器,貝寶)在調用每個函數? 3.如果執行訂單執行付款交易,爲什麼我需要使用createOrder? –

+0

1.您的客戶調用'createOrder'。 2我編輯ans來演示流程 – Dhyey