iT邦幫忙

2023 iThome 鐵人賽

DAY 19
0
WordPress

透過WordPress架設電商網站,並串接管理後台系列 第 19

«D19»取得 WooCommerce Webhook 的資料

  • 分享至 

  • xImage
  •  

今天要讓 WooCommerce 可以接上昨天的 Webhook 網址

from flask import Flask, request

今天的 flask 要多引入一個 request,他跟 requests 不同前者是當有人與伺服器連接時,取得連接的資料,例如:request.method, request.form, request.args, request.headers, request.json;後者是單純用於發送 HTTP request 的模組

# 引入 flask & requests
from flask import Flask, request
import requests

Webhook method POST

昨天為了方便測試先用 methods=['GET'],今天換成 POST

@app.route('/', methods=['POST'])
def webhook():
    if request.method == 'POST':
        data = f"Data received : {request.json}"
        return data, 200

然後原本的 def new_order(): 稍微修改後保留,之後只要呼叫 new_order() 就會直接傳送資料到訂單了!

def new_order(order_id, name, email, phone, state, town, address, price):
    params = {'api': '','v': 3}
    data = {
        # 表格編號直接使用數字即可,不需要 '' 變為字串
        '表格編號': order_id,
        '表格編號 2': name,
        '表格編號 3': email,
        '表格編號 4': phone,
        '表格編號 5': state,
        '表格編號 6': town,
        '表格編號 7': address,
        '表格編號 8': price,
    }
    ENDPOINT = f'https://{ragic_BASE_URL}/formsx/x'  # 在這個表單新增資料
    response = requests.post(ENDPOINT, params=params, json=data, headers={'Authorization': 'Basic '+ragic_API_KEY})
    # 使用 f-string 可以透過 {} 呼叫其他函數。後面的 200 代表伺服器回傳,找不到網頁的 404 也是這邊定義的!
    return f'Success sent to Ragic {response.text}', 200

一樣請記得儲存程式碼,並到 Setup Python App 裡面重新啟動

這時候你會發現如果直接到 /webhook 會顯示 Method Not Allowed,這是因為我們改成 POST,而瀏覽器對伺服器的請求都是 GET
https://ithelp.ithome.com.tw/upload/images/20230926/20162937V1NH51zftd.png

到 WooCommerce 設定 Webhook 網址

https://ithelp.ithome.com.tw/upload/images/20230926/20162937M98bRdHBBG.png

完整程式碼

# 引入 flask & requests
from flask import Flask, request
import requests

# Ragic 設定
ragic_BASE_URL = 'ap2.ragic.com/your_database'
ragic_API_KEY = 'xxx'

# 這裡的 app 就是剛剛設定的 Application Entry point
app = Flask(__name__)

# 到 WooCommerce 輸入 your_domain.com/webhook,當觸發條件,他就會 POST 資料到這邊,你可以透過 print(data) 看到他
@app.route('/', methods=['POST'])
# 進到 route 之後要執行的東東。新增訂單的 def
def webhook():
    if request.method == 'POST':
        data = f"Data received : {request.json}"
        print(data)
        return 'Webhook received!', 200

# new_order() 留著
def new_order(order_id, name, email, phone, state, town, address, price):
    params = {'api': '','v': 3}
    data = {
        # 表格編號直接使用數字即可,不需要 '' 變為字串
        '表格編號': order_id,
        '表格編號 2': name,
        '表格編號 3': email,
        '表格編號 4': phone,
        '表格編號 5': state,
        '表格編號 6': town,
        '表格編號 7': address,
        '表格編號 8': price,
    }
    ENDPOINT = f'https://{ragic_BASE_URL}/formsx/x'  # 在這個表單新增資料
    response = requests.post(ENDPOINT, params=params, json=data, headers={'Authorization': 'Basic '+ragic_API_KEY})
    # 使用 f-string 可以透過 {} 呼叫其他函數。後面的 200 代表伺服器回傳,找不到網頁的 404 也是這邊定義的!
    return f'Success sent to Ragic {response.text}', 200

if __name__ == '__main__':
    app.run()

明天來處理資料。如果有興趣自己接的,可以到 https://webhook.site/ ,在 WooCommerce Webhook 中輸入他給你的網址後,直接在網頁內看會收到的 POST 資料,然後在 Python 中自訂處理流程,很推薦直接把取得的 POST 資料丟給 ChatGPT 請他幫寫資料處理的程式碼。

另外關於 Webhook 可以參考:https://blog.logrocket.com/receive-webhooks-python-flask-or-django/


上一篇
«D18»新增 Ragic API 至 A2 Hosting 的 Python Flask
下一篇
«D20»整理 WooCommerce Webhook 資料
系列文
透過WordPress架設電商網站,並串接管理後台30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言