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)
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