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. 生成應用的私鑰和公鑰
進入終端
切換目錄
輸入下面的命令:
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)是協助開發者進行接口功能開發及主要功能聯調的輔助環境。沙箱環境模擬了開放平臺部分產品的主要功能和主要邏輯(當前沙箱支持產品請參考“沙箱支持產品列表”)。
在開發者應用上線審核前,開發者可以根據自身需求,先在沙箱環境中了解、組合和調試各種開放接口,進行開發調通工作,從而幫助開發者在應用上線審核完成后,能更快速、更順利的進行線上調試和驗收工作。
選擇查看項目應用公匙
把上面項目生成的公匙復制到支付寶的的應用公匙里面:
再選擇將支付寶的公鑰內容復制到alipay_public_key.pem文件中
注意,還需要在公鑰文件中補充開始與結束標志:
然后到這里就配置好應用程序的密匙和公鑰。
第二項:
發起支付
下面視圖函數的編寫參考(感謝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.開始編寫視圖函數
需要導入的類
視圖思路的分析:
當用戶點擊支付按鈕的時候,我們需要讓前端發送一個ajax請求,將 訂單id發送給我們
必須是登錄用戶才可以訪問此接口
1 我們接收參數, 校驗參數
2. 根據訂單id查詢數據
3. 創建支付寶對象
4. 調用支付寶的方法生成order_string
5. 拼接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框架实现支付宝第三方支付的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输入某年某月某日,判断这一天是这一年的第
- 下一篇: Linxu的常用命令