def verify(self): # # Get Payment details # data = self.request.form ordernumber = data['orderID'] if get_status_category(int(data['STATUS'])) != SUCCESS_STATUS: return False # # SHA passphrase verification # signer = OgoneSignature(data, 'sha512', SHA_OUT_PASSWORD) order_uid = IPaymentData(self.context).uid_for(ordernumber) payment = Payments(self.context).get('ogone_payment') if data['SHASIGN'] == signer.signature(): payment.succeed(self.context, order_uid) order = OrderData(self.context, uid=order_uid) order.salaried = ifaces.SALARIED_YES return True else: payment.failed(self.context, order_uid) return False
def __call__(self, **kw): uid = self.request['uid'] payment = Payments(self.context).get('invoice') payment.succeed(self.request, uid) url = '{url}/@@invoiced?uid={uid}&_authenticator={token}'.format( url=self.context.absolute_url(), uid=uid, token=createToken()) self.request.response.redirect(url)
def __call__(self, **kw): uid = self.request['uid'] payment = Payments(self.context).get('cash') payment.succeed(self.request, uid) url = '%s/@@cash_in_advance_done?uid=%s' % ( self.context.absolute_url(), uid) self.request.response.redirect(url)
def __call__(self, **kw): uid = self.request['uid'] payment = Payments(self.context).get('cash') payment.succeed(self.request, uid) url = '%s/@@cash_on_delivery_done?uid=%s' % ( self.context.absolute_url(), uid) self.request.response.redirect(url)
def __call__(self, **kw): uid = self.request['uid'] payment = Payments(self.context).get('invoice') payment.succeed(self.request, uid) url = '{url}/@@pay_invoice_done?uid={uid}&_authenticator={token}'.format( url=self.context.absolute_url(), uid=uid, token=createToken() ) self.request.response.redirect(url)
def id(self): uid = self.request.get('uid', None) payment = Payments(self.context).get('dibs') payment.succeed(self.request, uid) try: order = get_order(self.context, uid) except ValueError: return None return order.attrs.get('ordernumber')
def __call__(self): stripe.api_key = self.secret_key base_url = self.context.absolute_url() token = self.request['stripeToken'] order_uid = self.request['uid'] payment = Payments(self.context).get('stripe_payment') try: data = IPaymentData(self.context).data(order_uid) amount = data['amount'] currency = data['currency'] description = data['description'] ordernumber = data['ordernumber'] charge = stripe.Charge.create( amount=amount, currency=currency, description=description, source=token, metadata={ 'ordernumber': ordernumber, 'order_uid': order_uid } ) evt_data = { 'charge_id': charge['id'], } payment.succeed(self.request, order_uid, evt_data) purge_cart(self.request) transaction.commit() redirect_url = '{base_url}/@@stripe_payment_success?uid={order_uid}'.format( base_url=base_url, order_uid=order_uid) return self.request.response.redirect(redirect_url) except Redirect as e: # simply re-raise error from above, otherwise it would get # caught in generel Exception catching block raise e except stripe.error.CardError as e: logger.error(format_traceback()) body = e.json_body err = body.get('error', {}) logger.error(( 'Failed to charge card\n' ' Status: {}\n' ' Type: {}\n' ' Code: {}\n' ' Message: {}' ).format( e.http_status, err.get('type'), err.get('code'), err.get('message') )) if not err.get('message'): message = 'Failed to charge card' else: message = err['message'] except stripe.error.RateLimitError as e: logger.error(format_traceback()) message = 'Too many requests made to the API too quickly' except stripe.error.InvalidRequestError as e: logger.error(format_traceback()) message = 'Invalid parameters were supplied to Stripe\'s API' except stripe.error.AuthenticationError as e: logger.error(format_traceback()) message = 'Authentication with Stripe\'s API failed' except stripe.error.APIConnectionError as e: logger.error(format_traceback()) message = 'Network communication with Stripe failed' except stripe.error.StripeError as e: logger.error(format_traceback()) message = 'Generic stripe error' except Exception as e: logger.error(format_traceback()) message = 'General error' evt_data = { 'charge_id': 'none', } payment.failed(self.request, order_uid, evt_data) transaction.commit() redirect_url = '{}/@@stripe_payment_failed?message={}'.format( base_url, message ) raise Redirect(redirect_url)
def __call__(self, **kw): uid = self.request['uid'] payment = Payments(self.context).get('debit_order') payment.succeed(self.request, uid) url = '%s/@@debit_ordered?uid=%s' % (self.context.absolute_url(), uid) self.request.response.redirect(url)
def verify(self): # # Get Payment details # # Get order order = None tickets = is_context_ticket(self.context) skip_payment = False order_data = { "order_id": "", "total": "", "shipping": "", "currency": "", "tax": "", "ticket": tickets, "download_link": None, "verified": False } data = self.request.form ordernumber = data.get('orderID', '') if ordernumber: order_uid = IPaymentData(self.context).uid_for(ordernumber) if get_status_category(int(data['STATUS'])) != SUCCESS_STATUS: return order_data else: order_uid = data.get('order_uid', '') if order_uid: try: order = OrderData(self.context, uid=order_uid) except: order = None if order: if order.total > 0: return order_data else: skip_payment = True else: return order_data else: return order_data # # SHA passphrase verification # signer = OmnikassaSignature(data, 'sha512', SHA_OUT_PASSWORD) payment = Payments(self.context).get('omnikassa_payment') if not order: try: order = OrderData(self.context, uid=order_uid) except: order = None # Check if order exists if order_uid != None and order != None: order = OrderData(self.context, uid=order_uid) order_nr = order.order.attrs['ordernumber'] # Build order data order_data = { "ordernumber": str(order_nr), "order_id": str(order_uid), "total": str(order.total), "shipping": str(order.shipping), "currency": str(order.currency), "tax": str(order.vat), "ticket": tickets, "download_link": None, "verified": False, "already_sent":False, "bookings":json.dumps([]) } order_bookings = [] for booking in order.bookings: try: booking_uid = booking.attrs['buyable_uid'] item_number = booking.attrs['item_number'] if item_number: sku = str(item_number) else: sku = str(booking_uid) item_category = "Product" # Default category if tickets: item_category = "E-Ticket" order_bookings.append({ 'id':sku, 'price': str(float(booking.attrs['net'])), 'name': str(booking.attrs['title']), 'category': item_category, 'quantity': int(booking.attrs['buyable_count']), }) except: pass try: order_data['bookings'] = json.dumps(order_bookings) except: # Invalid JSON format order_data['bookings'] = json.dumps([]) if tickets: base_url = self.context.portal_url() params = "?order_id=%s" %(str(order_uid)) download_as_pdf_link = "%s/download_as_pdf?page_url=%s/tickets/etickets%s" %(base_url, base_url, params) order_data['download_link'] = download_as_pdf_link else: # Order doesn't exist in the database # return blank ticket order_data = { "order_id": "", "total": "", "shipping": "", "currency": "", "tax": "", "ticket": tickets, "download_link": None, "verified": False } return order_data shasign = data.get('SHASIGN', '') if shasign == signer.signature() or skip_payment: order_data['verified'] = True order = OrderData(self.context, uid=order_uid) order.salaried = ifaces.SALARIED_YES if order.order.attrs['email_sent'] != 'yes': order.order.attrs['email_sent'] = 'yes' orders_soup = get_orders_soup(self.context) order_record = order.order orders_soup.reindex(records=[order_record]) transaction.get().commit() if not skip_payment: payment.succeed(self.context, order_uid) return order_data else: return order_data else: payment.failed(self.context, order_uid) return order_data