📜  Django 中的 Razorpay 集成

📅  最后修改于: 2022-05-13 01:54:47.148000             🧑  作者: Mango

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 IdKey Secret添加到 settings.py 文件中。

RAZOR_KEY_ID = YOUR_KEY_ID
RAZOR_KEY_SECRET = YOUR_KEY_SECRET

在我们继续之前,让我们安装 razorpay 的Python包。

pip install razorpay

第 3 步:Views.py

这是该过程的主要步骤。首先,我们需要了解 Razorpay 中的支付方式。

  1. 从我们的 Django 服务器创建一个 Razor Order。
  2. 将订单 ID 和其他选项传递给前端。
  3. 用户单击付款按钮并使用其中一种付款方式付款。
  4. Razorpay 处理付款成功和失败。
  5. 失败时,Razorpay 会促进重试付款。
  6. 成功后,Razorpay 向我们服务器上的回调 URL 发出发布请求。
  7. 验证付款签名,以确认付款是真实的且未被篡改。
  8. 验证后,捕获付款并呈现成功页面。

有关更多详细信息,请参阅代码注释。

注意: 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 的仪表板中查看这些付款。