Django 中的 Razorpay 集成
支付是在线生态系统不可或缺的一部分,无论是在电子商务商店处理订单还是简单的捐赠给某人。将支付网关集成到您的网站可能是一个乏味的过程。让我们来看看如何将 Razorpay 集成到 Django 网站中。
我们在建造什么?
我们将建立一个Buy Me Coffee的基本复制品,呃Buy Me Chai 😉,用户可以在那里向我们捐款。
无论您正在构建什么,集成过程都保持不变。让我们将整个过程分解为简单的步骤。
第一步:启动Django项目。
确保您已完成 django 安装。创建一个名为dj_razorpay的新项目,然后启动一个名为payment的新应用程序。在settings.py文件中的installed_apps列表中添加“payment”。另外,应用迁移。
INSTALLED_APPS = [
...
'payment',
...
]
第 2 步:获取 Razorpay 密钥。
首先,在 Razorpay 的网站上创建一个帐户,您只需使用您的电子邮件和密码进行注册,并添加一些基本信息,例如您的电话号码。
在设置屏幕内,单击“创建新密钥”选项,您的密钥将被生成。您将获得密钥 ID 和密钥秘密。目前我们的付款将处于“测试模式”,即不会发生真正的交易,并且付款选项也有限。要接受真钱并解锁更多付款方式,您需要完成 KYC 并提供您的银行详细信息。无论模式如何,集成过程都保持不变。
注意:您只会看到一次密钥秘密,因此请立即将其复制到某处。
现在将Key Id和Key Secret添加到 settings.py 文件中。
RAZOR_KEY_ID = YOUR_KEY_ID
RAZOR_KEY_SECRET = YOUR_KEY_SECRET
在我们继续之前,让我们安装 razorpay 的Python包。
pip install razorpay
第 3 步:Views.py
这是该过程的主要步骤。首先,我们需要了解 Razorpay 中的支付方式。
- 从我们的 Django 服务器创建一个 Razor Order。
- 将订单 ID 和其他选项传递给前端。
- 用户单击付款按钮并使用其中一种付款方式付款。
- Razorpay 处理付款成功和失败。
- 失败时,Razorpay 会促进重试付款。
- 成功后,Razorpay 向我们服务器上的回调 URL 发出发布请求。
- 验证付款签名,以确认付款是真实的且未被篡改。
- 验证后,捕获付款并呈现成功页面。
有关更多详细信息,请参阅代码注释。
注意: Razorpay 中的金额以货币的子单位计算,即 500 卢比将变为 50000 派萨。
Python3
from django.shortcuts import render
import razorpay
from django.conf import settings
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponseBadRequest
# authorize razorpay client with API Keys.
razorpay_client = razorpay.Client(
auth=(settings.RAZOR_KEY_ID, settings.RAZOR_KEY_SECRET))
def homepage(request):
currency = 'INR'
amount = 20000 # Rs. 200
# Create a Razorpay Order
razorpay_order = razorpay_client.order.create(dict(amount=amount,
currency=currency,
payment_capture='0'))
# order id of newly created order.
razorpay_order_id = razorpay_order['id']
callback_url = 'paymenthandler/'
# we need to pass these details to frontend.
context = {}
context['razorpay_order_id'] = razorpay_order_id
context['razorpay_merchant_key'] = settings.RAZOR_KEY_ID
context['razorpay_amount'] = amount
context['currency'] = currency
context['callback_url'] = callback_url
return render(request, 'index.html', context=context)
# we need to csrf_exempt this url as
# POST request will be made by Razorpay
# and it won't have the csrf token.
@csrf_exempt
def paymenthandler(request):
# only accept POST request.
if request.method == "POST":
try:
# get the required parameters from post request.
payment_id = request.POST.get('razorpay_payment_id', '')
razorpay_order_id = request.POST.get('razorpay_order_id', '')
signature = request.POST.get('razorpay_signature', '')
params_dict = {
'razorpay_order_id': razorpay_order_id,
'razorpay_payment_id': payment_id,
'razorpay_signature': signature
}
# verify the payment signature.
result = razorpay_client.utility.verify_payment_signature(
params_dict)
if result is None:
amount = 20000 # Rs. 200
try:
# capture the payemt
razorpay_client.payment.capture(payment_id, amount)
# render success page on successful caputre of payment
return render(request, 'paymentsuccess.html')
except:
# if there is an error while capturing payment.
return render(request, 'paymentfail.html')
else:
# if signature verification fails.
return render(request, 'paymentfail.html')
except:
# if we don't find the required parameters in POST data
return HttpResponseBadRequest()
else:
# if other than POST request is made.
return HttpResponseBadRequest()
Python3
# dj_razorpay/urls.py
from django.contrib import admin
from django.urls import path
from payment import views
urlpatterns = [
path('', views.homepage, name='index'),
path('paymenthandler/', views.paymenthandler, name='paymenthandler'),
path('admin/', admin.site.urls),
]
HTML
GFG
Buy Me a Chai ☕
If you like my work, you can support me by donating ₹200
注意:必须捕获付款,否则将自动退还给付款人。
现在将上述视图映射到urls.py 中的 url。
蟒蛇3
# dj_razorpay/urls.py
from django.contrib import admin
from django.urls import path
from payment import views
urlpatterns = [
path('', views.homepage, name='index'),
path('paymenthandler/', views.paymenthandler, name='paymenthandler'),
path('admin/', admin.site.urls),
]
第 4 步:前端
我们需要传递上一步中提到的 Razorpay 订单 ID 和其他选项。首先加载 Razorpay 的 javascript 代码,该代码将呈现付款窗口并使用从后端收到的选项对其进行初始化。向付款按钮添加一个事件侦听器,以便在单击时打开付款窗口。
在这里,我们在主页本身上呈现付款按钮。我们还需要另外两页用于支付成功和失败。
HTML
GFG
Buy Me a Chai ☕
If you like my work, you can support me by donating ₹200
第 5 步:测试
现在让我们启动服务器并检查是否一切正常!
python manage.py runserver
我们成功收到付款!!您可以在 Razorpay 的仪表板中查看这些付款。