public function validation($validation_result)
 {
     if (!$validation_result['is_valid'] || !GFFormDisplay::is_last_page($validation_result['form'])) {
         return $validation_result;
     }
     $form = $validation_result['form'];
     $entry = GFFormsModel::create_lead($form);
     $feed = $this->get_payment_feed($entry, $form);
     if (!$feed) {
         return $validation_result;
     }
     $submission_data = $this->get_submission_data($feed, $form, $entry);
     //Do not process payment if payment amount is 0
     if (floatval($submission_data['payment_amount']) <= 0) {
         $this->log_debug(__METHOD__ . '(): Payment amount is $0.00 or less. Not sending to payment gateway.');
         return $validation_result;
     }
     $this->is_payment_gateway = true;
     $this->current_feed = $this->_single_submission_feed = $feed;
     $this->current_submission_data = $submission_data;
     $performed_authorization = false;
     $is_subscription = $feed['meta']['transactionType'] == 'subscription';
     if ($this->payment_method_is_overridden('authorize') && !$is_subscription) {
         //Running an authorization only transaction if function is implemented and this is a single payment
         $this->authorization = $this->authorize($feed, $submission_data, $form, $entry);
         $performed_authorization = true;
     } elseif ($this->payment_method_is_overridden('subscribe') && $is_subscription) {
         $subscription = $this->subscribe($feed, $submission_data, $form, $entry);
         $this->authorization['is_authorized'] = $subscription['is_success'];
         $this->authorization['error_message'] = rgar($subscription, 'error_message');
         $this->authorization['subscription'] = $subscription;
         $performed_authorization = true;
     }
     if ($performed_authorization) {
         $this->log_debug(__METHOD__ . "(): Authorization result for form #{$form['id']} submission => " . print_r($this->authorization, 1));
     }
     if ($performed_authorization && !$this->authorization['is_authorized']) {
         $validation_result = $this->get_validation_result($validation_result, $this->authorization);
         //Setting up current page to point to the credit card page since that will be the highlighted field
         GFFormDisplay::set_current_page($validation_result['form']['id'], $validation_result['credit_card_page']);
     }
     return $validation_result;
 }
 public function validation($validation_result)
 {
     if (!GFFormDisplay::is_last_page($validation_result['form'])) {
         return $validation_result;
     }
     $has_authorize = $this->payment_method_is_overridden('authorize');
     $has_subscribe = $this->payment_method_is_overridden('subscribe');
     if (!$has_authorize && !$has_subscribe) {
         return $validation_result;
     }
     //Getting submission data
     $form = $validation_result["form"];
     $entry = GFFormsModel::create_lead($form);
     $feed = $this->get_payment_feed($entry, $form);
     if (!$feed) {
         return $validation_result;
     }
     $do_authorization = $has_authorize && $feed["meta"]["transactionType"] == "product";
     $do_subscription = $has_subscribe && $feed["meta"]["transactionType"] == "subscription";
     if (!$do_authorization && !$do_subscription) {
         return $validation_result;
     }
     $submission_data = $this->get_submission_data($feed, $form, $entry);
     //Running an authorization only transaction if function is implemented and this is a single payment
     if ($do_authorization) {
         $this->authorization = $this->authorize($feed, $submission_data, $form, $entry);
     } else {
         if ($do_subscription) {
             $subscription = $this->subscribe($feed, $submission_data, $form, $entry);
             $this->authorization["is_authorized"] = $subscription["is_success"];
             $this->authorization["error_message"] = rgar($subscription, "error_message");
             $this->authorization["subscription"] = $subscription;
         }
     }
     $this->authorization["feed"] = $feed;
     $this->authorization["submission_data"] = $submission_data;
     if (!$this->authorization["is_authorized"]) {
         $validation_result = $this->get_validation_result($validation_result, $this->authorization);
         //Setting up current page to point to the credit card page since that will be the highlighted field
         GFFormDisplay::set_current_page($validation_result["form"]["id"], $validation_result["credit_card_page"]);
     }
     return $validation_result;
 }
 /**
  * @param $validation_result
  * @param $post
  * @param $error_message
  *
  * @return mixed
  */
 public static function set_validation_result($validation_result, $post, $error_message)
 {
     $credit_card_page = 0;
     foreach ($validation_result['form']['fields'] as &$field) {
         if ('creditcard' == $field["type"]) {
             $field['failed_validation'] = true;
             $field['validation_message'] = $error_message;
             $credit_card_page = $field['pageNumber'];
             break;
         }
     }
     $validation_result['is_valid'] = false;
     GFFormDisplay::set_current_page($validation_result['form']['id'], $credit_card_page);
     $validation_result = apply_filters('gfp_stripe_set_validation_result', $validation_result, $post, $error_message);
     return $validation_result;
 }
Exemplo n.º 4
0
 private static function set_validation_result($validation_result, $post, $response, $responsetype)
 {
     if ($responsetype == "aim") {
         $code = $response->response_reason_code;
         switch ($code) {
             case "2":
             case "3":
             case "4":
             case "41":
                 $message = __("This credit card has been declined by your bank. Please use another form of payment.", "gravityformsauthorizenet");
                 break;
             case "8":
                 $message = __("The credit card has expired.", "gravityformsauthorizenet");
                 break;
             case "17":
             case "28":
                 $message = __("The merchant does not accept this type of credit card.", "gravityformsauthorizenet");
                 break;
             case "7":
             case "44":
             case "45":
             case "65":
             case "78":
             case "6":
             case "37":
             case "27":
             case "78":
             case "45":
             case "200":
             case "201":
             case "202":
                 $message = __("There was an error processing your credit card. Please verify the information and try again.", "gravityformsauthorizenet");
                 break;
             default:
                 $message = __("There was an error processing your credit card. Please verify the information and try again.", "gravityformsauthorizenet");
         }
     } else {
         $code = $response->getMessageCode();
         switch ($code) {
             case "E00012":
                 $message = __("A duplicate subscription already exists.", "gravityformsauthorizenet");
                 break;
             case "E00018":
                 $message = __("The credit card expires before the subscription start date. Please use another form of payment.", "gravityformsauthorizenet");
                 break;
             default:
                 $message = __("There was an error processing your credit card. Please verify the information and try again.", "gravityformsauthorizenet");
         }
     }
     $message = "<!-- Error: " . $code . " -->" . $message;
     $credit_card_page = 0;
     foreach ($validation_result["form"]["fields"] as &$field) {
         if ($field["type"] == "creditcard") {
             $field["failed_validation"] = true;
             $field["validation_message"] = $message;
             $credit_card_page = $field["pageNumber"];
             break;
         }
     }
     $validation_result["is_valid"] = false;
     GFFormDisplay::set_current_page($validation_result["form"]["id"], $credit_card_page);
     return $validation_result;
 }
 /**
  * process a form validation filter hook; if last page and has credit card field and total, attempt to bill it
  * @param array $data an array with elements is_valid (boolean) and form (array of form elements)
  * @return array
  */
 public function gformValidation($data)
 {
     // make sure all other validations passed
     if ($data['is_valid'] && self::isEwayForm($data['form']['id'], $data['form']['fields'])) {
         require GFEWAY_PLUGIN_ROOT . 'includes/class.GFEwayFormData.php';
         $formData = new GFEwayFormData($data['form']);
         // make sure form hasn't already been submitted / processed
         if ($this->hasFormBeenProcessed($data['form'])) {
             $data['is_valid'] = false;
             $formData->ccField['failed_validation'] = true;
             $formData->ccField['validation_message'] = $this->getErrMsg(GFEWAY_ERROR_ALREADY_SUBMITTED);
         } else {
             if (!$formData->isCcHidden() && $formData->isLastPage() && $formData->ccField !== false) {
                 if (!$formData->hasPurchaseFields()) {
                     $data['is_valid'] = false;
                     $formData->ccField['failed_validation'] = true;
                     $formData->ccField['validation_message'] = $this->getErrMsg(GFEWAY_ERROR_NO_AMOUNT);
                 } else {
                     // only check credit card details if we've got something to bill
                     if ($formData->total > 0 || $formData->hasRecurringPayments()) {
                         // check for required fields
                         $required = array('ccName' => $this->getErrMsg(GFEWAY_ERROR_REQ_CARD_HOLDER), 'ccNumber' => $this->getErrMsg(GFEWAY_ERROR_REQ_CARD_NAME));
                         foreach ($required as $name => $message) {
                             if (empty($formData->{$name})) {
                                 $data['is_valid'] = false;
                                 $formData->ccField['failed_validation'] = true;
                                 if (!empty($formData->ccField['validation_message'])) {
                                     $formData->ccField['validation_message'] .= '<br />';
                                 }
                                 $formData->ccField['validation_message'] .= $message;
                             }
                         }
                         // if no errors, try to bill it
                         if ($data['is_valid']) {
                             if ($formData->hasRecurringPayments()) {
                                 $data = $this->processRecurringPayment($data, $formData);
                             } else {
                                 $data = $this->processSinglePayment($data, $formData);
                             }
                         }
                     }
                 }
             }
         }
         // if errors, send back to credit card page
         if (!$data['is_valid']) {
             GFFormDisplay::set_current_page($data['form']['id'], $formData->ccField['pageNumber']);
         }
     }
     return $data;
 }