PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 3.9.3
Tutor LMS – eLearning and online course solution v3.9.3
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 10 months ago PaymentGateways 8 months ago AdminMenu.php 9 months ago BillingController.php 1 year ago CartController.php 1 year ago CheckoutController.php 7 months ago CouponController.php 11 months ago Ecommerce.php 1 year ago EmailController.php 11 months ago HooksHandler.php 7 months ago OptionKeys.php 1 year ago OrderActivitiesController.php 1 year ago OrderController.php 7 months ago PaymentHandler.php 9 months ago Settings.php 9 months ago Tax.php 9 months ago currency.php 1 year ago
PaymentHandler.php
158 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
42 register_rest_route(
43 'tutor/v1',
44 '/ecommerce-webhook(/(?<payment_method>[a-z0-9_-]+))?',
45 array(
46 'methods' => WP_REST_Server::ALLMETHODS,
47 'callback' => array( $this, 'handle_ecommerce_webhook' ),
48 'permission_callback' => '__return_true', // Allows public access to the route.
49 )
50 );
51 }
52
53 /**
54 * Webhook request handler
55 *
56 * @since 3.0.0
57 *
58 * @param WP_REST_Request $request The request object.
59 *
60 * @return void
61 */
62 public function handle_ecommerce_webhook( WP_REST_Request $request ) {
63
64 // phpcs:disable
65 $webhook_data = (object) array(
66 'get' => $_GET,
67 'post' => $_POST,
68 'server' => $_SERVER,
69 'stream' => file_get_contents( 'php://input' ),
70 );
71 // phpcs:enable
72
73 $payment_method = $request->get_param( 'payment_method' ) ?? '';
74
75 if ( empty( $payment_method ) ) {
76 error_log( 'No Payment Method found from webhook url,' ); //phpcs:ignore
77 exit();
78 }
79
80 $payment_gateways = apply_filters( 'tutor_gateways_with_class', Ecommerce::payment_gateways_with_ref(), $payment_method );
81
82 $payment_gateway_class = isset( $payment_gateways[ $payment_method ] ) ? $payment_gateways[ $payment_method ]['gateway_class'] : null;
83
84 if ( $payment_gateway_class ) {
85 $payment = Ecommerce::get_payment_gateway_object( $payment_gateway_class );
86 $res = $payment->verify_webhook_signature( $webhook_data );
87 if ( is_object( $res ) && property_exists( $res, 'id' ) ) {
88 do_action( 'tutor_order_payment_updated', $res );
89 if ( property_exists( $res, 'redirectUrl' ) ) {
90 wp_safe_redirect( $res->redirectUrl );
91 exit();
92 }
93 }
94 }
95 }
96
97 /**
98 * Load order status template
99 *
100 * It will load success or failed template based on order status
101 *
102 * @since 3.0.0
103 *
104 * @param string $template Default template.
105 *
106 * @return string
107 */
108 public function load_order_status_template( $template ) {
109 $user_id = get_current_user_id();
110 $placement_status = Input::get( 'tutor_order_placement' );
111 $order_id = Input::get( 'order_id', 0, Input::TYPE_INT );
112
113 if ( $placement_status && $order_id ) {
114 delete_transient( CheckoutController::PAY_NOW_ALERT_MSG_TRANSIENT_KEY . $user_id );
115 delete_transient( CheckoutController::PAY_NOW_ERROR_TRANSIENT_KEY . $user_id );
116
117 // Modify the page title.
118 add_filter(
119 'document_title_parts',
120 function ( $title ) use ( $placement_status ) {
121 $site_title = get_bloginfo( 'name' );
122
123 if ( 'success' === $placement_status ) {
124 $title['title'] = __( 'Order Placement Success', 'tutor' ) . ' - ' . $site_title;
125 } else {
126 $title['title'] = __( 'Order Placement Failed', 'tutor' ) . ' - ' . $site_title;
127 }
128
129 return $title;
130 }
131 );
132
133 if ( 'success' === $placement_status ) {
134 do_action( 'tutor_order_placement_success', $order_id );
135 tutor_load_template(
136 'ecommerce.order-placement-success',
137 array(
138 'order_status' => $placement_status,
139 'order_id' => $order_id,
140 )
141 );
142 } else {
143 do_action( 'tutor_order_placement_failed', $order_id );
144 tutor_load_template(
145 'ecommerce.order-placement-failed',
146 array(
147 'order_status' => $placement_status,
148 'order_id' => $order_id,
149 )
150 );
151 }
152 exit();
153 }
154
155 return $template;
156 }
157 }
158