flask支付宝支付

支付宝支付

拿取自己的公钥换取支付宝的公钥
自己的公钥私钥,支付宝的公钥,存放在文档中便于读取出来使用
在这里插入图片描述

将支付地址封装成一个方法
from alipay import AliPay

class AliTool():
    privite_key = '' # 自己的私钥
    public_key = ''  # 支付宝的公钥
    alipay = None	 # 实例化AliPay
    domain = 'https://openapi.alipaydev.com/gateway.do?' #要跳转的支付地址前缀
    def __init__(self):
        self.get_privite_key()
        self.get_public_key()
        self.alipay = AliPay(
            appid='2021000121616226',  #自己沙箱应用的id
            app_private_key_string=self.privite_key, #私钥
            alipay_public_key_string=self.public_key,#公钥
            app_notify_url=None,  # 回调地址
            sign_type='RSA2',  	  # 签名算法
            debug=True,           # 请求来到支付宝沙箱
        )
    def get_privite_key(self):
        with open('./keys/secret_key.txt', 'r',encoding='utf-8') as f:
            self.privite_key = f.read()
            f.close()

    def get_public_key(self):
        with open('./keys/alipay_public_key.txt', 'r',encoding='utf-8') as f:
            self.public_key = f.read()
            f.close()
    def pay(self,title,total_price,order_num):
        path = self.alipay.api_alipay_trade_page_pay(
            subject=title,					# 名字
            out_trade_no=order_num,			# 订单号
            total_amount=total_price,		# 价格
            return_url='http://127.0.0.1:5000/user/pay_url',  # 支付完成之后跳转的地址,要进行进一步的订单判断
            notify_url='http://www.baidu.com', # 这个我也不晓得是啥
        )
        return self.domain + path #>>>>支付地址
支付地址后端接口

status:》》》 0 待支付 、1已支付、 2完成 、3已取消

class VipOrderView(Resource):
    @login
    def get(self,id):
        # user_id = 1
        user_id = g.user_id
        order_num = datetime.datetime.strftime(datetime.datetime.now(),'%Y%m%d%H%M%S') +str(random.randint(10000,99999)) # 订单号
        vip_info = VipListModel.query.get(id)
        if not vip_info:
            return jsonify({
                'code':400,
                'msg':'商品不存在'
            })
        v= VipOrderModel(
            order_num = order_num,
            vip_id = id,
            user_id = user_id,
            price = vip_info.price,
        )
        db.session.add(v)
        db.session.commit()
       # 调用定时任务  ,若未支付 延时100秒关闭订单,只是打印出来,同时将订单的状态改变,不会条状
        current_app.schedule.add_job(close_order,'interval',seconds=100,args=[v.oid],
                                    end_date = (datetime.datetime.now() + datetime.timedelta(minutes=1))
                                    )
        url = AliTool().pay('会员购买-%s' %vip_info.title,str(v.price),order_num)
        return jsonify({
            'code':200,
            'msg':'成功',
            'data':{
                'url':url
            }
        })
在这里进行表单校验

class PayView3(Resource):
    def get(self):
        ''''
            request.args 获取url中传递的参数,使用 to_dict () 转化为key value对,
            value的类型为字符串,比如传递url为
             http://127.0.0.1:5000/?name=gp&age=11 输出 {'name': 'gp', 'age': '11'}
        '''
        args = request.args.to_dict() # 获取地址栏的所有数据
        sign = args.pop('sign')       # 拿出签名部分进行校验
        rs = PayTool().alipay.verify(args,sign)	
        print('rs>>>>',rs)
        if not rs:
            return jsonify({
                'code':400,
                'msg':'参数错误'
            })
        code = args['out_trade_no']
        orderdata = OrderModel.query.filter(OrderModel.order_num == code).first()
        if not orderdata:
            return jsonify({
                'code':400,
                'msg':'订单不存在'
            })
        if order_data.status == 3:
            print('订单失效')
            return redirect('http://127.0.0.1:8080/')
        orderdata.status = 2 # 修改订单状态
        db.session.commit()
        return redirect('http://127.0.0.1:8080/')
api.add_resource(PayView3,'/pay_url')
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Python Flask 中添加支付宝支付功能,可以使用支付宝官方提供的 Python SDK。以下是大致的步骤: 1. 在支付宝开放平台中创建应用并获取应用的 App ID、私钥和公钥。 2. 安装支付宝 SDK,可以通过 pip 安装 `alipay-sdk-python`。 3. 在 Flask 中创建路由,处理订单支付请求,并生成支付宝支付链接。在处理订单支付请求时,需要使用私钥对订单进行签名,以确保订单的安全性。 4. 在前端页面展示支付宝支付链接,用户点击链接后跳转至支付宝页面进行支付。 5. 定期查询支付宝订单状态,以确保订单已经支付成功。 以下是一个简单的 Python Flask 中添加支付宝支付功能的示例代码: ```python from flask import Flask, render_template, request from alipay import AliPay app = Flask(__name__) @app.route('/pay', methods=['POST']) def pay(): # 处理订单信息,生成订单号和订单金额 order_no = 'xxxx' order_amount = 100.00 # 创建支付宝对象 alipay = AliPay( appid='APP_ID', app_notify_url='http://example.com/pay_callback', app_private_key_path='path/to/app_private_key.pem', alipay_public_key_path='path/to/alipay_public_key.pem', sign_type='RSA2', debug=True ) # 生成支付宝支付链接 order_string = alipay.api_alipay_trade_page_pay( out_trade_no=order_no, total_amount=str(order_amount), subject='订单支付', return_url='http://example.com/pay_success', notify_url='http://example.com/pay_callback' ) return render_template('pay.html', order_string=order_string) @app.route('/pay_callback', methods=['POST']) def pay_callback(): # 处理支付宝支付结果回调 # 验证支付宝返回的签名,确保支付结果的安全性 return 'success' if __name__ == '__main__': app.run() ``` 需要注意的是,上面的示例代码中还缺少模板文件 `pay.html`,以及需要根据自己的实际情况填写的支付宝应用信息和回调地址等参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值