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