Как хранить 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")