/** * Entry post save * * @param array $lead * @param array $form */ public function entry_post_save($lead, $form) { if ($this->is_processing($form)) { // Payment ID $payment_id = gform_get_meta($lead['id'], 'pronamic_payment_id'); if (!empty($payment_id)) { return $lead; } // Gateway $this->gateway = Pronamic_WP_Pay_Plugin::get_gateway($this->feed->config_id); if (!$this->gateway) { return $lead; } // New payment $data = new Pronamic_WP_Pay_Extensions_GravityForms_PaymentData($form, $lead, $this->feed); $payment_method = $data->get_payment_method(); // Set payment method to iDEAL if issuer_id is set if (null === $data->get_payment_method() && null !== $data->get_issuer_id()) { $payment_method = Pronamic_WP_Pay_PaymentMethods::IDEAL; } $this->payment = Pronamic_WP_Pay_Plugin::start($this->feed->config_id, $this->gateway, $data, $payment_method); $this->error = $this->gateway->get_error(); // Updating lead's payment_status to Processing $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_STATUS] = Pronamic_WP_Pay_Extensions_GravityForms_PaymentStatuses::PROCESSING; $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_AMOUNT] = $this->payment->get_amount(); $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_DATE] = gmdate('y-m-d H:i:s'); $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::TRANSACTION_TYPE] = Pronamic_WP_Pay_Extensions_GravityForms_GravityForms::TRANSACTION_TYPE_PAYMENT; $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::TRANSACTION_ID] = $this->payment->get_transaction_id(); // Update entry meta with payment ID gform_update_meta($lead['id'], 'pronamic_payment_id', $this->payment->get_id()); // Update entry meta with feed ID gform_update_meta($lead['id'], 'ideal_feed_id', $this->feed->id); // Update entry meta with current payment gateway gform_update_meta($lead['id'], 'payment_gateway', 'pronamic_pay'); // Update lead Pronamic_WP_Pay_Extensions_GravityForms_GravityForms::update_entry($lead); } return $lead; }
/** * Update lead status of the specified payment * * @param string $payment */ public function update_status(Pronamic_Pay_Payment $payment, $can_redirect = false) { $lead_id = $payment->get_source_id(); $lead = RGFormsModel::get_lead($lead_id); if ($lead) { $form_id = $lead['form_id']; $form = RGFormsModel::get_form($form_id); $feed = get_pronamic_gf_pay_feed_by_entry_id($lead_id); $data = new Pronamic_WP_Pay_Extensions_GravityForms_PaymentData($form, $lead, $feed); if ($feed) { $url = null; switch ($payment->status) { case Pronamic_WP_Pay_Statuses::CANCELLED: $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_STATUS] = Pronamic_WP_Pay_Extensions_GravityForms_PaymentStatuses::CANCELLED; $url = $data->get_cancel_url(); break; case Pronamic_WP_Pay_Statuses::EXPIRED: $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_STATUS] = Pronamic_WP_Pay_Extensions_GravityForms_PaymentStatuses::EXPIRED; $url = $feed->get_url(Pronamic_WP_Pay_Extensions_GravityForms_Links::EXPIRED); break; case Pronamic_WP_Pay_Statuses::FAILURE: $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_STATUS] = Pronamic_WP_Pay_Extensions_GravityForms_PaymentStatuses::FAILED; $url = $data->get_error_url(); break; case Pronamic_WP_Pay_Statuses::SUCCESS: if (!Pronamic_WP_Pay_Extensions_GravityForms_Entry::is_payment_approved($lead)) { // Only fullfill order if the payment isn't approved aloready $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_STATUS] = Pronamic_WP_Pay_Extensions_GravityForms_PaymentStatuses::APPROVED; // @see https://github.com/gravityforms/gravityformspaypal/blob/2.3.1/class-gf-paypal.php#L1741-L1742 if ($this->addon) { $action = array('id' => $payment->get_transaction_id(), 'type' => 'complete_payment', 'transaction_id' => $payment->get_transaction_id(), 'amount' => $payment->get_amount(), 'entry_id' => $lead['id']); $this->addon->complete_payment($lead, $action); } $this->fulfill_order($lead); } $url = $data->get_success_url(); break; case Pronamic_WP_Pay_Statuses::OPEN: default: $url = $data->get_normal_return_url(); break; } Pronamic_WP_Pay_Extensions_GravityForms_GravityForms::update_entry($lead); if ($url && $can_redirect) { wp_redirect($url); exit; } } } }
/** * Entry post save * * @param array $lead * @param array $form */ public function entry_post_save($lead, $form) { if ($this->is_processing($form) && $this->payment) { // Updating lead's payment_status to Processing $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_STATUS] = Pronamic_WP_Pay_Extensions_GravityForms_PaymentStatuses::PROCESSING; $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_AMOUNT] = $this->payment->get_amount(); $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::PAYMENT_DATE] = gmdate('y-m-d H:i:s'); $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::TRANSACTION_TYPE] = Pronamic_WP_Pay_Extensions_GravityForms_GravityForms::TRANSACTION_TYPE_PAYMENT; $lead[Pronamic_WP_Pay_Extensions_GravityForms_LeadProperties::TRANSACTION_ID] = $this->payment->get_transaction_id(); // Update entry meta with payment ID gform_update_meta($lead['id'], 'pronamic_payment_id', $this->payment->get_id()); // Update entry meta with feed ID gform_update_meta($lead['id'], 'ideal_feed_id', $this->feed->id); // Update entry meta with current payment gateway gform_update_meta($lead['id'], 'payment_gateway', 'pronamic_pay'); // Update lead Pronamic_WP_Pay_Extensions_GravityForms_GravityForms::update_entry($lead); } return $lead; }