/** * Update lead status of the specified payment * * @param string $payment */ public static function status_update(Pronamic_Pay_Payment $payment, $can_redirect = false) { if (self::SLUG === $payment->get_source()) { $id = $payment->get_source_id(); $order = appthemes_get_order($id); $data = new Pronamic_WP_Pay_Extensions_AppThemes_PaymentData($order); $url = $data->get_normal_return_url(); switch ($payment->status) { case Pronamic_WP_Pay_Statuses::CANCELLED: $order->failed(); $url = $data->get_cancel_url(); break; case Pronamic_WP_Pay_Statuses::EXPIRED: $order->failed(); $url = $data->get_error_url(); break; case Pronamic_WP_Pay_Statuses::FAILURE: $order->failed(); $url = $data->get_error_url(); break; case Pronamic_WP_Pay_Statuses::SUCCESS: $order->complete(); $url = $data->get_success_url(); break; case Pronamic_WP_Pay_Statuses::OPEN: $order->pending(); break; default: $order->pending(); break; } if ($can_redirect) { wp_redirect($url); exit; } } }
/** * Start * * @see Pronamic_WP_Pay_Gateway::start() */ public function start(Pronamic_Pay_Payment $payment) { $request = new Pronamic_WP_Pay_Gateways_Mollie_PaymentRequest(); $payment_method = $payment->get_method(); $request->amount = $payment->get_amount(); $request->description = $payment->get_description(); $request->redirect_url = $payment->get_return_url(); $request->webhook_url = $this->get_webhook_url(); $request->locale = Pronamic_WP_Pay_Mollie_LocaleHelper::transform($payment->get_language()); $request->method = Pronamic_WP_Pay_Mollie_Methods::transform($payment_method); if (empty($request->method) && !empty($payment_method)) { // Leap of faith if the WordPress payment method could not transform to a Mollie method? $request->method = $payment_method; } // Customer ID $user_id = $payment->post->post_author; $customer_id = $this->get_customer_id_by_wp_user_id($user_id); if (empty($customer_id)) { $customer_id = $this->client->create_customer($payment->get_email(), $payment->get_customer_name()); if ($customer_id) { $this->update_wp_user_customer_id($user_id, $customer_id); } } $payment->set_meta('mollie_customer_id', $customer_id); // Subscriptions $subscription = $payment->get_subscription(); $subscription_methods = array(Pronamic_WP_Pay_PaymentMethods::CREDIT_CARD, Pronamic_WP_Pay_PaymentMethods::DIRECT_DEBIT_IDEAL); if ($subscription && in_array($payment_method, $subscription_methods, true)) { if (is_object($this->client->get_error())) { // Set error if customer could not be created $this->error = $this->client->get_error(); // Prevent subscription payment from being created without customer return; } $request->recurring_type = Pronamic_WP_Pay_Mollie_Recurring::RECURRING; $request->method = Pronamic_WP_Pay_Mollie_Methods::transform($payment_method); if (Pronamic_WP_Pay_PaymentMethods::DIRECT_DEBIT_IDEAL === $payment_method) { // Use direct debit for recurring payments with payment method `Direct Debit (mandate via iDEAL)`. $request->method = Pronamic_WP_Pay_Mollie_Methods::DIRECT_DEBIT; } if ($subscription->has_valid_payment() && !$customer_id) { // Get customer ID from first payment $first = $subscription->get_first_payment(); $customer_id = $first->get_meta('mollie_customer_id'); $payment->set_meta('mollie_customer_id', $customer_id); } $can_user_interact = in_array($payment->get_source(), array('gravityformsideal'), true); // Mandate payment method to check for. $mandate_method = $payment_method; if (Pronamic_WP_Pay_PaymentMethods::DIRECT_DEBIT_IDEAL === $mandate_method) { $mandate_method = Pronamic_WP_Pay_PaymentMethods::DIRECT_DEBIT; } if (!$this->client->has_valid_mandate($customer_id, $mandate_method) && (!$subscription->has_valid_payment() || $can_user_interact)) { // First payment or if user interaction is possible and no valid mandates are found $request->recurring_type = Pronamic_WP_Pay_Mollie_Recurring::FIRST; if (Pronamic_WP_Pay_PaymentMethods::DIRECT_DEBIT_IDEAL === $payment_method) { // Use iDEAL for first payments with payment method `Direct Debit (mandate via iDEAL)`. $request->method = Pronamic_WP_Pay_Mollie_Methods::IDEAL; } } if (Pronamic_WP_Pay_Mollie_Recurring::RECURRING === $request->recurring_type) { // Recurring payment $payment->set_action_url($payment->get_return_url()); if ($subscription->has_valid_payment()) { // Use subscription amount if this is not the initial payment. $payment->amount = $subscription->get_amount(); } } } if (Pronamic_WP_Pay_PaymentMethods::IDEAL === $payment_method) { // If payment method is iDEAL we set the user chosen issuer ID. $request->issuer = $payment->get_issuer(); } $request->customer_id = $customer_id; $result = $this->client->create_payment($request); if (!$result) { $this->error = $this->client->get_error(); return; } if ($subscription && Pronamic_WP_Pay_Mollie_Recurring::RECURRING === $request->recurring_type) { $subscription->set_status(Pronamic_WP_Pay_Mollie_Statuses::transform($result->status)); } $payment->set_transaction_id($result->id); if ('' === $payment->get_action_url()) { $payment->set_action_url($result->links->paymentUrl); } }
/** * Update lead status of the specified advanced payment * * @param Pronamic_Pay_Payment $payment */ public static function status_update(Pronamic_Pay_Payment $payment, $can_redirect = false) { if ($payment->get_source() == self::SLUG && self::is_shopp_supported()) { global $Shopp; $id = $payment->get_source_id(); $purchase = new Purchase($id); $gateway = new Pronamic_WP_Pay_Extensions_Shopp_Gateway(); $data = new Pronamic_WP_Pay_Extensions_Shopp_PaymentData($purchase, $gateway); if (!Pronamic_WP_Pay_Extensions_Shopp_Shopp::is_purchase_paid($purchase)) { $url = $data->get_normal_return_url(); switch ($payment->status) { case Pronamic_WP_Pay_Statuses::CANCELLED: Pronamic_WP_Pay_Extensions_Shopp_Shopp::update_purchase_status($purchase, Pronamic_WP_Pay_Extensions_Shopp_Shopp::PAYMENT_STATUS_CANCELLED); $url = $data->get_cancel_url(); break; case Pronamic_WP_Pay_Statuses::EXPIRED: Pronamic_WP_Pay_Extensions_Shopp_Shopp::update_purchase_status($purchase, Pronamic_WP_Pay_Extensions_Shopp_Shopp::PAYMENT_STATUS_EXPIRED); break; case Pronamic_WP_Pay_Statuses::FAILURE: Pronamic_WP_Pay_Extensions_Shopp_Shopp::update_purchase_status($purchase, Pronamic_WP_Pay_Extensions_Shopp_Shopp::PAYMENT_STATUS_FAILURE); $url = $data->get_error_url(); break; case Pronamic_WP_Pay_Statuses::SUCCESS: Pronamic_WP_Pay_Extensions_Shopp_Shopp::update_purchase_status($purchase, Pronamic_WP_Pay_Extensions_Shopp_Shopp::PAYMENT_STATUS_CAPTURED); $url = $data->get_success_url(); Pronamic_WP_Pay_Extensions_Shopp_Shopp::resession(); break; case Pronamic_WP_Pay_Statuses::OPEN: Pronamic_WP_Pay_Extensions_Shopp_Shopp::update_purchase_status($purchase, Pronamic_WP_Pay_Extensions_Shopp_Shopp::PAYMENT_STATUS_OPEN); break; } if ($url && $can_redirect) { wp_redirect($url, 303); exit; } } } }
/** * Update lead status of the specified payment * * @param string $payment */ public static function update_status(Pronamic_Pay_Payment $payment, $can_redirect = false) { if (self::SLUG === $payment->get_source()) { $id = $payment->get_source_id(); $order = Pronamic_WP_Pay_Extensions_ClassiPress_ClassiPress::get_order_by_id($id); $data = new Pronamic_WP_Pay_Extensions_ClassiPress_PaymentData($order); $url = $data->get_normal_return_url(); switch ($payment->status) { case Pronamic_WP_Pay_Statuses::CANCELLED: break; case Pronamic_WP_Pay_Statuses::EXPIRED: break; case Pronamic_WP_Pay_Statuses::FAILURE: break; case Pronamic_WP_Pay_Statuses::SUCCESS: if (!Pronamic_WP_Pay_Extensions_ClassiPress_Order::is_completed($order)) { Pronamic_WP_Pay_Extensions_ClassiPress_ClassiPress::process_ad_order($id); Pronamic_WP_Pay_Extensions_ClassiPress_ClassiPress::process_membership_order($order); Pronamic_WP_Pay_Extensions_ClassiPress_ClassiPress::update_payment_status_by_txn_id($id, Pronamic_WP_Pay_Extensions_ClassiPress_PaymentStatuses::COMPLETED); } $url = $data->get_success_url(); break; case Pronamic_WP_Pay_Statuses::OPEN: break; default: break; } if ($can_redirect) { wp_redirect($url, 303); exit; } } }