def prepare_order(self, request): shopping_cart = Cart(request) if (not request.session.has_key('order_id')) or request.session['order_id'] is None: order = self.create_new_order(request, shopping_cart) else: try: order = Order.objects.get(pk=request.session['order_id']) except ObjectDoesNotExist: order = self.create_new_order(request, shopping_cart) # update order items order.fill_items() order.ip_address = get_client_ip(request) if not order.email and not request.user.is_anonymous(): order.email = request.user.email order.save() if not order.user and not request.user.is_anonymous(): order.user = request.user.get_profile() order.save() return order
def get(self, request, *args, **kwargs): method = self.load_method(kwargs['method']) settings = method.behavior().config order = Order.objects.get(pk=request.session['order_id']) # order.mark_confirmed() detalisation = order.get_detalisation() # for row in detalisation['rows']: # ulink_order.items.append(UlinkOrderItem(smart_str(row['title']), '', str(row['price']))) # Preparing the data that we are sending to DIBS # Order total to be sent to DIBS must be an int specified in cents or # equivalent. order_total = int(detalisation['full_total'] * 100) order_id = order.id # Create md5 hash to make payment secure: md5_key = md5(settings['MD52'] + md5(settings['MD51'] + 'merchant=%s&orderid=%s¤cy=%s&amount=%s' % (settings['MERCHANT'], order_id, settings['CURRENCY'], order_total))) # Create the cancel and accept url, based on the request to get the host # and reverse to get the url. # cancelurl = 'http://' + request.META['HTTP_HOST'] + reverse('satchmo_checkout-step1') # accepturl = 'http://' + request.META['HTTP_HOST'] + reverse('DIBS_satchmo_checkout-success') # callbackurl = 'http://' + request.META['HTTP_HOST'] + reverse('DIBS_satchmo_checkout-step4') + '?order_id=' + str(order.id) # cancelurl = 'http://' + settings['CALLBACK_DOMAIN'] + reverse('dibs_payment_cancel', kwargs={'method': method.slug}) accepturl = 'http://' + settings['CALLBACK_DOMAIN'] + reverse('dibs_payment_accept', kwargs={'method': method.slug}) callbackurl = 'http://' + settings['CALLBACK_DOMAIN'] + reverse('dibs_payment_callback', kwargs={'method': method.slug}) data = [ ('merchant', settings['MERCHANT']), ('amount', order_total), ('currency', settings['CURRENCY']), ('orderid', order_id), ('accepturl', accepturl), ('cancelurl', cancelurl), ('callbackurl', callbackurl), ('ip', get_client_ip(request)), #('uniqueoid', 'yes'), ('lang', get_language()), ('md5key', md5_key), ('calcfee', 'yes'), # Currently not implemented in the flex window. # ('delivery1', order.ship_addressee), # ('delivery2', order.ship_street1), # ('delivery3', order.ship_postal_code + ' ' + order.ship_city) ('capturenow', 'yes'), ] log_payment(request, 'dibs', 'pay_start', data) # if settings['CAPTURE']: # data.append(('capturenow', 'yes')) if not settings['LIVE']: data.append(('test', 'yes')) send_data = urllib.urlencode(data) return HttpResponseRedirect('https://payment.architrade.com/paymentweb/start.action?' + send_data)