Git Product home page Git Product logo

zarinpal-django-py3's Introduction

Hi there 👋

zarinpal-django-py3's People

Contributors

rasooll avatar shimafallah avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

zarinpal-django-py3's Issues

list indices must be integers or slices, not str

thanx for update, but i have some eror:

TypeError at /order/request/59146000

list indices must be integers or slices, not str
Request Method: GET
http://127.0.0.1:8000/order/request/59146000
3.2.4
TypeError
list indices must be integers or slices, not str
E:\WorkSpace\django\website\order\views.py, line 72, in send_request
E:\WorkSpace\django\venv\Scripts\python.exe
3.9.5
['E:\WorkSpace\django\website', 'C:\Program Files\Python39\python39.zip', 'C:\Program Files\Python39\DLLs', 'C:\Program Files\Python39\lib', 'C:\Program Files\Python39', 'E:\WorkSpace\django\venv', 'E:\WorkSpace\django\venv\lib\site-packages']
Mon, 09 Aug 2021 16:57:21 +0430

Traceback Switch to copy-and-paste view

  • E:\WorkSpace\django\venv\lib\site-packages\django\core\handlers\exception.py, line 47, in inner
    1.                 response = get_response(request)
  • E:\WorkSpace\django\venv\lib\site-packages\django\core\handlers\base.py, line 181, in _get_response
    1.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)
  • E:\WorkSpace\django\website\order\views.py, line 72, in send_request
    1.     authority = auth_data['data']['authority']

sometimes give me "anonymoususer" error

from django.http import HttpResponse, request
from django.shortcuts import redirect, get_object_or_404, render
from zeep import Client
from django.conf import settings
from accounts.models import Profile
from products.models import Product
from pay.models import Order, OrderItem
import datetime
from django.core.mail import BadHeaderError, send_mail
from django.template.loader import render_to_string
from pay.views import get_user_pending_order

MERCHANT = 'xxx...xxx'
client = Client('https://www.zarinpal.com/pg/services/WebGate/wsdl')
amount = ""
description = ""  # Required
email = ""  # Optional
mobile = "" # Optional
CallbackURL = 'https://mysite/payment/verify/' # Important: need to edit for realy server.

def send_request(request):
    username = request.user
    amount = get_user_pending_order(request).get_total() + get_user_pending_order(request).transport.transport_price
    email = username.email  # Optional
    mobile = username.profile.phone_number  # Optional
    result = client.service.PaymentRequest(MERCHANT, amount, description, email, mobile, CallbackURL)
    order_to_purchase = get_user_pending_order(request)
    order_to_purchase.save()
    if result.Status == 100:
        return redirect('https://www.zarinpal.com/pg/StartPay/' + str(result.Authority))
    else:
        return HttpResponse('Error code: ' + str(result.Status))

def verify(request):
    amount = get_user_pending_order(request).get_total() + get_user_pending_order(request).transport.transport_price
    if request.GET.get('Status') == 'OK':
        result = client.service.PaymentVerification(MERCHANT, request.GET['Authority'], amount)
        if result.Status == 100:
            user = request.user
            order_to_purchase = get_user_pending_order(request)
            order_to_purchase.is_ordered = True
            order_to_purchase.save()
            order_to_purchase.date_ordered=datetime.datetime.now()
            order_to_purchase.created_on_time=datetime.datetime.now()
            order_to_purchase.save()
            order_items = order_to_purchase.items.all()
            for order_item in order_items:
                order_item.product.quantity = order_item.product.quantity - 1
                order_item.product.save()
            order_items.update(is_ordered=True, date_ordered=datetime.datetime.now())
            subject = 'پرداخت با موفقیت انجام شد'
            c = {
            "refid":str(result.RefID),
            "ref_code":order_to_purchase.ref_code,
            "owner":order_to_purchase.owner,
            }
            email_template_name = "pay/after_pay_confirm_email.html"
            email_html = render_to_string(email_template_name, c)
            email_from = settings.EMAIL_HOST_USER
            send_mail(subject, email_html, email_from, [user.email], html_message=email_html)
            ctx = {'message_good':'پرداخت با موفقیت انجام شد. \n کد پیگیری تراکنش : ' + str(result.RefID)}
        elif result.Status == 101:
            return HttpResponse('Transaction submitted : ' + str(result.Status))
        else:
            return HttpResponse('Transaction failed.\nStatus: ' + str(result.Status))
    else:
        ctx = {'message_bad':'پرداخت با مشکل مواجه شده است یا توسط کاربر لغو شده'}
    return render(request, 'pay/verify.html', ctx)

additional codes :

`def get_user_pending_order(request):
    user_profile = get_object_or_404(Profile, user=request.user)
    order = Order.objects.filter(owner=user_profile, is_ordered=False)
    if order.exists():
        return order[0]
    return 0`

and

class Order(models.Model):
    ...
    owner = models.ForeignKey(Profile, on_delete=models.SET_NULL, null=True)
    is_ordered = models.BooleanField(default=False)
    transport = models.ForeignKey(Transport, on_delete=models.SET_NULL, null=True)
    ...

    def get_cart_items(self):
        return self.items.all()

    def __str__(self):
        return '{0} - {1}'.format(self.owner, self.ref_code)  

    def get_total(self):
        total = 0
        for order_item in self.items.all():
            total += order_item.get_final_price()
        return total

in the beginning of verify get_user_pending_order(request).get_total() + get_user_pending_order(request).transport.transport_price about requests

sometimes with different users give me "anonymoususer" error, not always and its after success payment

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.