模拟支付宝支付功能
思路:
我要在訂單表頁(yè)面點(diǎn)擊支付,在生成訂單的同時(shí)跳往,支付頁(yè)面,我們會(huì)生成一個(gè)支付地址,
返回給前段,前段通過(guò)??window.location.href = app.data.pay_url; 這個(gè)方法將地址放進(jìn)地址欄;
然后去和沙箱的服務(wù)器進(jìn)行交互;
此時(shí),他會(huì)讓我們回調(diào)一個(gè)地址,這個(gè)地址是我們自己定義的,他就會(huì)重新返回我們的
django服務(wù)器我們,我們就利用? redirect? 這個(gè)函數(shù)進(jìn)行蟲(chóng)定向 ;跳回我們準(zhǔn)備好的訂單也面,
把支付狀態(tài);
好!那我們看是寫(xiě)一下:
準(zhǔn)備工作:
1.在官網(wǎng)上下載支付寶提供給我們的,測(cè)試軟件? ?“? ?支付寶開(kāi)放平臺(tái)開(kāi)發(fā)助手.exe ”如下圖,所示;
?2. 打開(kāi)文件? 生成我們的秘鑰 和 公鑰? 點(diǎn)擊生成秘鑰 ; 就會(huì)自動(dòng)給我們生成一個(gè) 公鑰 和秘鑰?
我們可以 ,打開(kāi)文件位置 將文件托進(jìn)桌面 :
?3.
重命名我們的秘鑰 和 公鑰 ; 并在 開(kāi)頭和結(jié)尾 加上 以下格式;
注意(不要換行;不要改變?cè)镜母袷?#xff1b; 否則后面無(wú)法識(shí)別)
app_private_key_path ?自己的公鑰
alipay_public_key_path ?自己的秘鑰
?
?
?
4.我們要去支付寶官網(wǎng);獲取第二公鑰(支付寶平臺(tái)的公鑰)文件;和基本信息
支付寶沙箱地址:
https://open.alipay.com/develop/manage
注意:點(diǎn)擊控制臺(tái) ;下面有一個(gè)沙箱應(yīng)用 點(diǎn)擊出現(xiàn)一下畫(huà)面;
然后點(diǎn)擊 ,”自定義秘鑰 “再點(diǎn)擊 “設(shè)置并查看“ 最后我們的公鑰復(fù)制進(jìn)去;
平臺(tái)會(huì)自動(dòng)生成一個(gè);公鑰 我們把他復(fù)制一下;放進(jìn)一個(gè)文本文件里面,
和之前的公鑰格式一樣;
alipay_public_key.txt ?沙箱中生成的公鑰 (這是我們的命名格式)
?
?5.復(fù)制一下基本信息保存一下后面會(huì)用到 ;
比如支付密碼、APPID 、 商家賬號(hào)、(建議保存到一個(gè)文本文件中);
然后打開(kāi)的門(mén)的python 在根目錄下創(chuàng)建一個(gè)keys這樣的一個(gè) 文件夾;
將我們的這三個(gè)文件復(fù)制進(jìn)去;
準(zhǔn)備工作完畢
?
?
2. 下面開(kāi)始寫(xiě)我們的代碼
from alipay import AliPay from django.conf import settings from django.shortcuts import redirect # 準(zhǔn)備秘鑰的路徑 app_private_key_path = os.path.join(settings.BASE_DIR,'keys/app_private_key.txt') #秘鑰路徑 alipay_public_key_path = os.path.join(settings.BASE_DIR,'keys/alipay_public_key.txt') #公鑰路徑# 讀取秘鑰 和 公鑰的 內(nèi)容的內(nèi)容 app_private_key_string = open(app_private_key_path,'r').read() #讀取自己的公鑰 alipay_public_key_string = open(alipay_public_key_path,'r').read() #讀取自己的秘鑰# 定義一個(gè)自己的支付類(lèi) class MyAlipay(APIView):def __init__(self,*args,**kwargs):# 繼承父類(lèi)的__int__super().__init__(*args,**kwargs)# 初始化一個(gè)自己的實(shí)例屬性self.alipay = AliPay(appid='2021000121640162', #在沙箱中獲取的APPIDapp_private_key_string=app_private_key_string, #alipay_public_key_string=alipay_public_key_string,app_notify_url= None,sign_type='RSA2',debug=True, #支付請(qǐng)求就會(huì)發(fā)送到支付寶沙箱環(huán)境)# 生成支付地址的方法def get_trade_url(self,order_id,_total_amount):# 生成支付訂單的相關(guān)參數(shù)order_string = self.alipay.api_alipay_trade_page_pay(subject='商家收款',out_trade_no=order_id, # 訂單編號(hào)total_amount=_total_amount, #訂單金額return_url= 'http://127.0.0.1:8000/pay/result', #支付成功的回調(diào)地址 (需要自己寫(xiě)一個(gè)這樣的地址)notify_url= 'http://127.0.0.1:8000/pay/result',)return 'https://openapi.alipaydev.com/gateway.do?' + order_string #返回 網(wǎng)關(guān)地址 + 我們生成的地址(order_string)from datetime import datetime # 繼承地地址的那個(gè)類(lèi),調(diào)用他的支付地址返回給前段 class Appzfb(MyAlipay):def post(self,request):# 生成一個(gè)支付地址#生成一個(gè)唯一的地址編號(hào)# (因?yàn)槭菧y(cè)試,沒(méi)有在后端加載訂單,所以隨機(jī)生成了一個(gè)訂單編號(hào)進(jìn)行模擬)order_id = datetime.now().strftime("%Y%m%d%H%M%S")pay_url = self.get_trade_url(order_id,2)print('請(qǐng)求地址',pay_url)return Response ({'code':200,'msg':'正在前往支付....','pay_url':pay_url,})在vue實(shí)現(xiàn) 請(qǐng)求成功后前段需要把這個(gè)地址放進(jìn)地址欄,開(kāi)始和支付寶沙箱的服務(wù)器進(jìn)行交互(完成支付);Axios.post('http://127.0.0.1:8000/zfb/')
? ? ? ? ? ? ? ? .then(app=>{
? ? ? ? ? ? ? ? ? ? if(app.data.code == 200){
? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? alert(app.data.msg)
? ? ? ? ? ? ? ? ? ? ? ? // 將支付地址放進(jìn),地址欄
? ? ? ? ? ? ? ? ? ? ? ? window.location.href = app.data.pay_url;
? ? ? ? ? ? ? ? ? ? ? ? console.log(app)
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? })
? ? ? ? ? ? ? ? .catch(res=>{
? ? ? ? ? ? ? ? ? ? console.log(res,'請(qǐng)求失敗的響應(yīng)')
? ? ? ? ? ? ? ? })
?
?
?
# 回調(diào)后的地址,回調(diào)到了django的這個(gè)地址; # 進(jìn)行一個(gè)重定向,跳進(jìn)前段的訂單頁(yè)面; #http://localhost:8080/DenVue4vue 是 前段 訂單頁(yè)面的地址 class Appsome(APIView):def get(self,request):return redirect('http://localhost:8080/DenVue4vue')總結(jié)
- 上一篇: 山上古树参天盘龙下载
- 下一篇: 大班科学电子计算机,《电子计算器》大班教