Как хранить tran_id и val_id в базе данных?

Моя цель - реализовать платежный шлюз на моем сайте электронной коммерции, используя sslcommerz-python. Пользователь может купить товар, нажав на кнопку buy now напрямую, не сохраняя товар в корзине. Платежный шлюз работает хорошо. Теперь я хочу хранить tran_id и val_id в модели PurchasedItem, чтобы админ мог понять, какой товар заказал пользователь и совершил ли он оплату или нет. Как я могу это сделать? Я пробовал разные способы, но они не сработали😥. Подскажите актуальное решение😊...

views.py:

def MakePayment(request,pk):


    mypayment = SSLCSession(sslc_is_sandbox=True, sslc_store_id=store_id, sslc_store_pass=API_key)



    status_url = request.build_absolute_uri(reverse('PaymentStatus'))
    mypayment.set_urls(success_url=status_url, fail_url=status_url, cancel_url=status_url, ipn_url=status_url    )


    #product information
    orderItem = get_object_or_404(FoodMenu, pk=pk)

    mypayment.set_product_integration(
        total_amount=Decimal(order_total),
        currency='BDT',
        product_category='Mixed',
        product_name=orderItem,
        num_of_item=orderQTY,
        shipping_method='Courier',
        product_profile='None'
    )

    #sender info
    mypayment.set_customer_info(
        name=request.user.first_name,
        email=request.user.email,
        address1=request.user.address,
        address2=request.user.address,
        city=request.user.district,
        postcode=request.user.zipcode,
        country='Bangladesh',
        phone = request.user.phone_number
    )

    #billing info
    mypayment.set_shipping_info(
        shipping_to=request.user.first_name,
        address=request.user.address,
        city=request.user.district,
        postcode=request.user.zipcode,
        country='Bangladesh'
    )
    response_data = mypayment.init_payment()

    if request.method == "POST":
        PurchasedItem.objects.create(
            user = request.user,
            item=orderItem,
            address=request.POST.get('address'), 
        )

    return redirect(response_data['GatewayPageURL'])

ПРИМЕЧАНИЕ: В целях безопасности я не упомянул значение store_id и API_key

@csrf_exempt
def PaymentStatus(request):
    
    if request.method == 'POST' or request.method == 'post': 
        payment_data = request.POST
        status = payment_data['status']
        

        if status == 'VALID':
            tran_id = payment_data['tran_id']
            val_id = payment_data['val_id']
            messages.info(request,"Your payment successfully done.")
            return HttpResponseRedirect(reverse("PurchasedProduct", kwargs={'tran_id':tran_id, 'val_id':val_id}))

    return render(request, 'payment_status.html')  


def PurchasedProduct(request,tran_id,val_id):

    context = {
        
    }
    return render(request, 'purchased-products.html', context)

models.py:

class PurchasedItem(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="PurchasedItemUserRelatedName", null=True)
    item = models.ForeignKey(FoodMenu, on_delete=models.CASCADE, related_name="PurchasedItemRelatedName")
    address = models.CharField(max_length=264, null=True, blank=True)
    #transaction info
    tran_id = models.CharField(max_length=264, null=True)
    val_id= models.CharField(max_length=264, null=True)




class FoodMenu(models.Model):
    Category = models.ForeignKey(FoodCategories, on_delete=models.CASCADE, related_name="foodCetegoryRelatedName")
    Name = models.CharField(max_length=250)
    Price = models.CharField(max_length=250)

urls.py:

path("MakePayment/<int:pk>/", views.MakePayment, name="MakePayment"),
path("Payment-Status/", views.PaymentStatus, name="PaymentStatus"),
path("PurchasedProduct/<tran_id>/<val_id>/", views.PurchasedProduct, name="PurchasedProduct")
Вернуться на верх