PluginProbe ʕ •ᴥ•ʔ
Tutor LMS – eLearning and online course solution / 3.0.2
Tutor LMS – eLearning and online course solution v3.0.2
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 / PaymentGateways / GatewayBase.php
tutor / ecommerce / PaymentGateways Last commit date
Configs 1 year ago Paypal 1 year ago GatewayBase.php 1 year ago GatewayFactory.php 1 year ago PaypalGateway.php 1 year ago
GatewayBase.php
207 lines
1 <?php
2 /**
3 * GatewayBase class for implementing common functionalities
4 *
5 * @package Tutor\Ecommerce
6 * @author Themeum
7 * @link https://themeum.com
8 * @since 3.0.0
9 */
10
11 namespace Tutor\PaymentGateways;
12
13 use Ollyo\PaymentHub\PaymentHub;
14 use stdClass;
15 use Tutor\Ecommerce\CheckoutController;
16
17 /**
18 * Payment gateway base class
19 */
20 abstract class GatewayBase {
21
22 /**
23 * Payment object of PaymentHub
24 *
25 * @var object
26 */
27 public $payment = null;
28
29 /**
30 * Root directory name
31 *
32 * @since 3.0.0
33 *
34 * @var string
35 */
36 abstract public function get_root_dir_name():string;
37
38 /**
39 * Payment class from payment hub
40 *
41 * @since 3.0.0
42 *
43 * @var string
44 */
45 abstract public function get_payment_class():string;
46
47 /**
48 * Config class
49 *
50 * @var string
51 *
52 * @since 3.0.0
53 */
54 abstract public function get_config_class():string;
55
56 /**
57 * Include autoload file & init payment object
58 *
59 * @since 3.0.0
60 *
61 * @throws \Exception Throw exception if error occur.
62 *
63 * @return void
64 */
65 public function __construct() {
66 // Getting autoload file from concrete gateway class.
67 $autoload_file = $this::get_autoload_file();
68 if ( is_array( $autoload_file ) ) {
69 foreach ( $autoload_file as $file ) {
70 if ( file_exists( $file ) ) {
71 require_once $file;
72 }
73 }
74 } else {
75 if ( file_exists( $autoload_file ) ) {
76 require_once $autoload_file;
77 }
78 }
79
80 if ( ! class_exists( '\Brick\Money' ) ) {
81 $autoload_file = tutor()->path . 'ecommerce/PaymentGateways/Paypal/vendor/autoload.php';
82 include $autoload_file;
83 }
84
85 $this->payment = ( new PaymentHub( $this->get_payment_class(), $this->get_config_class() ) )->make();
86
87 if ( ! $this->payment ) {
88 throw new \Exception( 'Failed to initialize payment for gateway: ' . static::class );
89 }
90 }
91
92 /**
93 * Setup payment data & redirect to the gateway
94 *
95 * @since 3.0.0
96 *
97 * @param mixed $data Data to be sent to the gateway.
98 *
99 * @throws \Exception Throw exception if error occur.
100 * @throws \Throwable Throw a throwable if error occur inside payment hub.
101 *
102 * @return void
103 */
104 public function setup_payment_and_redirect( $data ) {
105 if ( ! $this->payment ) {
106 throw new \Exception( 'Payment object is not initialized.' );
107 }
108
109 try {
110 $this->payment->setData( $data );
111
112 $this->payment->createPayment();
113 } catch ( \Throwable $th ) {
114 throw $th;
115 }
116 }
117
118 /**
119 * Generate webhook data of the payment and return
120 *
121 * @since 3.0.0
122 *
123 * @throws \Exception Throw exception if error occur.
124 * @throws \Throwable Throw a throwable if error occur inside payment hub.
125 *
126 * @return object
127 */
128 public function get_webhook_data() {
129 if ( ! $this->payment ) {
130 throw new \Exception( 'Payment object is not initialized.' );
131 }
132
133 $obj = new stdClass();
134
135 try {
136 $webhook = $this->payment->createWebhook();
137
138 $obj->webhook_url = $webhook->url;
139 $obj->secret = $webhook->secret;
140
141 return $obj;
142 } catch ( \Throwable $th ) {
143 throw $th;
144 }
145 }
146
147 /**
148 * Generate webhook data of the payment and return
149 *
150 * @since 3.0.0
151 *
152 * @param mixed $webhook_data Webhook data.
153 * @throws \Exception Throw exception if error occur.
154 *
155 * @return mixed
156 */
157 public function verify_webhook_signature( $webhook_data ) {
158 if ( ! $this->payment ) {
159 throw new \Exception( 'Payment object is not initialized.' );
160 }
161
162 return $this->payment->verifyAndCreateOrderData( $webhook_data );
163 }
164
165 /**
166 * Make recurring payment against a order
167 *
168 * @since 3.0.0
169 *
170 * @param int $order_id Order ID.
171 *
172 * @throws \Throwable Throw throwable if error occur.
173 * @throws \InvalidArgumentException Throw throwable if error occur.
174 * @throws \RuntimeException Throw throwable if error occur.
175 *
176 * @return void
177 */
178 public function make_recurring_payment( int $order_id ) {
179 // Check if payment object is initialized.
180 if ( ! $this->payment ) {
181 throw new \InvalidArgumentException( 'Payment object is not initialized.' );
182 }
183
184 // Validate order ID and amount.
185 if ( ! $order_id ) {
186 throw new \InvalidArgumentException( 'Invalid order ID or amount.' );
187 }
188
189 try {
190 // Prepare payment data.
191 $payment_data = CheckoutController::prepare_recurring_payment_data( $order_id );
192
193 if ( ! $payment_data ) {
194 throw new \RuntimeException( 'Failed to prepare recurring payment data.' );
195 }
196
197 // Set payment data and initiate recurring payment.
198 $this->payment->setData( $payment_data );
199 $this->payment->createRecurringPayment();
200 } catch ( \Throwable $th ) {
201 // Catch and rethrow any exception.
202 throw $th;
203 }
204 }
205
206 }
207