如何为我的django在线电子商务网站设置Google Pay?

问题描述

我有一个在线电子商务网站,用户可以在其中相互交换图像 我要达到的目的是:卖方要求买方给他钱,买方单击“接受付款”,然后使用其Google Pay帐户设置付款,最后卖方将在其Google Pay帐户中收费

我该怎么做?我正在使用Django 3.1

这是我的交易模式

class Trade(models.Model):
    seller = models.ForeignKey(
        User,related_name='seller',on_delete=models.CASCADE)
    buyer = models.ForeignKey(
        User,related_name='buyer',on_delete=models.CASCADE)
    price = models.IntegerField()
    date = models.DateTimeField(auto_Now_add=True)

这是“接受交易”视图

def accept_Trade(request,pk):
    Trade = get_object_or_404(Trade,pk=pk)
    if request.method == 'GET':
        return render(request,'Trade/accept_Trade.html',{'Trade': Trade})
    else:
        # PAY
        payment = Payment.objects.create(
            variant='default',description= 'A Trade',total=Decimal(Trade.price),tax=Decimal(0),currency='USD',delivery=Decimal(0),billing_first_name=Trade.buyer.first_name,billing_last_name=Trade.buyer.last_name,customer_ip_address='127.0.0.1'
        )
        payment.save()
        payment.capture()
        payment.release()
        return redirect('home')

我的accept_Trade.html

{% extends 'users/base.html' %}

{% block title %}Accept Trade | {% endblock title %}


{% block content %}
<div class="shadow-lg p-3 mb-5 col-md-5 bg-white rounded float-right m-4 p-4">
    <p>Seller: {{ Trade.seller.username }}</p>
    <p style="color: #2ecc71;">Price: ${{ Trade.price }}</p>
</div>
<form action="{% url 'Trade:accept_Trade' Trade.id %}" method="post" class="m-4">
    {% csrf_token%}
    <button type="submit" class="btn btn-success btn-lg" style="padding:10px 30px; border-radius: 200px; margin: 30px; letter-spacing: 1px; word-spacing: 4px;">Pay and get product</button>
</form>
{% endblock content %}

解决方法

您可以使用https://django-payments.readthedocs.io/en/latest/来执行此操作。因此,例如,您可以这样做:

from decimal import Decimal

from payments import get_payment_model

Payment = get_payment_model()
payment = Payment.objects.create(
    variant='default',# this is the variant from PAYMENT_VARIANTS
    description='Book purchase',total=Decimal(120),tax=Decimal(20),currency='USD',delivery=Decimal(10),billing_first_name='Sherlock',billing_last_name='Holmes',billing_address_1='221B Baker Street',billing_address_2='',billing_city='London',billing_postcode='NW1 6XE',billing_country_code='UK',billing_country_area='Greater London',customer_ip_address='127.0.0.1')

# https://django-payments.readthedocs.io/en/latest/usage.html#making-a-payment