PluginProbe ʕ •ᴥ•ʔ
Advanced Ads – Ad Manager & AdSense / 2.0.25
Advanced Ads – Ad Manager & AdSense v2.0.25
2.0.25 2.0.24 2.0.23 2.0.22 2.0.21 1.38.0 1.39.0 1.39.1 1.39.2 1.39.3 1.39.4 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.40.0 1.40.1 1.40.2 1.41.0 1.42.0 1.42.1 1.42.2 1.43.0 1.44.0 1.44.1 1.45.0 1.45.1 1.46.0 1.47.0 1.47.1 1.47.2 1.47.3 1.47.4 1.47.5 1.48.0 1.48.1 1.49.0 1.5.0 1.5.0.1 1.5.1 1.5.2 1.5.2.1 1.5.4 1.5.4.1 1.5.5 1.50.0 1.51.0 1.51.1 1.51.2 1.51.3 1.52.0 1.52.1 1.52.2 1.52.3 1.52.4 1.53.0 1.53.1 1.53.2 1.54.0 1.54.1 1.55.0 1.56.0 1.56.1 1.56.2 1.56.3 1.56.4 1.6 1.6.1 1.6.10 1.6.10.1 1.6.10.2 1.6.11 1.6.11.1 1.6.12 1.6.13 1.6.14 1.6.15 1.6.16 1.6.17 1.6.17.1 1.6.17.2 1.6.2 1.6.2.1 1.6.3 1.6.4 1.6.4.1 1.6.5 1.6.6 1.6.6.1 1.6.7 1.6.7.1 1.6.8 1.6.8.1 1.6.8.2 1.6.8.3 1.6.9 1.6.9.1 1.6.9.2 1.6.9.3 1.6.9.4 1.7 1.7.0.1 1.7.0.2 1.7.0.3 1.7.1 1.7.1.1 1.7.1.2 1.7.1.3 1.7.1.4 1.7.1.5 1.7.10 trunk 1.7.11 1.0.1 1.7.12 1.0.2 1.7.13 1.0.3 1.7.14 1.1.0 1.7.15 1.1.1 1.7.16 1.1.2 1.7.17 1.1.3 1.7.18 1.10 1.7.19 1.10.1 1.7.2 1.10.10 1.7.2.1 1.10.11 1.7.20 1.10.12 1.7.21 1.10.2 1.7.22 1.10.3 1.7.23 1.10.4 1.7.24 1.10.5 1.7.25 1.10.6 1.7.3 1.10.7 1.7.4 1.10.8 1.7.4.1 1.10.9 1.7.4.2 1.11 1.7.4.3 1.11.1 1.7.4.4 1.11.2 1.7.4.5 1.12 1.7.5 1.13 1.7.5.1 1.13.1 1.7.6 1.13.2 1.7.7 1.13.3 1.7.8 1.13.4 1.7.9 1.13.5 1.7.9.1 1.13.6 1.7.9.2 1.13.7 1.7.9.3 1.13.8 1.8 1.14 1.8.1 1.14.1 1.8.10 1.14.10 1.8.11 1.14.11 1.8.12 1.14.2 1.8.13 1.14.3 1.8.14 1.14.4 1.8.15 1.14.5 1.8.16 1.14.6 1.8.17 1.14.7 1.8.18 1.14.8 1.8.19 1.14.9 1.8.2 1.15 1.8.20 1.16 1.8.21 1.16.1 1.8.22 1.17 1.8.23 1.17.1 1.8.24 1.17.10 1.8.25 1.17.10-rc.1 1.8.26 1.17.11 1.8.27 1.17.12 1.8.28 1.17.12-rc.1 1.8.29 1.17.2 1.8.3 1.17.3 1.8.30 1.17.4 1.8.4 1.17.5 1.8.5 1.17.6 1.8.6 1.17.7 1.8.7 1.17.8 1.8.8 1.17.9 1.8.9 1.17.9-beta.1 1.9 1.18.0 2.0.0 1.19.0 2.0.1 1.19.1 2.0.10 1.2 2.0.11 1.2.1 2.0.12 1.2.2 2.0.13 1.2.3 2.0.14 1.2.4 2.0.15 1.2.5 2.0.16 1.2.6 2.0.17 1.2.7 2.0.18 1.20.0 2.0.19 1.20.0-rc.1 2.0.2 1.20.0-rc.2 2.0.20 1.20.1 2.0.3 1.20.2 2.0.4 1.20.3 2.0.5 1.21.0 2.0.6 1.21.1 2.0.7 1.22.0 2.0.8 1.22.1 2.0.9 1.22.2 1.23.0 1.23.1 1.23.2 1.24.0 1.24.1 1.24.2 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.29.0 1.29.1 1.3 1.3.1 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1.3.16 1.3.17 1.3.18 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.30.0 1.30.1 1.30.2 1.30.2-rc.1 1.30.3 1.30.4 1.30.4-rc.1 1.30.5 1.31.0 1.31.1 1.32.0 1.32.0-rc.1 1.33.0 1.33.1 1.33.2 1.34.0 1.35.0 1.35.1 1.36.0 1.36.1 1.36.2 1.36.3 1.37.0 1.37.1 1.37.2
advanced-ads / includes / license / class-license-exchange.php
advanced-ads / includes / license Last commit date
class-license-exchange.php 2 days ago class-license-package-installer.php 2 days ago class-license-product-map.php 2 days ago class-license-shop-client.php 2 days ago class-license-site-activation.php 2 days ago class-license.php 2 days ago utils.php 2 days ago
class-license-exchange.php
151 lines
1 <?php
2 /**
3 * HTTP client for license exchange API.
4 *
5 * @package AdvancedAds
6 * @since 2.0.9
7 * @author Advanced Ads <info@wpadvancedads.com>
8 */
9
10 namespace AdvancedAds\License;
11
12 use WP_Error;
13
14 defined( 'ABSPATH' ) || exit;
15
16 /**
17 * Exchange legacy keys or one-time tokens for rich license records.
18 */
19 final class License_Exchange {
20
21 /**
22 * POST legacy map; return rich list or WP_Error.
23 *
24 * @param array<string, string> $addon_id_to_key Legacy map (addon id => license key).
25 * @return array<int, array<string, mixed>>|\WP_Error
26 */
27 public static function request( array $addon_id_to_key ) {
28 $license_key = is_array( $addon_id_to_key ) ? ( array_values( $addon_id_to_key )[0] ?? null ) : null;
29
30 if ( null === $license_key || '' === trim( (string) $license_key ) ) {
31 return new WP_Error(
32 'advanced_ads_license_exchange_empty',
33 __( 'No license keys to exchange.', 'advanced-ads' )
34 );
35 }
36
37 License_Shop_Client::add_local_development_http_filter();
38
39 $response = wp_remote_post(
40 self::exchange_endpoint(),
41 License_Shop_Client::http_request_args(
42 [
43 'body' => wp_json_encode(
44 [
45 'site' => home_url(),
46 'license' => $license_key,
47 ]
48 ),
49 ]
50 )
51 );
52
53 License_Shop_Client::remove_local_development_http_filter();
54
55 return self::parse_exchange_response( $response );
56 }
57
58 /**
59 * Exchange a one-time shop token for rich license rows.
60 *
61 * @param string $token One-time token from shop redirect.
62 * @return array<int, array<string, mixed>>|\WP_Error
63 */
64 public static function request_by_token( string $token ) {
65 $token = sanitize_text_field( $token );
66 if ( '' === $token ) {
67 return new WP_Error(
68 'advanced_ads_license_exchange_token',
69 __( 'Missing exchange token.', 'advanced-ads' )
70 );
71 }
72
73 License_Shop_Client::add_local_development_http_filter();
74
75 $response = wp_remote_post(
76 self::exchange_endpoint(),
77 License_Shop_Client::http_request_args(
78 [
79 'body' => wp_json_encode(
80 [
81 'token' => $token,
82 'site' => site_url(),
83 ]
84 ),
85 ]
86 )
87 );
88
89 License_Shop_Client::remove_local_development_http_filter();
90
91 return self::parse_exchange_response( $response );
92 }
93
94 /**
95 * Activate a license on the shop for this site.
96 *
97 * @param string $license_key License key.
98 * @param int $license_id EDD SL license post ID.
99 * @return array<int, array<string, mixed>>|\WP_Error
100 */
101 public static function request_activate( string $license_key, int $license_id = 0 ) {
102 return License::request_shop_activate( $license_key, $license_id );
103 }
104
105 /**
106 * Shop REST exchange endpoint URL.
107 *
108 * @return string
109 */
110 private static function exchange_endpoint(): string {
111 $base_url = defined( 'AA_SHOP_URL' ) ? AA_SHOP_URL : 'https://wpadvancedads.com';
112
113 return untrailingslashit( esc_url_raw( $base_url ) ) . '/wp-json/advanced-ads/v2/license/exchange';
114 }
115
116 /**
117 * Decode exchange HTTP response into license rows or WP_Error.
118 *
119 * @param array|\WP_Error $response wp_remote_post result.
120 * @return array<int, array<string, mixed>>|\WP_Error
121 */
122 private static function parse_exchange_response( $response ) {
123 if ( is_wp_error( $response ) ) {
124 return $response;
125 }
126
127 $code = wp_remote_retrieve_response_code( $response );
128 if ( 200 !== $code ) {
129 $body = json_decode( wp_remote_retrieve_body( $response ), true );
130 $message = is_array( $body ) ? (string) ( $body['message'] ?? '' ) : '';
131 $api_code = is_array( $body ) ? (string) ( $body['code'] ?? '' ) : '';
132
133 return new WP_Error(
134 '' !== $api_code ? $api_code : 'advanced_ads_license_exchange_http',
135 '' !== $message ? $message : __( 'License exchange request failed.', 'advanced-ads' ),
136 [ 'status' => $code ]
137 );
138 }
139
140 $data = json_decode( wp_remote_retrieve_body( $response ), true );
141 if ( ! is_array( $data ) ) {
142 return new WP_Error(
143 'advanced_ads_license_exchange_parse',
144 __( 'Invalid license exchange response.', 'advanced-ads' )
145 );
146 }
147
148 return $data;
149 }
150 }
151