※ PayPal client

更新 發佈閱讀 8 分鐘

※ 前端串接:

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

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

vocus|新世代的創作平台
<!--顯示paypal 按鈕-->
    <div id="paypal-area"></div>

<!--使用paypal JavaScript SDK -->
<script src="https://www.paypal.com/sdk/js?client-id=YOUR_CLIENT_ID"></script>
vocus|新世代的創作平台

從後端帶入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

vocus|新世代的創作平台

複製PayPal client-id:

vocus|新世代的創作平台

複製PAYPAL_CLIENT_SECRET:任選一個KEY複製

vocus|新世代的創作平台

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

vocus|新世代的創作平台


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";//想要空字串

  }
};


將資料寫進資料庫

vocus|新世代的創作平台
vocus|新世代的創作平台




留言
avatar-img
奧莉薇走在成為後端工程師之路上
28會員
171內容數
全端網頁開發專業知識分享
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
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
※ 原本狀態:伺服器渲染 這是 MVC 架構下的 request / response 示意圖,在這張圖呈現的架構裡,畫面和資料都由同一個架構處理。 伺服器渲染流程: 瀏覽器針對特定網址送出請求。 路由器解析請求後,轉接給對應的 controller。 controller 按照要求,透過
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
Express 是一個流行的 web 框架,使用 JavsScript 實現,執行在 node 環境上,主要用來寫後端應用。
Thumbnail
Express 是一個流行的 web 框架,使用 JavsScript 實現,執行在 node 環境上,主要用來寫後端應用。
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
※ 什麼是Web API API 就是後端開出來讓前端來用的介面,讓前端與後端可以溝通。 API流程: 終端使用者用任何一種裝置進入瀏覽器。 瀏覽器透過 API 向後端發出請求,請求查詢或修改資料。 後端透過 API 收到前端的請求後,取得資料並回應給前端。 前端渲染畫面,終端使用者
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
這是一場修復文化與重建精神的儀式,觀眾不需要完全看懂《遊林驚夢:巧遇Hagay》,但你能感受心與土地團聚的渴望,也不急著在此處釐清或定義什麼,但你的在場感受,就是一條線索,關於如何找著自己的路徑、自己的聲音。
Thumbnail
本文提供完成訂閱後的相關事項及安裝指引,包括填寫問卷、遠端開通Trading View帳號、指標安裝步驟等。另外也提供影片教學和紙本教學,以及解決安裝問題的方法。
Thumbnail
本文提供完成訂閱後的相關事項及安裝指引,包括填寫問卷、遠端開通Trading View帳號、指標安裝步驟等。另外也提供影片教學和紙本教學,以及解決安裝問題的方法。
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
背景:從冷門配角到市場主線,算力與電力被重新定價   小P從2008進入股市,每一個時期的投資亮點都不同,記得2009蘋果手機剛上市,當時蘋果只要在媒體上提到哪一間供應鏈,隔天股價就有驚人的表現,當時光學鏡頭非常熱門,因為手機第一次搭上鏡頭可以拍照,也造就傳統相機廠的殞落,如今手機已經全面普及,題
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News