※ 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




留言
avatar-img
留言分享你的想法!
avatar-img
奧莉薇走在成為後端工程師之路上
18會員
141內容數
全端網頁開發專業知識分享
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 場景: 即時聊天應用: 設計一個支持多房間功能的即時聊天平台,像 WhatsApp、LINE或Facebook Messenger,提供文字、語音、視訊聊天功能,方便管理群組聊天。 功能亮點:加入特別功能,例如可加入多房間功能、使用者名單、表情符號支持、文件分享或訊息已讀未讀狀態。 展示
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/26
※ 先建立基本的express後端服務: 1.建立新資料夾:Socket mkdir socket 2.進入資料夾:Socket cd ​bsocket 3. 安裝 Experss 到專案中 npm init -y //初始化專案,建立 package.json 檔 npm insta
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
2025/04/10
※ 什麼是 Socket.io:一個基於傳統 WebSocket API 之上的框架。 ※ Socket.io常用功能: Custom Events:在 Socket.io 中,開發者可以創建自己的事件來處理特定的功能或需求。 Rooms:分組的功能。每個連接的用戶(或稱為 socket)可
Thumbnail
看更多
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
本文提供完成訂閱後的相關事項及安裝指引,包括填寫問卷、遠端開通Trading View帳號、指標安裝步驟等。另外也提供影片教學和紙本教學,以及解決安裝問題的方法。
Thumbnail
本文提供完成訂閱後的相關事項及安裝指引,包括填寫問卷、遠端開通Trading View帳號、指標安裝步驟等。另外也提供影片教學和紙本教學,以及解決安裝問題的方法。
Thumbnail
Express 是一個流行的 web 框架,使用 JavsScript 實現,執行在 node 環境上,主要用來寫後端應用。
Thumbnail
Express 是一個流行的 web 框架,使用 JavsScript 實現,執行在 node 環境上,主要用來寫後端應用。
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
Thumbnail
JavaScript 套件,頁碼 Pagination.js 搭配 axios API 請求範例
Thumbnail
Accept:用戶端能夠接收的內容類型。 Accept: text/plain, text/html Accept-Charset:瀏覽器可以接受的字元編碼集。 Accept-Charset: utf8 Accept-Encoding:指定瀏覽器可以支援的web伺服器返回內容壓縮編碼
Thumbnail
Accept:用戶端能夠接收的內容類型。 Accept: text/plain, text/html Accept-Charset:瀏覽器可以接受的字元編碼集。 Accept-Charset: utf8 Accept-Encoding:指定瀏覽器可以支援的web伺服器返回內容壓縮編碼
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News