📜  Django 中的 Razorpay 集成(1)

📅  最后修改于: 2023-12-03 15:14:43.737000             🧑  作者: Mango

Django 中的 Razorpay 集成

Razorpay 是一家印度的支付处理公司,提供了一种在线支付解决方案。 Django 中的 Razorpay 集成可以帮助开发人员为他们的 Django 应用程序添加 Razorpay 支付网关。

准备工作

在开始集成 Razorpay 前,您需要:

  • 一个有效的 Razorpay 商户帐户
  • Python 3 环境
  • Django 2 或更高版本
安装依赖

在 Django 项目目录中的虚拟环境中安装 Razorpay Python SDK:

pip install razorpay
添加 Razorpay 秘密密钥

在 settings.py 文件中添加以下字段:

RAZORPAY_KEY_ID = "YOUR_KEY_ID"
RAZORPAY_KEY_SECRET = "YOUR_KEY_SECRET"

请确保将上述变量替换为您的 Razorpay 密钥 ID 和密钥 SECRET。

创建订单

创建一个 views.py 文件,并添加以下代码:

from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse
import razorpay

@csrf_exempt
def create_order(request):
    if request.method == 'POST':
        amount = int(request.POST['amount'])
        client = razorpay.Client(auth=(settings.RAZORPAY_KEY_ID, settings.RAZORPAY_KEY_SECRET))
        payment = client.order.create(dict(amount=amount, currency='INR'))
        return render(request, "create_order.html", {'payment': payment})
    else:
        return HttpResponse("Invalid request")

此代码将从 POST 请求中获取订单金额,然后创建一个订单并将其返回到模板中供用户支付。

处理付款

创建一个 webhook.py 文件,并添加以下代码:

from django.http import HttpResponse
import razorpay
import json
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings

client = razorpay.Client(auth=(settings.RAZORPAY_KEY_ID, settings.RAZORPAY_KEY_SECRET))

@csrf_exempt
def handle_payment(request):
    if request.method == 'POST':
        data = request.body.decode('utf-8')
        data_dict = json.loads(data)
        order_id = data_dict['payload']['payment']['entity']['order_id']
        payment_id = data_dict['payload']['payment']['entity']['id']
        payment_amount = data_dict['payload']['payment']['entity']['amount']
        payment_capture = client.payment.capture(payment_id, payment_amount)
        return HttpResponse("success")
    else:
        return HttpResponse("Invalid request")

此代码将从 Razorpay webhook 获取付款 ID,然后捕获付款金额。

更新 urls.py 文件

要使用这些视图,您需要将它们添加到 Django 应用程序的 urls.py 文件中:

from django.contrib import admin
from django.urls import path
from .views import create_order
from .webhook import handle_payment

urlpatterns = [
    path('admin/', admin.site.urls),
    path('create_order/', create_order),
    path('handle_payment/', handle_payment),
]

此代码将创建订单视图“create_order”添加到 /create_order/ 的 URL,并将支付处理视图“handle_payment”添加到 /handle_payment/ 的 URL。

创建模板

在 templates 文件夹中,创建一个名为“create_order.html”的模板,并添加以下内容:

{% extends 'base.html' %}

{% block content %}
    <h3>付款</h3>
    <form action="https://api.razorpay.com/v1/checkout/embedded" method="POST">
        <input type="hidden" name="key_id" value="{{ payment.key }}">
        <input type="hidden" name="order_id" value="{{ payment.id }}">
        <input type="hidden" name="name" value="测试付款">
        <input type="hidden" name="description" value="测试">
        <input type="hidden" name="image" value="https://via.placeholder.com/50x50.png">
        <input type="hidden" name="prefill[name]" value="测试姓名">
        <input type="hidden" name="prefill[email]" value="test@example.com">
        <input type="hidden" name="prefill[contact]" value="9876543210">
        <input type="hidden" name="callback_url" value="{% url 'handle_payment' %}">
        <button type="submit" class="btn btn-primary">付款</button>
    </form>
{% endblock %}

此模板将通过将表单提交给 Razorpay API 来生成付款表单,从而使用户能够提交付款。

测试集成

运行 Django 服务器,访问 http://localhost:8000/create_order/,并输入测试金额。然后单击“付款”按钮。

如果 Razorpay 返回一个成功的响应,则您已成功集成 Razorpay。您可以访问 Razorpay 仪表板以查看任何实际付款。