PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 2.6.1
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v2.6.1
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 2 years ago AsyncWebhookService.php 2 years ago BackgroundServiceProvider.php 2 years ago CustomerSyncService.php 3 years ago QueueService.php 2 years ago SyncService.php 3 years ago
AsyncWebhookService.php
112 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 * Enqueue an action to run one time, as soon as possible
36 *
37 * @var string
38 */
39 protected $prefix = 'surecart';
40
41 /**
42 * Action for ajax hooks.
43 *
44 * @var string
45 */
46 protected $action = 'async_webhook';
47
48 /**
49 * Handle a dispatched request.
50 *
51 * @param integer $id The webhook process id.
52 * @return void
53 * @throws \Exception If no id is specified.
54 */
55 public function handle( $id = 0 ) {
56 // get the webhook.
57 $id = $id ? $id : $_POST['id']; // phpcs:ignore WordPress.Security.NonceVerification.Missing
58
59 // get the event name.
60 if ( empty( $id ) ) {
61 error_log( 'No id specified for webhook' );
62 throw new \Exception( 'No id specified for webhook' );
63 }
64
65 // find the webhook.
66 $webhook = IncomingWebhook::find( $id );
67
68 // get WP error and throw exception.
69 if ( is_wp_error( $webhook ) ) {
70 error_log( 'SureCart Webhook Processing Error (' . esc_html( $id ) . ') ' . $webhook->get_error_message() );
71 throw new \Exception( $webhook->get_error_message() );
72 }
73
74 // get the event name.
75 if ( empty( $webhook->data->type ) ) {
76 error_log( 'No event specified for webhook' );
77 throw new \Exception( 'No event specified for webhook' );
78 }
79
80 $object_name = $webhook->data->data->object->object ?? '';
81
82 // get model.
83 $class = $this->models[ $object_name ] ?? null;
84
85 // We don't have a model. That's okay since we only subscribe to specific items.
86 if ( empty( $class ) ) {
87 $webhook->update( [ 'processed_at' => current_time( 'mysql' ) ] );
88 return;
89 }
90
91 // do the action.
92 do_action( $this->createEventName( $webhook->data->type ), new $class( $webhook->data->data->object ), $webhook->data ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
93
94 // update as processed.
95 $webhook->update( [ 'processed_at' => current_time( 'mysql' ) ] );
96
97 // update.
98 return $webhook;
99 }
100
101 /**
102 * Replace our dot notation webhook with underscore.
103 *
104 * @param string $type The event type.
105 * @return string
106 */
107 public function createEventName( $type = '' ) {
108 $type = str_replace( '.', '_', $type );
109 return "surecart/$type";
110 }
111 }
112