Как извлечь ключи JSON из обратного URL в WooCommerce для аутентификации

#php #swift #woocommerce #alamofire

#php #swift #woocommerce #alamofire

Вопрос:

Я работаю над приложением iOS, написанным на Swift, которое разрешает администраторам магазина через конечную точку аутентификации приложения WooCommerce

Эта конечная точка имеет пять параметров app_name, scope, user_id, return_url и callback_url. Я использую этот формат URL : http://example.comamp;/wc-auth/v1/authorize/?app_name=MyAppNameamp;scope=read_writeamp;user_id=123amp;return_url=http://app.comamp;callback_url=https://app.com . Я отправляю пользователя на их веб-сайт для авторизации

Приведенное выше перенаправляет пользователя с помощью return_url, этот URL-адрес возврата является «в случае моего приложения» универсальной ссылкой iOS, которая отправляет пользователя обратно в приложение с параметрами success и user_id в качестве строк запроса. При успешном завершении отправляется 0, если пользователь отказал, или 1, если аутентификация прошла успешно. Пользователь проходит проверку подлинности, и ключи создаются в WooCommerce.

Согласно документации Woo REST API: конечная точка аутентификации отправит ключи API в формате JSON в callback_url, поэтому важно помнить, что некоторые языки, такие как PHP, не будут отображать его внутри глобальной переменной $ _POST, в PHP вы можете получить к нему доступ с помощью $HTTP_RAW_POST_DATA (для старых версий PHP) или file_get_contents(‘php://input’); . В сгенерированном URL-адресе должны быть закодированы все строковые значения запроса.

Это пример возвращаемого JSON:

 {
    "key_id": 1,
    "user_id": 123,
    "consumer_key": "ck_xxxxxxxxxxxxxxxx",
    "consumer_secret": "cs_xxxxxxxxxxxxxxxx",
    "key_permissions": "read_write"
}
  

Какой URL-адрес считывается первым?
Как именно callback_url взаимодействует с URL-адресом возврата? Должен ли я получать JSON из URL-адреса возврата или URL-адреса обратного вызова? Извлекаются ли эти значения из самого URL-адреса или из post-запроса, для которого я мог бы использовать AlamoFire?

Ответ №1:

При использовании универсальных ссылок приложение будет открыто с параметрами в URL. Таким образом, данные POST недоступны. На мой взгляд, вы можете создать вспомогательную веб-страницу (или использовать существующую), которая считывает и анализирует входные данные и создает подходящую универсальную ссылку с нужной вам информацией ( consumer_key , consumer_secret , и т.д.) в виде строки запроса.

Например:

 yourapp://auth_result?consumer_key=ck_xxxxxxxxamp;consumer_secret=cs_xxxxxxx
  

Вы можете легко получить доступ к этим элементам строки запроса в своем приложении.

Комментарии:

1. Спасибо. Я, наконец, понял, как извлечь URL-адрес в scene: UIScene, продолжить UserActivity: NSUserActivity Теперь проблема в том, что возвращаемый URL-адрес из WooCommerce не содержит никаких данных для извлечения и добавления в URL. Я использую универсальную ссылку, а не схему URL, но это та же концепция.

2. Использовали ли вы вспомогательную веб-страницу для чтения опубликованных данных и их анализа? (перед перенаправлением в приложение), поскольку URL, который вы получаете непосредственно в приложении, не содержит никаких данных POST из исходного URL.

3. Я пошел другим путем. Я заставляю пользователя сканировать QR-код, сгенерированный WooCommerce, поэтому добавляю ключи в приложение. Это позволяет избежать необходимости открывать Safari для входа в систему. Кто-то может увидеть URL-адрес, если он знает, как это сделать.