def _bill_credit_card(self, cust, order, bill): api = BaseBillingApi.create_api(cust.campaign.company.enterprise) api.set_coupon(self.request.POST.get('coupon_code')) if api.purchase(order, bill, util.request_ip(self.request)): # accept terms if they sent accept_terms as positive across (checkbox) if ('accept_terms' in self.request.POST and self.request.POST['accept_terms'] == '1'): accept = OrderItemTermsAcceptance() accept.order_id = order.order_id accept.signature = cust.email accept.save() accept.flush() self._apply_payment(cust.customer_id, order.order_id, order.total_price(), api.payment_method) try: order.campaign.send_post_purchase_comm(order) except Exception as exc: #pragma: no cover log.exception(exc) try: order.campaign.send_admin_post_sale_comm(order) except Exception as exc: #pragma: no cover log.exception(exc) return order else: (_, last_note) = api.get_last_status() self.flash('Unable to bill credit card: %s' % last_note) log.error('CC DECLINED %s %s %s' % (cust.customer_id, cust.email, last_note)) self.raise_redirect(self.request.referrer)