PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 3.7.1
Tutor LMS – eLearning and online course solution v3.7.1
3.9.15 3.9.14 3.9.13 3.9.12 3.9.11 trunk 1.0.0 1.0.0-alpha 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.2.0 1.2.1 1.2.11 1.2.12 1.2.13 1.2.20 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.7.3 1.7.4 1.7.5 1.7.6 1.7.7 1.7.8 1.7.9 1.8.0 1.8.1 1.8.10 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.8.7 1.8.8 1.8.9 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.15 1.9.16 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.1.1 2.1.10 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.3.0 2.4.0 2.5.0 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 3.0.0 3.0.1 3.0.2 3.1.0 3.2.0 3.2.1 3.2.2 3.2.3 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.7.0 3.7.1 3.7.2 3.7.3 3.7.4 3.8.0 3.8.1 3.8.2 3.8.3 3.9.0 3.9.1 3.9.10 3.9.2 3.9.3 3.9.4 3.9.5 3.9.6 3.9.7 3.9.8 3.9.9
tutor / ecommerce / PaymentHandler.php
tutor / ecommerce Last commit date
Cart 1 year ago PaymentGateways 11 months ago AdminMenu.php 1 year ago BillingController.php 1 year ago CartController.php 1 year ago CheckoutController.php 11 months ago CouponController.php 11 months ago Ecommerce.php 1 year ago EmailController.php 11 months ago HooksHandler.php 11 months ago OptionKeys.php 1 year ago OrderActivitiesController.php 1 year ago OrderController.php 11 months ago PaymentHandler.php 11 months ago Settings.php 1 year ago Tax.php 11 months ago currency.php 1 year ago
PaymentHandler.php
166 lines
1 <?php
2 /**
3 * Handle payment success/cancelled redirection & webhook events
4 *
5 * @package Tutor\Ecommerce
6 * @author Themeum <support@themeum.com>
7 * @link https://themeum.com
8 * @since 3.0.0
9 */
10
11 namespace Tutor\Ecommerce;
12
13 use TUTOR\Input;
14 use WP_REST_Server;
15 use WP_REST_Request;
16
17 /**
18 * Payment handler class.
19 */
20 class PaymentHandler {
21
22 const AUTHORIZENET = 'authorizenet';
23 /**
24 * Register hooks
25 *
26 * @since 3.0.0
27 */
28 public function __construct() {
29 add_action( 'rest_api_init', array( $this, 'register_webhook_route' ) );
30 add_filter( 'template_include', array( $this, 'load_order_status_template' ) );
31 }
32
33 /**
34 * Register route for handle webhook event.
35 *
36 * @since 3.0.0
37 *
38 * @return void
39 */
40 public function register_webhook_route() {
41 register_rest_route(
42 'tutor/v1',
43 '/ecommerce-webhook',
44 array(
45 'methods' => WP_REST_Server::ALLMETHODS,
46 'callback' => array( $this, 'handle_ecommerce_webhook' ),
47 'permission_callback' => '__return_true', // Allows public access to the route.
48 )
49 );
50
51 // Register route for authorizenet.
52 register_rest_route(
53 'tutor/v1',
54 '/ecommerce-webhook/authorizenet',
55 array(
56 'methods' => WP_REST_Server::ALLMETHODS,
57 'callback' => array( $this, 'handle_ecommerce_webhook' ),
58 'permission_callback' => '__return_true', // Allows public access to the route.
59 )
60 );
61 }
62
63 /**
64 * Webhook request handler
65 *
66 * @since 3.0.0
67 *
68 * @param WP_REST_Request $request The request object.
69 *
70 * @return void
71 */
72 public function handle_ecommerce_webhook( WP_REST_Request $request ) {
73
74 // phpcs:disable
75 $webhook_data = (object) array(
76 'get' => $_GET,
77 'post' => $_POST,
78 'server' => $_SERVER,
79 'stream' => file_get_contents( 'php://input' ),
80 );
81 // phpcs:enable
82
83 $route = $request->get_route() ?? null;
84 $payment_method = ! is_null( $route ) && strpos( $route, self::AUTHORIZENET ) ? self::AUTHORIZENET : Input::get( 'payment_method', 'paypal' );
85
86 $payment_gateways = apply_filters( 'tutor_gateways_with_class', Ecommerce::payment_gateways_with_ref(), $payment_method );
87
88 $payment_gateway_class = isset( $payment_gateways[ $payment_method ] )
89 ? $payment_gateways[ $payment_method ]['gateway_class']
90 : null;
91
92 if ( $payment_gateway_class ) {
93 $payment = Ecommerce::get_payment_gateway_object( $payment_gateway_class );
94 $res = $payment->verify_webhook_signature( $webhook_data );
95 if ( is_object( $res ) && property_exists( $res, 'id' ) ) {
96 do_action( 'tutor_order_payment_updated', $res );
97 if ( property_exists( $res, 'redirectUrl' ) ) {
98 wp_safe_redirect( $res->redirectUrl );
99 exit();
100 }
101 }
102 }
103 }
104
105 /**
106 * Load order status template
107 *
108 * It will load success or failed template based on order status
109 *
110 * @since 3.0.0
111 *
112 * @param string $template Default template.
113 *
114 * @return string
115 */
116 public function load_order_status_template( $template ) {
117 $user_id = get_current_user_id();
118 $placement_status = Input::get( 'tutor_order_placement' );
119 $order_id = Input::get( 'order_id', 0, Input::TYPE_INT );
120
121 if ( $placement_status && $order_id ) {
122 delete_transient( CheckoutController::PAY_NOW_ALERT_MSG_TRANSIENT_KEY . $user_id );
123 delete_transient( CheckoutController::PAY_NOW_ERROR_TRANSIENT_KEY . $user_id );
124
125 // Modify the page title.
126 add_filter(
127 'document_title_parts',
128 function ( $title ) use ( $placement_status ) {
129 $site_title = get_bloginfo( 'name' );
130
131 if ( 'success' === $placement_status ) {
132 $title['title'] = __( 'Order Placement Success', 'tutor' ) . ' - ' . $site_title;
133 } else {
134 $title['title'] = __( 'Order Placement Failed', 'tutor' ) . ' - ' . $site_title;
135 }
136
137 return $title;
138 }
139 );
140
141 if ( 'success' === $placement_status ) {
142 do_action( 'tutor_order_placement_success', $order_id );
143 tutor_load_template(
144 'ecommerce.order-placement-success',
145 array(
146 'order_status' => $placement_status,
147 'order_id' => $order_id,
148 )
149 );
150 } else {
151 do_action( 'tutor_order_placement_failed', $order_id );
152 tutor_load_template(
153 'ecommerce.order-placement-failed',
154 array(
155 'order_status' => $placement_status,
156 'order_id' => $order_id,
157 )
158 );
159 }
160 exit();
161 }
162
163 return $template;
164 }
165 }
166