日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django框架实现支付宝第三方支付

發布時間:2024/4/11 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django框架实现支付宝第三方支付 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面是針對使用Django框架項目接入第三方支付寶支付的相關鏈接:

支付寶開發平臺登錄:
https://open.alipay.com/platform/home.htm

沙箱環境:
沙箱應用:https://docs.open.alipay.com/200/105311
沙箱賬號:https://openhome.alipay.com/platform/appDaily.htm?tab=account

支付寶開發者文檔
文檔主頁:https://openhome.alipay.com/developmentDocument.htm
產品介紹:https://docs.open.alipay.com/270
快速接入:https://docs.open.alipay.com/270/105899/
SDK:https://docs.open.alipay.com/270/106291/
python對接支付寶SDK:https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
python對接支付寶SDK安裝:pip install python-alipay-sdk --upgrade
API列表:https://docs.open.alipay.com/270/105900/

第一項:

接入步驟:
1.創建應用
2.配置密鑰
3.搭建和配置開發環境
4.接口調用

接下來是接入支付寶支付的詳細講解:
1.首先我們需要在自己的工程目錄下創建一個pay的包,然后再創建一個keys的文件夾,keys文件里面用來存放應用的秘鑰和公匙。

2. 生成應用的私鑰和公鑰
進入終端
切換目錄

cd pay/keys/

輸入下面的命令:

openssl openssl> genrsa -out app_private_key.pem 2048 # 私鑰RSA2 openssl> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 導出公鑰 openssl> exit

執行完之后會在你的文件下面出現下面兩個(密匙和公鑰):

3.修改公匙
首先你需要進入支付寶的開發平臺選擇

創建你的應用,然后進入沙箱開發環境:

什么是沙箱環境尼?
螞蟻沙箱環境(Beta)是協助開發者進行接口功能開發及主要功能聯調的輔助環境。沙箱環境模擬了開放平臺部分產品的主要功能和主要邏輯(當前沙箱支持產品請參考“沙箱支持產品列表”)。
在開發者應用上線審核前,開發者可以根據自身需求,先在沙箱環境中了解、組合和調試各種開放接口,進行開發調通工作,從而幫助開發者在應用上線審核完成后,能更快速、更順利的進行線上調試和驗收工作。

選擇查看項目應用公匙

cat app_public_key.pem

把上面項目生成的公匙復制到支付寶的的應用公匙里面:

再選擇將支付寶的公鑰內容復制到alipay_public_key.pem文件中


注意,還需要在公鑰文件中補充開始與結束標志:

-----BEGIN PUBLIC KEY----- 此處是公鑰內容 -----END PUBLIC KEY-----

然后到這里就配置好應用程序的密匙和公鑰。

第二項:

發起支付
下面視圖函數的編寫參考(感謝github開發者提供的文檔)
https://github.com/fzlee/alipay/blob/master/README.zh-hans.md

1.首先需要安裝python對接支付寶SDK:

pip install python-alipay-sdk --upgrade

接下來是后端的接口說明:
請求方式:Get
請求的路徑:orders/(?P<order_id>\d+)/payment/
參數說明:
order_id 訂單編號 str
alipay_url 支付寶支付鏈接 str
2.開始編寫視圖函數
需要導入的類

from rest_framework.views import APIView #REST framework 提供的一級視圖 from rest_framework.response import Response from orders.models import OrderInfo from rest_framework import status from alipay import AliPay #阿里支付 from mall import settings

視圖思路的分析:
當用戶點擊支付按鈕的時候,我們需要讓前端發送一個ajax請求,將 訂單id發送給我們
必須是登錄用戶才可以訪問此接口

1 我們接收參數, 校驗參數
2. 根據訂單id查詢數據
3. 創建支付寶對象
4. 調用支付寶的方法生成order_string
5. 拼接url,并且返回

class PaymentView(APIView):permission_classes = [IsAuthenticated] #請求頭判斷是否的請求的權限def get(self,request,order_id):# 1. 我們接收參數, 校驗參數# 2. 根據訂單id查詢數據try:# 為了讓我們查詢的更準確,我們需要再添加幾個查詢條件# 查詢未支付的訂單# 查詢這個用戶的訂單order = OrderInfo.objects.get(order_id=order_id, #訂單的iduser=request.user,status=OrderInfo.ORDER_STATUS_ENUM['UNPAID'])except OrderInfo.DoesNotExist:return Response(status.HTTP_400_BAD_REQUEST)# 3. 創建支付寶對象app_private_key_string = open(settings.APP_PRIVATE_KEY_PATH).read() #app的密匙alipay_public_key_string = open(settings.ALIPAY_PUBLIC_KEY_PATH).read() #app的公匙alipay = AliPay(appid=settings.ALIPAY_APPID, #就是一大串數字類似2016081903467app_notify_url=None, # 默認回調urlapp_private_key_string=app_private_key_string,# 支付寶的公鑰,驗證支付寶回傳消息使用,不是你自己的公鑰,alipay_public_key_string=alipay_public_key_string,sign_type="RSA2", # RSA 或者 RSA2debug = settings.ALIPAY_DEBUG # 默認False 如果使用debug的調試模式設置為True)# 4. 調用支付寶的方法生成order_string# 如果你是 Python 3的用戶,使用默認的字符串即可subject = "測試訂單"# 電腦網站支付,需要跳轉到https://openapi.alipay.com/gateway.do? + order_stringorder_string = alipay.api_alipay_trade_page_pay(out_trade_no=order_id,total_amount=str(order.total_amount), # 這里類型我們要由 decimal轉換為 strsubject=subject,return_url="http://ip地址:端口號/pay_success.html",notify_url=None # 可選, 不填則使用默認notify url)# 5. 拼接url,并且返回url = settings.ALIPAY_URL + '?' + order_stringreturn Response({'alipay_url':url})

在配置文件中編輯支付寶的配置信息

ALIPAY_APPID = "2016091567523030" ALIPAY_URL = "https://openapi.alipaydev.com/gateway.do" ALIPAY_DEBUG = True APP_PRIVATE_KEY_PATH = os.path.join(BASE_DIR, 'apps/pay/keys/app_private_key.pem') ALIPAY_PUBLIC_KEY_PATH = os.path.join(BASE_DIR, 'apps/pay/keys/alipay_public_key.pem')

在pay/urls.py中設置url信息

from django.conf.urls import url from . import viewsurlpatterns = [#/pay/orders/(?P<order_id>)\d+/url(r'^orders/(?P<order_id>\d+)/$',views.PaymentView.as_view(),name='pay'), ]

在項目名/urls.py中設置url信息

urlpatterns = [url(r'^pay/',include('pay.urls',namespace='pay')), ]

視圖的執行首先是從項目的url尋找路徑,然后再連接到應用pay的url里面,當接受到前端的請求時候,便會執行相對應的視圖功能函數。

第三步

保存支付結果
用戶支付成功后,支付寶會將用戶重定向到 pay_success.html,并攜帶支付結果數據
后端接口設計:

請求方式: PUT
路徑:/pay/status/?支付寶參數
請求參數: 在查詢字符串中攜帶支付寶參數
返回數據:
trade_id 支付寶流水號 str

繼續編寫視圖函數views.py

class PayStatusAPIView(APIView):def put(self,request):# 1. 創建alipay對象app_private_key_string = open(settings.APP_PRIVATE_KEY_PATH).read()alipay_public_key_string = open(settings.ALIPAY_PUBLIC_KEY_PATH).read()alipay = AliPay(appid=settings.ALIPAY_APPID,app_notify_url=None, # 默認回調urlapp_private_key_string=app_private_key_string,# 支付寶的公鑰,驗證支付寶回傳消息使用,不是你自己的公鑰,alipay_public_key_string=alipay_public_key_string,sign_type="RSA2", # RSA 或者 RSA2debug=settings.ALIPAY_DEBUG # 默認False)# 2.驗證數據data = request.query_params.dict()# sign 不能參與簽名驗證signature = data.pop("sign")# verify確認是否成功success = alipay.verify(data, signature)if success:# 3.驗證成功之后,可以從 data中獲取 支付寶的訂單id和 我們的訂單id# 支付寶的交易idtrade_id = data.get('trade_no')# 商家idout_trade_no = data.get('out_trade_no')#1. 把支付寶的訂單id和 我們的訂單id 保存起來Payment.objects.create(order_id=out_trade_no,trade_id=trade_id)# 2. 更新訂單的狀態OrderInfo.objects.filter(order_id=out_trade_no).update(status=OrderInfo.ORDER_STATUS_ENUM['UNSEND'])#3. 返回 支付寶的訂單idreturn Response({'trade_id':trade_id})

總結

以上是生活随笔為你收集整理的Django框架实现支付宝第三方支付的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。