from_paypal_response( (object) $data ); } /** * Returns a Webhook based of a PayPal JSON response. * * @param object $data The JSON object. * * @return WebhookEvent * @throws RuntimeException When JSON object is malformed. */ public function from_paypal_response( $data ): WebhookEvent { if ( ! isset( $data->id ) ) { throw new RuntimeException( 'ID for webhook event not found.' ); } if ( ! isset( $data->event_type ) ) { throw new RuntimeException( 'Event type for webhook event not found.' ); } $create_time = ( isset( $data->create_time ) ) ? DateTime::createFromFormat( 'Y-m-d\TH:i:sO', $data->create_time ) : null; // Sometimes the time may be in weird format 2018-12-19T22:20:32.000Z (at least in simulation), // we do not care much about time, so just ignore on failure. if ( false === $create_time ) { $create_time = null; } return new WebhookEvent( (string) $data->id, $create_time, (string) $data->resource_type ?? '', (string) $data->event_version ?? '', (string) $data->event_type, (string) $data->summary ?? '', (string) $data->resource_version ?? '', (object) $data->resource ?? ( new stdClass() ) ); } }