PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 3.0.3
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v3.0.3
4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 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.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 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.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Background / AsyncWebhookService.php
surecart / app / src / Background Last commit date
AsyncRequest.php 1 year ago AsyncWebhookService.php 1 year ago BackgroundProcess.php 1 year ago BackgroundServiceProvider.php 1 year ago BulkActionService.php 1 year ago QueueService.php 1 year ago
AsyncWebhookService.php
121 lines
1 <?php
2
3 namespace SureCart\Background;
4
5 use SureCart\Models\IncomingWebhook;
6
7 /**
8 * SureCart Queue
9 *
10 * A job queue using WordPress actions.
11 */
12 class AsyncWebhookService extends AsyncRequest {
13 /**
14 * Map object names to their models.
15 *
16 * @var array
17 */
18 protected $models = [
19 'charge' => \SureCart\Models\Charge::class,
20 'coupon' => \SureCart\Models\Coupon::class,
21 'customer' => \SureCart\Models\Customer::class,
22 'purchase' => \SureCart\Models\Purchase::class,
23 'price' => \SureCart\Models\Price::class,
24 'product' => \SureCart\Models\Product::class,
25 'period' => \SureCart\Models\Period::class,
26 'order' => \SureCart\Models\Order::class,
27 'refund' => \SureCart\Models\Refund::class,
28 'subscription' => \SureCart\Models\Subscription::class,
29 'invoice' => \SureCart\Models\Invoice::class,
30 'account' => \SureCart\Models\Account::class,
31 'webhook_endpoint' => \SureCart\Models\Webhook::class,
32 ];
33
34 /**
35 * Bootstrap the service.
36 *
37 * @return void
38 */
39 public function bootstrap() {
40 // nothing to bootstrap.
41 }
42
43 /**
44 * Enqueue an action to run one time, as soon as possible
45 *
46 * @var string
47 */
48 protected $prefix = 'surecart';
49
50 /**
51 * Action for ajax hooks.
52 *
53 * @var string
54 */
55 protected $action = 'async_webhook';
56
57 /**
58 * Handle a dispatched request.
59 *
60 * @param integer $id The webhook process id.
61 * @return void
62 * @throws \Exception If no id is specified.
63 */
64 public function handle( $id = 0 ) {
65 // get the webhook.
66 $id = (int) ( $id ? $id : $_POST['id'] ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
67
68 // get the event name.
69 if ( empty( $id ) ) {
70 error_log( 'No id specified for webhook' );
71 throw new \Exception( 'No id specified for webhook' );
72 }
73
74 // find the webhook.
75 $webhook = IncomingWebhook::find( $id );
76
77 // get WP error and throw exception.
78 if ( is_wp_error( $webhook ) ) {
79 error_log( 'SureCart Webhook Processing Error (' . esc_html( $id ) . ') ' . $webhook->get_error_message() );
80 throw new \Exception( $webhook->get_error_message() );
81 }
82
83 // get the event name.
84 if ( empty( $webhook->data->type ) ) {
85 error_log( 'No event specified for webhook' );
86 throw new \Exception( 'No event specified for webhook' );
87 }
88
89 $object_name = $webhook->data->data->object->object ?? '';
90
91 // get model.
92 $class = $this->models[ $object_name ] ?? null;
93
94 // We don't have a model. That's okay since we only subscribe to specific items.
95 if ( empty( $class ) ) {
96 $webhook->update( [ 'processed_at' => current_time( 'mysql' ) ] );
97 return;
98 }
99
100 // do the action.
101 do_action( $this->createEventName( $webhook->data->type ), new $class( $webhook->data->data->object ), $webhook->data ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
102
103 // update as processed.
104 $webhook->update( [ 'processed_at' => current_time( 'mysql' ) ] );
105
106 // update.
107 return $webhook;
108 }
109
110 /**
111 * Replace our dot notation webhook with underscore.
112 *
113 * @param string $type The event type.
114 * @return string
115 */
116 public function createEventName( $type = '' ) {
117 $type = str_replace( '.', '_', $type );
118 return "surecart/$type";
119 }
120 }
121