Python3+Django2集成PayPal(貝寶)跨境支付三方接口以及訂單查詢和退款業務

原文轉載自「劉悅的技術博客」https://v3u.cn/a_id_157

如果您所在的公司涉及外貿或者跨境支付業務,那一定聽說過大名鼎鼎的PayPal,總的來說,PayPal在跨國貿易裏的優勢還是比較大的,作爲一種外貿支付方式,目前在國際貿易支付服務中倍受億萬用戶追捧,是全球商戶和消費者最受歡迎的電子支付方式之一,在跨境交易中有着超過90%的賣家和超過85%的買家認可並正在使用PayPal電子支付業務。當然,PayPal國際業務體量如此驚人,肯定不是毫無原因的。

PayPal支付的優勢就是其業務網絡遍佈全球。目前PayPal的龐大網絡覆蓋了全球200多個國家,可提供20多種語言服務,並接受100多種貨幣付款和56種貨幣提現。同時,還允許在賬戶中持有25種貨幣餘額。換句話說,只要付款人擁有一個PayPal賬戶,他就擁有了在200多個國家進行電子支付購物,並在需要服務的時候享受到母語支持的各種便捷服務。

之前的幾篇文章分別介紹了國內的支付寶支付:Python3.7.2+Django2.0.4 美多商城集成最新版支付寶支付接口(2019.04)和微信支付:mpvue1.0+python3.7+Django2.0.4實現微信小程序的支付功能

本次我們首次嘗試用Django2來集成跨境三方支付接口PayPal

首先註冊官網 https://www.paypal.com 以及開發者平臺:https://developer.paypal.com/developer/accounts/

註冊成功後,在沙盒的賬號控制頁面:https://developer.paypal.com/developer/accounts/

會默認創建兩個賬號,一個是商戶的,另外一個是個人的

我們演示的流程就是以個人賬號登錄三方網站對商戶賬號進行支付業務,當然了,如果你不想使用默認賬號,也可以點擊右邊的Create account的藍色按鈕單獨創建。

隨後進入應用管理頁面:https://developer.paypal.com/developer/applications/

這裏已經默認創建好了一個支付應用,記錄下它的client_id和client_secret,一會要用到

隨後,我們可以回到賬號管理頁面修改一下個人賬號的支付餘額

額度設置最高

如果願意,也可以修改一下登錄密碼,因爲一會我們會用這個賬號進行登錄操作,注意這些登錄和支付操作全都會在沙盒環境中完成,完全不會影響生產環境的使用

ok,做完了這些,前置任務就搞定了,現在運行命令安裝paypal在python端的sdk

pip3 install paypalrestsdk

現在可以在django中新建一個支付視圖views.py

import paypalrestsdk  
  
  
  
def payment(request):  
  
    paypalrestsdk.configure({  
  "mode": "sandbox", # sandbox代表沙盒  
  "client_id": "你的client_id,  
  "client_secret": "你的client_secret" })  
  
    payment = paypalrestsdk.Payment({  
        "intent": "sale",  
        "payer": {  
            "payment_method": "paypal"},  
        "redirect_urls": {  
            "return_url": "http://localhost:8000/palpay/pay/",#支付成功跳轉頁面  
            "cancel_url": "http://localhost:3000/paypal/cancel/"},#取消支付頁面  
        "transactions": [{  
            "amount": {  
                "total": "5.00",  
                "currency": "USD"},  
            "description": "這是一個訂單測試"}]})  
  
    if payment.create():  
        print("Payment created successfully")  
        for link in payment.links:  
            if link.rel == "approval_url":  
                approval_url = str(link.href)  
                print("Redirect for approval: %s" % (approval_url))  
                return redirect(approval_url)  
    else:  
        print(payment.error)  
        return HttpResponse("支付失敗")

這裏解釋一下重點參數,return_url是支付成功後回調的頁面,paypal會將一個支付者id回傳,然後服務端需要驗證支付才能真的完成支付,total是付款金額,精確到分,currency是幣種,支持多鍾類型的貨幣。

當Django的服務端創建好支付訂單後,重定向到paypal的沙盒環境,這時候一定要使用沙盒的個人賬號進行登錄和支付。

支付完成後,會跳回剛剛傳過去的回調頁面:http://localhost:8000/palpay/pay/?paymentId=PAYID-L3SYORA3C031930S1733650J&token=EC-9TG269735K620131N&PayerID=ETYYRCDN8C3XJ

這裏paypal會傳過來三個參數,支付id,token和支付者id

此時,在回調方法裏,我們需要通過支付者id進行確認驗證支付

def payment_execute(request):  
  
    paymentid = request.Get.get("paymentId") #訂單id  
    payerid = request.Get.get("PayerID")  #支付者id  
  
    payment = paypalrestsdk.Payment.find(paymentid)  
  
  
    if payment.execute({"payer_id": payerid}):  
        print("Payment execute successfully")  
        return HttpResponse("支付成功")  
    else:  
        print(payment.error) # Error Hash  
        return HttpResponse("支付失敗")

最後,回到管理頁面,發現已經少了5美元,說明支付流程已經走完。

這次交易就愉快的結束了,當然了,某些時候我們需要對交易流水進行一些覈對,也可以通過接口查看交易明細

#明細  
  
payment = paypalrestsdk.Payment.find("訂單號")  
print(payment)

可以看到,通過傳入訂單id,我們該筆交易的狀態,流水id,以及創建日期。

如果用戶想要退款的話,可以利用交易明細中的流水號進行退款業務。

#退款  
from paypalrestsdk import Sale  
  
sale = Sale.find("流水號")  
  
# Make Refund API call  
# Set amount only if the refund is partial  
refund = sale.refund({  
    "amount": {  
        "total": "5.00",  
        "currency": "USD"}})  
  
# Check refund status  
if refund.success():  
    print("Refund[%s] Success" % (refund.id))  
else:  
    print("Unable to Refund")  
    print(refund.error)

結語:

總體而言,沒有什麼特別的難度,整個支付流程相對支付寶來說,更加的緊湊,但是做支付安全是第一要務,就個人體驗(僅是個人體驗)層面來說,支付寶在安全方面做的還是要比Paypal略強一些,起碼在信用卡欺詐和盜刷方面風控做的更好,在風險保障和賠付方面都有提供保險,當然由於金融環境的差異較大,並不是說Paypal的風控做的不好,只是機制不同,在國外,如果持卡人的信用卡被盜刷,一般髮卡組織會讓商家去承擔責任,而國內只能在交易環節設置更多的驗證,本質上說是要持卡人承擔責任。這也是爲什麼支付寶的風控看起來更好的原因。

最後就是關於費率問題,Paypal官方給出的費率是每筆交易收取3.9%+$0.3(根據你的交易流水,比例可以優惠,具體下限看接入者的月營業額度),不過這可是美刀,不得不說這個費率是相當的高,但是國內做境外支付的電商,一般還是要接入Paypal作爲支付方式。支付寶的費率基本上在1.2%左右,具體的費率也看交易流水,有實力的下限可以做到基本沒有,單純的看費率似乎支付寶更有優勢,但是別忘記了,這樣對比是不科學的,因爲凡是接入Paypal的都是看中覆蓋外幣業務的地區,費率則是投資人該考慮的問題了。

原文轉載自「劉悅的技術博客」 https://v3u.cn/a_id_157

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章