/**
  * do payment function.
  *
  * @param WC_order $order
  * @param int $amount (default: 0)
  * @uses  Simplify_BadRequestException
  * @return bool|WP_Error
  */
 public function do_payment($order, $amount = 0, $token = array())
 {
     if ($amount * 100 < 50) {
         return new WP_Error('simplify_error', __('Sorry, the minimum allowed order total is 0.50 to use this payment method.', 'woocommerce'));
     }
     try {
         // Charge the customer
         $data = array('amount' => $amount * 100, 'description' => sprintf(__('%1$s - Order #%2$s', 'woocommerce'), esc_html(get_bloginfo('name', 'display')), $order->get_order_number()), 'currency' => strtoupper(get_woocommerce_currency()), 'reference' => $order->get_id());
         $data = array_merge($data, $token);
         $payment = Simplify_Payment::createPayment($data);
     } catch (Exception $e) {
         $error_message = $e->getMessage();
         if ($e instanceof Simplify_BadRequestException && $e->hasFieldErrors() && $e->getFieldErrors()) {
             $error_message = '';
             foreach ($e->getFieldErrors() as $error) {
                 $error_message .= ' ' . $error->getFieldName() . ': "' . $error->getMessage() . '" (' . $error->getErrorCode() . ')';
             }
         }
         $order->add_order_note(sprintf(__('Simplify payment error: %s', 'woocommerce'), $error_message));
         return new WP_Error('simplify_payment_declined', $e->getMessage(), array('status' => $e->getCode()));
     }
     if ('APPROVED' == $payment->paymentStatus) {
         // Payment complete
         $order->payment_complete($payment->id);
         // Add order note
         $order->add_order_note(sprintf(__('Simplify payment approved (ID: %1$s, Auth Code: %2$s)', 'woocommerce'), $payment->id, $payment->authCode));
         return true;
     } else {
         $order->add_order_note(__('Simplify payment declined', 'woocommerce'));
         return new WP_Error('simplify_payment_declined', __('Payment was declined - please try another card.', 'woocommerce'));
     }
 }