欢迎访问宙启技术站
智能推送

使用Python编写的WebAPI如何实现在线支付与结算功能

发布时间:2024-01-01 22:41:42

在Python中,可以使用各种框架和库来编写Web API,并实现在线支付和结算功能。下面是一个使用Flask框架和Stripe库实现在线支付和结算功能的示例。

首先,你需要安装Flask和Stripe库。可以使用以下命令进行安装:

pip install flask
pip install stripe

接下来,创建一个名为app.py的Python脚本,并导入所需的模块:

from flask import Flask, render_template, request, jsonify
import stripe

app = Flask(__name__)
stripe.api_key = "Your_Stripe_Secret_Key"

@app.route('/')
def home():
    return render_template('index.html')

@app.route('/create-payment-intent', methods=['POST'])
def create_payment_intent():
    amount = request.json['amount']

    payment_intent = stripe.PaymentIntent.create(
        amount=int(amount),
        currency='usd',
        payment_method_types=['card'],
        metadata={'integration_check': 'accept_a_payment'},
    )

    return jsonify({'clientSecret': payment_intent.client_secret})

@app.route('/checkout')
def checkout():
    return render_template('checkout.html')

if __name__ == '__main__':
    app.run(debug=True)

在上面的代码中,我们导入了Flask和render_template模块用于渲染HTML模板,以及stripe模块用于调用Stripe API。我们还指定了Stripe的Secret Key,该Key用于验证支付请求的身份信息。

然后,我们定义了一个根路由/用于展示主页,以及一个/create-payment-intent路由用于创建Stripe Payment Intent。create_payment_intent函数接收前端传递的amount参数,并使用该参数创建Payment Intent对象,并返回client secret给前端。

最后,我们定义了一个/checkout路由用于展示支付页面。

templates目录下,创建一个index.html文件,用于展示主页的内容:

<!DOCTYPE html>
<html>
<head>
    <title>Online Payment System</title>
</head>
<body>
    <h1>Welcome to Online Payment System</h1>
    <form action="/checkout" method="GET">
        <input type="submit" value="Checkout">
    </form>
</body>
</html>

templates目录下,创建一个checkout.html文件,用于展示支付页面的内容:

<!DOCTYPE html>
<html>
<head>
    <title>Checkout</title>
    <script src="https://js.stripe.com/v3/"></script>
    <script>
        // Set your publishable Stripe Key
        var stripe = Stripe('Your_Stripe_Publishable_Key');

        // Create a PaymentIntent with the backend
        fetch('/create-payment-intent', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({amount: 1000}),
        })
        .then(function(result) {
            return result.json();
        })
        .then(function(data) {
            var elements = stripe.elements();
            var card = elements.create('card');

            card.mount('#card-element');

            var form = document.getElementById('payment-form');
            form.addEventListener('submit', function(event) {
                event.preventDefault();

                stripe.createPaymentMethod({
                    type: 'card',
                    card: card,
                })
                .then(function(result) {
                    if (result.error) {
                        console.log(result.error);
                    } else {
                        stripe.confirmCardPayment(data.clientSecret, {
                            payment_method: result.paymentMethod.id,
                        })
                        .then(function(confirmResult) {
                            if (confirmResult.error) {
                                console.log(confirmResult.error);
                            } else {
                                console.log(confirmResult.paymentIntent);
                                // Redirect to success page
                                window.location.replace('/success');
                            }
                        });
                    }
                });
            });
        });
    </script>
</head>
<body>
    <h1>Checkout</h1>
    <form id="payment-form">
        <div id="card-element">
            <!-- Card element will be mounted here -->
        </div>
        <button type="submit">Pay</button>
    </form>
</body>
</html>

在上面的代码中,我们首先引入Stripe的JavaScript库,并设置Stripe的Publishable Key,该Key用于在客户端创建Payment Intent对象。

然后,我们使用fetch函数向服务器发送POST请求,创建Payment Intent对象,并获取client secret。然后,我们使用stripe.elements()函数创建一个Card元素,并将其挂载到card-element的div上。

接下来,我们使用addEventListener函数监听表单的submit事件,并在提交表单时调用stripe.createPaymentMethod函数创建一个Payment Method对象。然后,我们通过stripe.confirmCardPayment函数发送购买请求,并在购买成功后重定向到成功页面。

最后,我们可以运行app.py脚本启动Flask服务器:

python app.py

现在,你可以在浏览器中访问http://localhost:5000,并点击"Checkout"按钮进行支付。支付成功后,将重定向到成功页面。

这是一个简单的使用Python编写的Web API来实现在线支付和结算功能的例子,其中使用了Flask和Stripe库。通过这个例子,你可以了解到如何创建Payment Intent对象、处理支付请求,并与Stripe API进行交互。