Beispiel #1
0
    def get(self):
        logging.info("Accessing %s" % self.request.path)
        student_email = self.request.get('student_email')
        user_email = self.request.get('user_email')
        txn_id = self.request.get('tx')

        query = SummerPaypalTransaction.all()
        query.filter('transaction_id = ', txn_id)
        paypal_txn = query.get()

        if paypal_txn is None:
            paypal_txn = SummerPaypalTransaction()
            paypal_txn.transaction_id = txn_id
            paypal_txn.student_email = student_email
            paypal_txn.status = "Initiated"

        values = {
            "cmd" : "_notify-synch",
            "tx" : txn_id,
            "at" : App.paypal_token_id
        }

        try:
            data = urllib.urlencode(values)
            req = urllib2.Request(PAYPAL_URL, data)
            response = urllib2.urlopen(req)
            output = response.read().split('\n')
        except Exception, e:
            logging.error("Error getting transaction info from Paypal <%s>" % e)
Beispiel #2
0
    def get(self):
        logging.info("Accessing %s" % self.request.path)
        txn_id = self.request.get('txn_id')
        student_email = self.request.get('custom')

        charset = self.request.get('charset')
        parameters = dict((arg, self.request.get(arg).encode(charset)) for arg in self.request.arguments())
        parameters['cmd'] = "_notify-validate"
        req = urllib2.Request(PAYPAL_URL, urllib.urlencode(parameters))
        req.add_header("Content-type", "application/x-www-form-urlencoded")

        response = urllib2.urlopen(req)
        status = response.read()
        if status == "VERIFIED":
            query = SummerPaypalTransaction.all()
            query.filter('transaction_id = ', txn_id)
            paypal_txn = query.get()

            if paypal_txn is None:
                paypal_txn = SummerPaypalTransaction()
                paypal_txn.transaction_id = txn_id
                paypal_txn.status = "Initiated"

            paypal_txn.student_email = student_email
            if 'payment_status' in parameters:
                paypal_txn.status = parameters['payment_status']

            query = SummerStudent.all()
            query.filter('email = ', paypal_txn.student_email)
            student = query.get()

            if student is None:
                logging.error("Student not found in DB for email <%s>" % student_email)
            else:
                if 'mc_gross' in parameters:
                    total_amount = int(parameters['mc_gross'])
                    if total_amount >= 1000:
                        # This is tuition
                        parent = SummerParentData.all().filter('email =', student.parent_email).get()
                        number_of_students = 0
                        students = []
                        for skey in parent.students:
                            s = SummerStudent.get(skey)
                            if s.accepted and not s.tuition_paid:
                               students.append(s)
                               number_of_students += 1

                        fee_per_student = int(total_amount/number_of_students)
                        if fee_per_student < 1000:
                            # Tuition is paid using the student's account
                            student.tuition = parameters['mc_gross']

                            if paypal_txn.status == "Completed":
                                student.tuition_paid = True
                            else:
                                student.tuition_paid = False

                            student.put()

                        else:
                            # Tuition paid using parent's account. This works because
                            # if paying via parent, then tuition for all students have
                            # to be paid together
                            for student in students:
                                student.tuition = str(fee_per_student)

                                if paypal_txn.status == "Completed":
                                    student.tuition_paid = True
                                else:
                                    student.tuition_paid = False

                                student.put()
                    else:
                        student.processing_fee = parameters['mc_gross']

                        if paypal_txn.status == "Completed":
                            student.processing_fee_paid = True
                        else:
                            student.processing_fee_paid = False

                        student.put()

            paypal_txn.put()
        else:
            logging.error("Paypal did not verify the IPN response transaction id <%s>" % txn_id)

        return