PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 3.0.2
Tutor LMS – eLearning and online course solution v3.0.2
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
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
146 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
16 /**
17 * Payment handler class.
18 */
19 class PaymentHandler {
20
21 /**
22 * Register hooks
23 *
24 * @since 3.0.0
25 */
26 public function __construct() {
27 add_action( 'rest_api_init', array( $this, 'register_webhook_route' ) );
28 add_filter( 'template_include', array( $this, 'load_order_status_template' ) );
29 }
30
31 /**
32 * Register route for handle webhook event.
33 *
34 * @since 3.0.0
35 *
36 * @return void
37 */
38 public function register_webhook_route() {
39 register_rest_route(
40 'tutor/v1',
41 '/ecommerce-webhook',
42 array(
43 'methods' => WP_REST_Server::ALLMETHODS,
44 'callback' => array( $this, 'handle_ecommerce_webhook' ),
45 'permission_callback' => '__return_true', // Allows public access to the route.
46 )
47 );
48 }
49
50 /**
51 * Webhook request handler
52 *
53 * @since 3.0.0
54 *
55 * @return void
56 */
57 public function handle_ecommerce_webhook() {
58 $webhook_data = (object) array(
59 'get' => $_GET,
60 'post' => $_POST,
61 'server' => $_SERVER,
62 'stream' => file_get_contents( 'php://input' ),
63 );
64
65 $payment_method = Input::get( 'payment_method', 'paypal' );
66 $payment_gateways = apply_filters( 'tutor_gateways_with_class', Ecommerce::payment_gateways_with_ref(), $payment_method );
67
68 $payment_gateway_class = isset( $payment_gateways[ $payment_method ] )
69 ? $payment_gateways[ $payment_method ]['gateway_class']
70 : null;
71
72 if ( $payment_gateway_class ) {
73 $payment = Ecommerce::get_payment_gateway_object( $payment_gateway_class );
74 $res = $payment->verify_webhook_signature( $webhook_data );
75 if ( is_object( $res ) && property_exists( $res, 'id' ) ) {
76 do_action( 'tutor_order_payment_updated', $res );
77 if ( property_exists( $res, 'redirectUrl' ) ) {
78 wp_safe_redirect( $res->redirectUrl );
79 exit();
80 }
81 }
82 }
83 }
84
85 /**
86 * Load order status template
87 *
88 * It will load success or failed template based on order status
89 *
90 * @since 3.0.0
91 *
92 * @param string $template Default template.
93 *
94 * @return string
95 */
96 public function load_order_status_template( $template ) {
97 $user_id = get_current_user_id();
98 $placement_status = Input::get( 'tutor_order_placement' );
99 $order_id = Input::get( 'order_id', 0, Input::TYPE_INT );
100
101 if ( $placement_status && $order_id ) {
102 delete_transient( CheckoutController::PAY_NOW_ALERT_MSG_TRANSIENT_KEY . $user_id );
103 delete_transient( CheckoutController::PAY_NOW_ERROR_TRANSIENT_KEY . $user_id );
104
105 // Modify the page title.
106 add_filter(
107 'document_title_parts',
108 function( $title ) use ( $placement_status ) {
109 $site_title = get_bloginfo( 'name' );
110
111 if ( 'success' === $placement_status ) {
112 $title['title'] = __( 'Order Placement Success', 'tutor' ) . ' - ' . $site_title;
113 } else {
114 $title['title'] = __( 'Order Placement Failed', 'tutor' ) . ' - ' . $site_title;
115 }
116
117 return $title;
118 }
119 );
120
121 if ( 'success' === $placement_status ) {
122 do_action( 'tutor_order_placement_success', $order_id );
123 tutor_load_template(
124 'ecommerce.order-placement-success',
125 array(
126 'order_status' => $placement_status,
127 'order_id' => $order_id,
128 )
129 );
130 } else {
131 do_action( 'tutor_order_placement_failed', $order_id );
132 tutor_load_template(
133 'ecommerce.order-placement-failed',
134 array(
135 'order_status' => $placement_status,
136 'order_id' => $order_id,
137 )
138 );
139 }
140 exit();
141 }
142
143 return $template;
144 }
145 }
146