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