PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 3.6.1
Tutor LMS – eLearning and online course solution v3.6.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 1 year ago AdminMenu.php 1 year ago BillingController.php 1 year ago CartController.php 1 year ago CheckoutController.php 1 year ago CouponController.php 1 year ago Ecommerce.php 1 year ago EmailController.php 1 year ago HooksHandler.php 1 year ago OptionKeys.php 1 year ago OrderActivitiesController.php 1 year ago OrderController.php 1 year ago PaymentHandler.php 1 year ago Settings.php 1 year ago Tax.php 1 year ago currency.php 1 year ago
PaymentHandler.php
163 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 $webhook_data = (object) array(
74 'get' => $_GET,
75 'post' => $_POST,
76 'server' => $_SERVER,
77 'stream' => file_get_contents( 'php://input' ),
78 );
79
80 $route = $request->get_route() ?? null;
81 $payment_method = ! is_null( $route ) && strpos( $route, self::AUTHORIZENET ) ? self::AUTHORIZENET : Input::get( 'payment_method', 'paypal' );
82
83 $payment_gateways = apply_filters( 'tutor_gateways_with_class', Ecommerce::payment_gateways_with_ref(), $payment_method );
84
85 $payment_gateway_class = isset( $payment_gateways[ $payment_method ] )
86 ? $payment_gateways[ $payment_method ]['gateway_class']
87 : null;
88
89 if ( $payment_gateway_class ) {
90 $payment = Ecommerce::get_payment_gateway_object( $payment_gateway_class );
91 $res = $payment->verify_webhook_signature( $webhook_data );
92 if ( is_object( $res ) && property_exists( $res, 'id' ) ) {
93 do_action( 'tutor_order_payment_updated', $res );
94 if ( property_exists( $res, 'redirectUrl' ) ) {
95 wp_safe_redirect( $res->redirectUrl );
96 exit();
97 }
98 }
99 }
100 }
101
102 /**
103 * Load order status template
104 *
105 * It will load success or failed template based on order status
106 *
107 * @since 3.0.0
108 *
109 * @param string $template Default template.
110 *
111 * @return string
112 */
113 public function load_order_status_template( $template ) {
114 $user_id = get_current_user_id();
115 $placement_status = Input::get( 'tutor_order_placement' );
116 $order_id = Input::get( 'order_id', 0, Input::TYPE_INT );
117
118 if ( $placement_status && $order_id ) {
119 delete_transient( CheckoutController::PAY_NOW_ALERT_MSG_TRANSIENT_KEY . $user_id );
120 delete_transient( CheckoutController::PAY_NOW_ERROR_TRANSIENT_KEY . $user_id );
121
122 // Modify the page title.
123 add_filter(
124 'document_title_parts',
125 function ( $title ) use ( $placement_status ) {
126 $site_title = get_bloginfo( 'name' );
127
128 if ( 'success' === $placement_status ) {
129 $title['title'] = __( 'Order Placement Success', 'tutor' ) . ' - ' . $site_title;
130 } else {
131 $title['title'] = __( 'Order Placement Failed', 'tutor' ) . ' - ' . $site_title;
132 }
133
134 return $title;
135 }
136 );
137
138 if ( 'success' === $placement_status ) {
139 do_action( 'tutor_order_placement_success', $order_id );
140 tutor_load_template(
141 'ecommerce.order-placement-success',
142 array(
143 'order_status' => $placement_status,
144 'order_id' => $order_id,
145 )
146 );
147 } else {
148 do_action( 'tutor_order_placement_failed', $order_id );
149 tutor_load_template(
150 'ecommerce.order-placement-failed',
151 array(
152 'order_status' => $placement_status,
153 'order_id' => $order_id,
154 )
155 );
156 }
157 exit();
158 }
159
160 return $template;
161 }
162 }
163