如何解决此错误,由于这个原因,我无法将用户更新为付款后的付款方式。由于这个原因,我也无法更新购买的订单。进行此更改后,我通过在views.py中删除current_user尝试了此问题,我无法将用户更新为付费用户。我是一个初学者,所以对此我不太了解。请帮助我解决此错误并更新数据库中的付费用户。
views.py
@login_required
def initiate_payment(request):
transaction = Transaction.objects.create(made_by=request.user, amount=1)
transaction.save()
merchant_key = settings.PAYTM_SECRET_KEY
params = (
('MID', settings.PAYTM_MERCHANT_ID),
('ORDER_ID', str(transaction.order_id)),
('CUST_ID', str(transaction.made_by.email)),
('TXN_AMOUNT', str(transaction.amount)),
('CHANNEL_ID', settings.PAYTM_CHANNEL_ID),
('WEBSITE', settings.PAYTM_WEBSITE),
#('EMAIL', request.user.email),
# ('MOBILE_N0', '9911223388'),
('INDUSTRY_TYPE_ID', settings.PAYTM_INDUSTRY_TYPE_ID),
('CALLBACK_URL', 'https://www.presimax.online/callback/'),
# ('PAYMENT_MODE_ONLY', 'NO'),
)
paytm_params = dict(params)
checksum = generate_checksum(paytm_params, merchant_key)
transaction.checksum = checksum
transaction.save()
paytm_params['CHECKSUMHASH'] = checksum
print('SENT: ', checksum)
return render(request, 'redirect.html', context=paytm_params)
@csrf_exempt
def callback(request):
if request.method == 'POST':
received_data = dict(request.POST)
paytm_params = {}
paytm_checksum = received_data['CHECKSUMHASH'][0]
for key, value in received_data.items():
if key == 'CHECKSUMHASH':
paytm_checksum = value[0]
else:
paytm_params[key] = str(value[0])
# Verify checksum
is_valid_checksum = verify_checksum(paytm_params, settings.PAYTM_SECRET_KEY, str(paytm_checksum))
if is_valid_checksum:
received_data['message'] = "Checksum Matched"
current_user = request.user.userprofile
current_user.paidmem = True
current_user.save()
else:
received_data['message'] = "Checksum Mismatched"
return render(request, 'callback.html', context=received_data)
return HttpResponse('Now You are a Club member visit club to fill required details.....')
class club(View):
template_name = "club.html"
def get(self,*args,**kwargs):
if self.request.user.userprofile.Isclubmem:
club_member = Clubmember.objects.filter(user=self.request.user.userprofile)
context = {
'club_member': club_member
}
return render(self.request,self.template_name,context=context)
else:
return redirect('core:pay')
return render(self.request,self.template_name)
def post(self, *args ,**kwargs):
if not self.request.user.userprofile.Isclubmem:
if self.request.method == 'POST':
self.request.user.userprofile.userphoto = self.request.FILES.get('image')
self.request.user.userprofile.phone_number = self.request.POST.get('userphonenumber')
self.request.user.userprofile.Isclubmem = True
k = refgenrator('any')
while len(Clubmember.objects.filter(refer = k))>1:
k = refgenrator('any')
club_member = Clubmember.objects.create(
user = self.request.user.userprofile,
refer = k,
)
ref = self.request.POST.get('referalcode')
try:
referer = Clubmember.objects.filter(refer=ref).first()
referer.childern += 1
referer.level = int(referer.childern/3)+1
referer.downliner+= ' ' + self.request.user.username
referer.usermoney = referer.childern*100 - referer.usermoney
referer.save()
except:
pass
club_member.totalearnings = club_member.usermoney + club_member.downlineincome + club_member.travelfund + club_member.teamincome
club_member.save()
self.request.user.userprofile.save()
return redirect('core:home')
elif not self.request.user.userprofile.paidmem:
return redirect('core:pay')
models.py
class UserProfile(models.Model):
user = models.OneToOneField(
settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
stripe_customer_id = models.CharField(max_length=50, blank=True, null=True)
Isclubmem = models.BooleanField(default=False)
paidmem = models.BooleanField(default=False)
one_click_purchasing = models.BooleanField(default=False)
userphoto = models.ImageField(upload_to='images/',default='', null=True)
phone_number = models.IntegerField(default=False, null=True)
def __str__(self):
return self.user.username
@login_required
def initiate_payment(request):
# Only procceed further if not anonymus user
if request.user.is_authenticated:
transaction = Transaction.objects.create(made_by=request.user, amount=1)
transaction.save()
merchant_key = settings.PAYTM_SECRET_KEY
params = (
('MID', settings.PAYTM_MERCHANT_ID),
('ORDER_ID', str(transaction.order_id)),
('CUST_ID', str(transaction.made_by.email)),
('TXN_AMOUNT', str(transaction.amount)),
('CHANNEL_ID', settings.PAYTM_CHANNEL_ID),
('WEBSITE', settings.PAYTM_WEBSITE),
#('EMAIL', request.user.email),
# ('MOBILE_N0', '9911223388'),
('INDUSTRY_TYPE_ID', settings.PAYTM_INDUSTRY_TYPE_ID),
('CALLBACK_URL', 'https://www.presimax.online/callback/'),
# ('PAYMENT_MODE_ONLY', 'NO'),
)
paytm_params = dict(params)
checksum = generate_checksum(paytm_params, merchant_key)
transaction.checksum = checksum
transaction.save()
paytm_params['CHECKSUMHASH'] = checksum
print('SENT: ', checksum)
return render(request, 'redirect.html', context=paytm_params)