PluginProbe
ووسلام – همگام سازی ووکامرس و باسلام / 1.10.21
ووسلام – همگام سازی ووکامرس و باسلام v1.10.21
1.10.21 1.10.19 1.10.20 1.10.18 1.10.17 1.10.15 1.10.14 1.10.13 1.10.12 1.10.10 1.10.9 1.10.8 1.10.7 1.10.6 1.10.5 1.10.4 1.10.3 1.10.2 1.10.1 1.10.0 1.9.2 1.9.1 1.9.0 1.8.8 1.8.5 All 54 releases
sync-basalam / includes / Config / Endpoints.php

Endpoints.php in ووسلام – همگام سازی ووکامرس و باسلام 1.10.21, at includes/Config/Endpoints.php

178 lines 6.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace SyncBasalam\Config;
4
5 defined('ABSPATH') || exit;
6
7 final class Endpoints
8 {
9 // Base hosts
10 const OPENAPI_BASE = 'https://openapi.basalam.com';
11 const ORDER_BASE = 'https://order-processing.basalam.com';
12 const CORE_BASE = 'https://core.basalam.com';
13 const UPLOAD_BASE = 'https://uploadio.basalam.com';
14 const CATEGORY_BASE = 'https://categorydetection.basalam.com';
15 const APPS_BASE = 'https://apps-api.basalam.com';
16 const HAMSALAM_BASE = 'https://api.hamsalam.ir/api/v1';
17 const BASALAM_ACCOUNTS = 'https://basalam.com/accounts/sso';
18
19 // Products
20
21 /** GET all categories */
22 const CATEGORIES = self::OPENAPI_BASE . '/v1/categories';
23
24 /** GET category attributes — sprintf($url, $categoryId) */
25 const CATEGORY_ATTRIBUTES = self::OPENAPI_BASE . '/v1/categories/%d/attributes?exclude_multi_selects=true';
26
27 /** POST create product for a vendor — sprintf($url, $vendorId) */
28 const PRODUCT_CREATE = self::OPENAPI_BASE . '/v1/vendors/%d/products';
29
30 /** PATCH update an existing product — sprintf($url, $basalamProductId) */
31 const PRODUCT_UPDATE = self::OPENAPI_BASE . '/v1/products/%d';
32
33 /** PATCH update a single variation of a product — sprintf($url, $basalamProductId, $basalamVariationId) */
34 const PRODUCT_VARIATION_UPDATE = self::CORE_BASE . '/v4/products/%d/variations/%d';
35
36 /** POST batch-update products for a vendor */
37 const PRODUCT_BATCH_UPDATE = self::OPENAPI_BASE . '/v1/vendors/%d/products/batch-updates?continue_on_error=true';
38
39 /** GET vendor information — sprintf($url, $vendorId) */
40 const VENDOR_INFO = self::OPENAPI_BASE . '/v1/vendors/%d';
41
42 /** GET category-detection prediction — append encoded title as query param */
43 const CATEGORY_DETECT = self::CATEGORY_BASE . '/category_detection/api_v2.0/predict/';
44
45 /** POST initialize a product media upload */
46 const MEDIA_UPLOAD_REQUEST = self::UPLOAD_BASE . '/v3/media/upload-request';
47
48 /** POST complete a product media upload */
49 const MEDIA_UPLOAD_COMPLETE = self::UPLOAD_BASE . '/v3/media/complete';
50
51 /** GET product media upload status — sprintf($url, $fileId) */
52 const MEDIA_UPLOAD_STATUS = self::UPLOAD_BASE . '/v3/media/status/%s';
53
54 /** GET product data list */
55 const PRODUCTS_DATA = self::CORE_BASE . '/v4/products';
56
57 /** GET commission percentage */
58 const COMMISSION = self::CORE_BASE . '/api_v2/commission/get_percent';
59
60 /** GET commission percentage for an existing product — sprintf($url, $basalamProductId) */
61 const PRODUCT_COMMISSION = self::CORE_BASE . '/api_v2/commission/products/%d/percent';
62
63 /** GET full category tree with max preparation days (core v3) */
64 const CATEGORIES_PREPARATION = self::CORE_BASE . '/v3/categories';
65
66 /** GET/POST/PATCH/DELETE webhooks */
67 const WEBHOOKS = self::OPENAPI_BASE . '/v1/webhooks';
68
69 /** GET vendor parcels (orders) */
70 const VENDOR_PARCELS = self::OPENAPI_BASE . '/v1/vendor-parcels';
71
72 // Orders
73
74 /** POST confirm order (set preparation) */
75 const ORDER_CONFIRM = self::ORDER_BASE . '/v1/vendor/set-preparation-order';
76
77 /** POST cancel order */
78 const ORDER_CANCEL = self::ORDER_BASE . '/v1/vendor/set-cancel';
79
80 /** GET/POST cancel request for a specific order — sprintf($url, $orderId) */
81 const ORDER_CANCEL_REQUEST = self::ORDER_BASE . '/v1/vendor/order/%d/cancel-request';
82
83 /** POST delay / overdue agreement request */
84 const ORDER_DELAY = self::ORDER_BASE . '/v1/vendor/orders/%d/new-agreement';
85
86 /** POST set order as shipped (with tracking code) */
87 const ORDER_TRACKING = self::ORDER_BASE . '/v2/vendor/set-posted-order';
88
89 /** GET/POST auto-confirm automation config */
90 const ORDER_AUTO_CONFIRM_CONFIG = self::ORDER_BASE . '/v1/vendor/automation-config';
91
92 /** GET/PATCH specific order — sprintf($url, $vendorId, $invoiceId) */
93 const ORDER_DETAIL = self::ORDER_BASE . '/v2/vendors/%d/orders/%d';
94
95 // Discounts
96
97 /** GET/POST vendor discounts — sprintf($url, $vendorId) */
98 const VENDOR_DISCOUNTS = self::OPENAPI_BASE . '/v1/vendors/%d/discounts';
99
100 // Hamsalam
101
102 /** GET OAuth proxy data */
103 const HAMSALAM_OAUTH_DATA = self::HAMSALAM_BASE . '/basalam-proxy/wp-oauth-data';
104
105 /** POST OAuth get-token proxy */
106 const HAMSALAM_OAUTH_TOKEN = self::HAMSALAM_BASE . '/basalam-proxy/wp-get-token';
107
108 /** GET plugin version detail */
109 const HAMSALAM_VERSION_DETAIL = self::HAMSALAM_BASE . '/wp-sites/version-detail';
110
111 /** GET announcements */
112 const HAMSALAM_ANNOUNCEMENTS = self::HAMSALAM_BASE . '/announcements';
113
114 /** GET/POST all-businesses */
115 const HAMSALAM_BUSINESSES = self::HAMSALAM_BASE . '/all-businesses';
116
117 /** GET Hamsalam auth token */
118 const HAMSALAM_AUTH_TOKEN = self::HAMSALAM_BASE . '/auth/basalam/get-token';
119
120 // Tickets (Hamsalam)
121
122 /** GET/POST ticket list */
123 const TICKET_LIST = self::HAMSALAM_BASE . '/tickets';
124
125 /** GET ticket subjects */
126 const TICKET_SUBJECTS = self::HAMSALAM_BASE . '/tickets/subjects';
127
128 /** GET single ticket — sprintf($url, $ticketId) */
129 const TICKET_DETAIL = self::HAMSALAM_BASE . '/tickets/%d';
130
131 /** POST ticket reply items — sprintf($url, $ticketId) */
132 const TICKET_ITEMS = self::HAMSALAM_BASE . '/tickets/%d/ticket-items';
133
134 /** PUT encrypted business site access — sprintf($url, $businessId) */
135 const BUSINESS_SITE_ACCESS = self::HAMSALAM_BASE . '/businesses/%d/site-access';
136
137 /** POST upload ticket media */
138 const TICKET_MEDIA_UPLOAD = self::HAMSALAM_BASE . '/media';
139
140 // App Store
141
142 /** POST app review */
143 const APP_REVIEW = self::APPS_BASE . '/v1/apps/13/reviews';
144
145 /**
146 * Replace only the Hamsalam base URL when a local/test override exists.
147 * Production keeps using the compile-time constants above.
148 */
149 public static function resolve(string $url): string
150 {
151 if (!defined('SYNC_BASALAM_HAMSALAM_BASE_URL')) {
152 return $url;
153 }
154
155 $override = rtrim(
156 (string) constant('SYNC_BASALAM_HAMSALAM_BASE_URL'),
157 '/'
158 );
159 if ($override === '' || strpos($url, self::HAMSALAM_BASE) !== 0) {
160 return $url;
161 }
162
163 return $override . substr($url, strlen(self::HAMSALAM_BASE));
164 }
165
166 // Helpers
167
168 /** Build the SSO login URL */
169 public static function oauthLoginUrl(string $clientId, string $scopes, string $redirectUri, string $siteUrl): string
170 {
171 return self::BASALAM_ACCOUNTS
172 . '?client_id=' . $clientId
173 . '&scope=' . $scopes
174 . '&redirect_uri=' . $redirectUri
175 . '&state=' . $siteUrl;
176 }
177 }
178