模拟支付宝支付功能

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

思路:

我要在订单表页面点击支付,在生成订单的同时跳往,支付页面,我们会生成一个支付地址,

返回给前段,前段通过  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')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值