Django框架实现支付宝第三方支付
下面是針對使用Django框架項(xiàng)目接入第三方支付寶支付的相關(guān)鏈接:
支付寶開發(fā)平臺登錄:
https://open.alipay.com/platform/home.htm
沙箱環(huán)境:
沙箱應(yīng)用:https://docs.open.alipay.com/200/105311
沙箱賬號:https://openhome.alipay.com/platform/appDaily.htm?tab=account
支付寶開發(fā)者文檔
文檔主頁:https://openhome.alipay.com/developmentDocument.htm
產(chǎn)品介紹: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/
第一項(xiàng):
接入步驟::
1.創(chuàng)建應(yīng)用
2.配置密鑰
3.搭建和配置開發(fā)環(huán)境
4.接口調(diào)用
接下來是接入支付寶支付的詳細(xì)講解:
1.首先我們需要在自己的工程目錄下創(chuàng)建一個pay的包,然后再創(chuàng)建一個keys的文件夾,keys文件里面用來存放應(yīng)用的秘鑰和公匙。
2. 生成應(yīng)用的私鑰和公鑰
進(jìn)入終端
切換目錄
輸入下面的命令:
openssl openssl> genrsa -out app_private_key.pem 2048 # 私鑰RSA2 openssl> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 導(dǎo)出公鑰 openssl> exit執(zhí)行完之后會在你的文件下面出現(xiàn)下面兩個(密匙和公鑰):
3.修改公匙
首先你需要進(jìn)入支付寶的開發(fā)平臺選擇
創(chuàng)建你的應(yīng)用,然后進(jìn)入沙箱開發(fā)環(huán)境:
什么是沙箱環(huán)境尼?
螞蟻沙箱環(huán)境(Beta)是協(xié)助開發(fā)者進(jìn)行接口功能開發(fā)及主要功能聯(lián)調(diào)的輔助環(huán)境。沙箱環(huán)境模擬了開放平臺部分產(chǎn)品的主要功能和主要邏輯(當(dāng)前沙箱支持產(chǎn)品請參考“沙箱支持產(chǎn)品列表”)。
在開發(fā)者應(yīng)用上線審核前,開發(fā)者可以根據(jù)自身需求,先在沙箱環(huán)境中了解、組合和調(diào)試各種開放接口,進(jìn)行開發(fā)調(diào)通工作,從而幫助開發(fā)者在應(yīng)用上線審核完成后,能更快速、更順利的進(jìn)行線上調(diào)試和驗(yàn)收工作。
選擇查看項(xiàng)目應(yīng)用公匙
把上面項(xiàng)目生成的公匙復(fù)制到支付寶的的應(yīng)用公匙里面:
再選擇將支付寶的公鑰內(nèi)容復(fù)制到alipay_public_key.pem文件中
注意,還需要在公鑰文件中補(bǔ)充開始與結(jié)束標(biāo)志:
然后到這里就配置好應(yīng)用程序的密匙和公鑰。
第二項(xiàng):
發(fā)起支付
下面視圖函數(shù)的編寫參考(感謝github開發(fā)者提供的文檔)
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/
參數(shù)說明:
order_id 訂單編號 str
alipay_url 支付寶支付鏈接 str
2.開始編寫視圖函數(shù)
需要導(dǎo)入的類
視圖思路的分析:
當(dāng)用戶點(diǎn)擊支付按鈕的時候,我們需要讓前端發(fā)送一個ajax請求,將 訂單id發(fā)送給我們
必須是登錄用戶才可以訪問此接口
1 我們接收參數(shù), 校驗(yàn)參數(shù)
2. 根據(jù)訂單id查詢數(shù)據(jù)
3. 創(chuàng)建支付寶對象
4. 調(diào)用支付寶的方法生成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中設(shè)置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'), ]在項(xiàng)目名/urls.py中設(shè)置url信息
urlpatterns = [url(r'^pay/',include('pay.urls',namespace='pay')), ]視圖的執(zhí)行首先是從項(xiàng)目的url尋找路徑,然后再連接到應(yīng)用pay的url里面,當(dāng)接受到前端的請求時候,便會執(zhí)行相對應(yīng)的視圖功能函數(shù)。
第三步
保存支付結(jié)果
用戶支付成功后,支付寶會將用戶重定向到 pay_success.html,并攜帶支付結(jié)果數(shù)據(jù)
后端接口設(shè)計:
請求方式: PUT
路徑:/pay/status/?支付寶參數(shù)
請求參數(shù): 在查詢字符串中攜帶支付寶參數(shù)
返回數(shù)據(jù):
trade_id 支付寶流水號 str
繼續(xù)編寫視圖函數(shù)views.py
class PayStatusAPIView(APIView):def put(self,request):# 1. 創(chuàng)建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, # 默認(rèn)回調(diào)urlapp_private_key_string=app_private_key_string,# 支付寶的公鑰,驗(yàn)證支付寶回傳消息使用,不是你自己的公鑰,alipay_public_key_string=alipay_public_key_string,sign_type="RSA2", # RSA 或者 RSA2debug=settings.ALIPAY_DEBUG # 默認(rèn)False)# 2.驗(yàn)證數(shù)據(jù)data = request.query_params.dict()# sign 不能參與簽名驗(yàn)證signature = data.pop("sign")# verify確認(rèn)是否成功success = alipay.verify(data, signature)if success:# 3.驗(yàn)證成功之后,可以從 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. 更新訂單的狀態(tài)OrderInfo.objects.filter(order_id=out_trade_no).update(status=OrderInfo.ORDER_STATUS_ENUM['UNSEND'])#3. 返回 支付寶的訂單idreturn Response({'trade_id':trade_id})總結(jié)
以上是生活随笔為你收集整理的Django框架实现支付宝第三方支付的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 输入某年某月某日,判断这一天是这一年的第
- 下一篇: Linxu的常用命令