※ PayPal client

更新於 發佈於 閱讀時間約 8 分鐘

※ 前端串接:

第一步設定paypal JavaScript SDKconfiguration:views --> index.ejs

網址:https://developer.paypal.com/sdk/js/configuration/

raw-image
<!--顯示paypal 按鈕-->
    <div id="paypal-area"></div>

<!--使用paypal JavaScript SDK -->
<script src="https://www.paypal.com/sdk/js?client-id=YOUR_CLIENT_ID"></script>
raw-image

從後端帶入client-id:views --> index.ejs

<script src="https://www.paypal.com/sdk/js?client-id=<%= pay_pal_client_id %>"></script>

從後端帶入client-id路由:routes --> index.ejs

router.get('/', function (_req, res, _next) {

  logger.info('hello Express');

  res.render('index', { title: 'Express', pay_pal_client_id: process.env.PAYPAL_CLIENT_ID,



});
});

程式碼說明:

為確保PayPal 客戶端 ID不會直接在代碼中顯示,pay_pal_client_id設置為 process.env環境變數

.env中加入PayPal client-id:.env

PAYPAL_CLIENT_ID = 你的client-id
PAYPAL_CLIENT_SECRET = 你的CLIENT_SECRET KEY


查詢PayPal client-id路徑:

網址:https://developer.paypal.com/dashboard/applications/sandbox

raw-image

複製PayPal client-id:

raw-image

複製PAYPAL_CLIENT_SECRET:任選一個KEY複製

raw-image

確認client-id從後段放到前端結果

raw-image


PayPal和Javascript平面串接:public --> javascripts --> index.js

將PayPal按鈕放在mounted裡面畫面被渲染前先去執行抓API的動作

 async mounted() {
this.products = await fetch(`${serverDomain}/products/list`)
.then((res) => res.json());

paypal.Buttons({
createOrder: (data, actions)=> {
//串接我們自己的server code.
 //從購買項目中獲取詳細訊息,並將這些訊息存儲在 items
        const items = this.getItemDetailByBuyItems();
const result = await this.sendPayment(`${this.serverDomain}/orders/create`,
{
          paymentProvider: "PAYPAL",
          paymentWay: "PAYPAL",
          contents: items,
        });

        console.log("🚀 ~ mounted ~ result:", result);
        //提取數據
return result.data;
      },
},
  onApprove: (data, actions) => {
        console.log("🚀 ~ mounted ~ data:", data)

      return actions.order.capture();
      }

}).render('#paypal-area');//渲染到指定位置
},

程式碼說明:

  • 使用箭頭函數:使用箭頭函數 (=>) 代替傳統的函數表達式,可以使代碼更簡潔易讀,同時保持上下文的 this 綁定。
  • paypal.Buttons 函數:這個函數初始化網頁上的 PayPal 按鈕。
  • createOrder 函數:當用戶點擊 PayPal 按鈕時,這個函數會被調用。它應該返回一個 Promise,該 Promise 會解決想要創建的訂單 ID。
  • onApprove: (data, actions) 是一個回調函數,它在用戶完成支付批准後被調用
  • data 參數:這個參數包含了有關交易的訊息,例如訂單 ID。
  • actions 參數:這個參數提供了一些方法來處理交易。
  • return actions.order.capture() 是用來「完成交易並確認付款」。
  • render 方法:這個用在網頁的特定元素上顯示 PayPal 按鈕(#paypal-area)。

串接我們自己的server code:

1. const items = this.getItemDetailByBuyItems(); 這行代碼的作用是從某個方法(getItemDetailByBuyItems)中獲取購買項目的詳細訊息,並將其存儲在 items 常量中。用於處理訂單、顯示購買項目的詳情或進行其他相關操作。

2. const result = await this.sendPayment(${this.serverDomain}/orders/create, { ... })

  • 這行代碼使用 await 關鍵字來等待 this.sendPayment 方法的執行結果。
  • this.sendPayment 方法負責向伺服器發送支付請求。它向 ${this.serverDomain}/orders/create URL 發送一個包含支付相關訊息的請求。

請求的 payload 包含三個欄位:paymentProvider(支付提供者,設為 "PAYPAL"),paymentWay(支付方式,設為 "PAYPAL"),以及 contents(購買項目的詳細信息,存儲在 items 中)。

3.return result.data

  • 最後,將 result 返回。這確保 createOrder 函數返回支付請求的結果,使整個支付流程保持連貫。

4. result.data:從伺服器回應對象中提取的數據部分。伺服器回應的數據部分通常包含應用程序需要使用的實際內容,例如訂單詳情、支付訊息等。

簡單地表示支付提供者匹配但尚未實現具體功能:dispatcher --> index.ts

export const paymentDispatcher = async ({
  paymentProvider,
  paymentWay,
  payload,

}: {
...
}) => {

  const ecpay = new ECPayAdapter();

  if (paymentProvider === PaymentProvider.ECPAY) {
...

  } else if (paymentProvider === PaymentProvider.PAYPAL) {

    //TODO

    return "1";//想要空字串

  }
};


將資料寫進資料庫

raw-image
raw-image




全端網頁開發專業知識分享
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
※ PayPal官方文件教學: 網址:https://developer.paypal.com/home/ 第一步:註冊帳號 第二步:註冊商業帳號 第三步:註冊成功 ※ PayPal REST APIs說明: 登入開發者平台:在Sandbox模式開發 網址:https://de
※ 安裝ECPAY SDK(軟體開發工具包): 載點:https://github.com/ECPay/ECPayAIO_Node.js 方法: 1.把code dowonload下來。 在專案中下載ECPAY SDK代碼的原因如下: 參考學習:開發時,可以直接參考 SDK 內的內容。
※ 在前端畫面顯示ECPay: ● 優化前端:views → index.ejs <!-- 新增按鈕 --> <div> <button>綠界支付</button> </div> ● 在Vue 組件的資料定義中,新增buyItem來存儲購買的項目和數量:java
※ 綠界科技API平台: https://www.ecpay.com.tw/ ● 進到開發者中心: ● API串接規格文件: ● 使用SDK來串接Node.JS 的WEB SERVICE: ● 綠界 全方位(All In One)金流介接Node.js 第一版: 載點:htt
※ 利用transactionHandler將資料寫入database ● 在orderController.ts檔案中使用 try...catch 區塊:  try { } catch (err) { // 處理錯誤 res.status(500).json({ errors: e
※ 在orderController.ts檔案中定義createOrder:  public createOrder: IOrderController['createOrder'] = (req, res, _next) => { let { paymentProvider, paym
※ PayPal官方文件教學: 網址:https://developer.paypal.com/home/ 第一步:註冊帳號 第二步:註冊商業帳號 第三步:註冊成功 ※ PayPal REST APIs說明: 登入開發者平台:在Sandbox模式開發 網址:https://de
※ 安裝ECPAY SDK(軟體開發工具包): 載點:https://github.com/ECPay/ECPayAIO_Node.js 方法: 1.把code dowonload下來。 在專案中下載ECPAY SDK代碼的原因如下: 參考學習:開發時,可以直接參考 SDK 內的內容。
※ 在前端畫面顯示ECPay: ● 優化前端:views → index.ejs <!-- 新增按鈕 --> <div> <button>綠界支付</button> </div> ● 在Vue 組件的資料定義中,新增buyItem來存儲購買的項目和數量:java
※ 綠界科技API平台: https://www.ecpay.com.tw/ ● 進到開發者中心: ● API串接規格文件: ● 使用SDK來串接Node.JS 的WEB SERVICE: ● 綠界 全方位(All In One)金流介接Node.js 第一版: 載點:htt
※ 利用transactionHandler將資料寫入database ● 在orderController.ts檔案中使用 try...catch 區塊:  try { } catch (err) { // 處理錯誤 res.status(500).json({ errors: e
※ 在orderController.ts檔案中定義createOrder:  public createOrder: IOrderController['createOrder'] = (req, res, _next) => { let { paymentProvider, paym
你可能也想看
Google News 追蹤
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
※ 補充說明: ※ npm 常用指令: ◦ npm init–y:快速初始化一個新的 Node.js 並建立一個 package.json 文件的命令。 ◦ npm info 套件名稱 version:快速查詢指定 npm 套件的最新版本號。 ◦ npm install套件名稱:用來安裝
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
本文提供完成訂閱後的相關事項及安裝指引,包括填寫問卷、遠端開通Trading View帳號、指標安裝步驟等。另外也提供影片教學和紙本教學,以及解決安裝問題的方法。
Thumbnail
Express 是一個流行的 web 框架,使用 JavsScript 實現,執行在 node 環境上,主要用來寫後端應用。
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
※ Express 專案步驟筆記清單 Node.js 環境建置核對 新增專案資料夾 設定 package.json npm init -y 設定程式入口為 app.js 安裝 Express:npm install express 設定主程式 app.js 建構應用程式伺服器 設定
今天就讓我們依照前一天的情境題,來撰寫測試案例函數吧! 這次同樣地,先讓我們規畫擬訂測試案例: 測試案例 使用者註冊: 使用者可送出註冊資料,系統將建立使用者資料,並送出含有專屬驗證連結之驗證信,當此驗證連結被開啟後,將讓使用者轉為已驗證狀態 請求錯誤的驗證連結: 錯誤的驗證連結被開啟後
前兩天,我們探討了「網站文章」的情境題;今明兩天,就讓我們探討另一個情境題「會員註冊」吧! 這邊我們同樣假設網站是採前後端分離的設計,因此我們就專注在測試 API 的部分,不過會多一個「註冊驗證信」的部分要實作與做測試驗證。 使用案例 使用者可填寫註冊資料後送出資料。 使用者可收到註冊驗證信
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
※ 補充說明: ※ npm 常用指令: ◦ npm init–y:快速初始化一個新的 Node.js 並建立一個 package.json 文件的命令。 ◦ npm info 套件名稱 version:快速查詢指定 npm 套件的最新版本號。 ◦ npm install套件名稱:用來安裝
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
本文提供完成訂閱後的相關事項及安裝指引,包括填寫問卷、遠端開通Trading View帳號、指標安裝步驟等。另外也提供影片教學和紙本教學,以及解決安裝問題的方法。
Thumbnail
Express 是一個流行的 web 框架,使用 JavsScript 實現,執行在 node 環境上,主要用來寫後端應用。
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
※ Express 專案步驟筆記清單 Node.js 環境建置核對 新增專案資料夾 設定 package.json npm init -y 設定程式入口為 app.js 安裝 Express:npm install express 設定主程式 app.js 建構應用程式伺服器 設定
今天就讓我們依照前一天的情境題,來撰寫測試案例函數吧! 這次同樣地,先讓我們規畫擬訂測試案例: 測試案例 使用者註冊: 使用者可送出註冊資料,系統將建立使用者資料,並送出含有專屬驗證連結之驗證信,當此驗證連結被開啟後,將讓使用者轉為已驗證狀態 請求錯誤的驗證連結: 錯誤的驗證連結被開啟後
前兩天,我們探討了「網站文章」的情境題;今明兩天,就讓我們探討另一個情境題「會員註冊」吧! 這邊我們同樣假設網站是採前後端分離的設計,因此我們就專注在測試 API 的部分,不過會多一個「註冊驗證信」的部分要實作與做測試驗證。 使用案例 使用者可填寫註冊資料後送出資料。 使用者可收到註冊驗證信