思路:
我要在订单表页面点击支付,在生成订单的同时跳往,支付页面,我们会生成一个支付地址,
返回给前段,前段通过 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', #在沙箱中获取的APPID
app_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')

本文介绍了如何模拟支付宝支付功能,包括在订单生成时跳转支付页面,与支付宝沙箱服务器交互,并定义回调地址。首先,从支付宝官网下载测试软件,生成公钥和私钥,注意文件格式。接着,获取支付宝平台的公钥和基本信息。在Python项目中创建keys文件夹,存放相关证书。最后,使用Axios发起POST请求,处理支付逻辑,将支付地址放入浏览器跳转。
5917

被折叠的 条评论
为什么被折叠?



