def make_payment(content_object, request, transaction_opts={}): """""" trans = Transaction(content_object=content_object) trans.status = Transaction.PROCESSING trans.save() total = content_object.get_amount() shipping = content_object.shipping_cost() subtotal = (total - shipping) post_data = { 'intent':'sale', 'redirect_urls':{ 'return_url': build_url(request, trans.get_success_url()), 'cancel_url': build_url(request, trans.get_failure_url()), }, 'payer':{ 'payment_method': 'paypal', }, 'transactions': [{ 'amount': { 'total': "%.2f" % total, 'currency': content_object.currency, 'details': { 'subtotal': "%.2f" % subtotal, 'shipping': "%.2f" % shipping, } }, 'description': str(content_object).encode('ascii', 'ignore'), 'item_list': {'items': []}, }] } if hasattr(content_object, 'get_lines'): for line in content_object.get_lines(): post_data['transactions'][0]['item_list']['items'].append({ 'name': '%s x %s' % (line[1], line[0]), 'quantity': 1, 'price': "%.2f" % line[2], 'currency': content_object.currency, }) else: post_data['transactions'][0]['item_list']['items'].append({ 'quantity': 1, 'name': str(content_object).encode('ascii', 'ignore'), 'price': "%.2f" % subtotal, 'currency': content_object.currency, }) url = PAYPAL_API + '/v1/payments/payment' token = get_paypal_token() # see https://developer.paypal.com/docs/integration/web/accept-paypal-payment/#specify-payment-information-to-create-a-payment opener = urllib2.build_opener(BetterHTTPErrorProcessor) urllib2.install_opener(opener) encoded_data = json.dumps(post_data) request = urllib2.Request(url, encoded_data, headers={"Authorization": 'Bearer ' + token, "Content-Type": 'application/json'}) try: request = urllib2.Request(url, encoded_data, headers={"Authorization": 'Bearer ' + token, "Content-Type": 'application/json'}) result = urllib2.urlopen(request).read() except urllib2.HTTPError, e: raise Exception(e.read())
def post(self, mode =""): # Nothing to do here, content script will pick up accesstoken from here if mode == "ipn": logging.info(self.request.body) result = urlfetch.fetch( ipn_sandbox_url, payload = "cmd=_notify-validate&" + self.request.body, method=urlfetch.POST, validate_certificate=True ) logging.info(result.content) if result.status_code == 200 and result.content == 'VERIFIED': # OK ipn_values = cgi.parse_qs(self.request.body) debug_msg = '\n'.join(["%s=%s" % (k,'&'.join(v)) for (k,v) in ipn_values.items()]) #logging.info("from tung with love") item_number = cgi.escape(self.request.get('item_number')) # get stuff transaction_id = str(cgi.escape(self.request.get('txn_id'))) payer_email = str(cgi.escape(self.request.get('payer_email'))) receiver_email = str(cgi.escape(self.request.get('receiver_email'))) item_amount = str(cgi.escape(self.request.get('payment_gross'))) sales_tax = str(cgi.escape(self.request.get('tax'))) shipping = str(cgi.escape(self.request.get('shipping'))) handling = str(cgi.escape(self.request.get('mc_fee'))) quantity = str(cgi.escape(self.request.get('quantity'))) item_name = str(cgi.escape(self.request.get('item_name'))) date = str(cgi.escape(self.request.get('payment_date'))) status = str(cgi.escape(self.request.get('payment_status'))) payment_type = str(cgi.escape(self.request.get('payment_type'))) ### Change Request to done post = RequestPost.query(RequestPost.reference == item_number).get() #that post if post: post.payment_is_done = True ## Notify tutee notifymsg = NotifiedMessage() notifymsg.read = False notifymsg.person_reference = post.requester notifymsg.object_reference = item_number notifymsg.content = " paid " + item_amount + ", click to give feedback" notifymsg.price = item_amount notifymsg.initiator = post.requester notifymsg.put() # ## Notify tutor notifymsg2 = NotifiedMessage() notifymsg2.read = False notifymsg2.person_reference = post.final_provider notifymsg2.object_reference = item_number notifymsg2.content = " paid " + item_amount + ", click to give feedback " notifymsg2.price = item_amount notifymsg2.initiator = post.requester notifymsg2.put() ### Create Transaction Object newtransaction = Transaction() newtransaction.transaction_id = transaction_id newtransaction.payer_email = payer_email newtransaction.receiver_email = receiver_email newtransaction.item_amount = item_amount newtransaction.sales_tax = sales_tax newtransaction.shipping = shipping newtransaction.handling = handling newtransaction.quantity = quantity newtransaction.item_name = item_name newtransaction.item_number = item_number newtransaction.date = date newtransaction.status = status newtransaction.payment_type = payment_type newtransaction.tutee_username = post.requester newtransaction.tutor_username = post.final_provider newtransaction.testPeoplewhocanseethis.append(post.requester) newtransaction.testPeoplewhocanseethis.append(post.final_provider) newtransaction.put() post.put() self.response.out.write(debug_msg) else: logging.error('Could not fetch %s (%i)' % (url, result.status_code,)) else: logging.error("Unknown mode for POST request!")