Многие люди рвут свои волосы, ища решение проблемы с недопустимой подписью при отправке запросов на Apache WooCommerce из приложения iOS.WooCommerce iOS OAuth Invalid Signature
Я собрал здесь решение.
Многие люди рвут свои волосы, ища решение проблемы с недопустимой подписью при отправке запросов на Apache WooCommerce из приложения iOS.WooCommerce iOS OAuth Invalid Signature
Я собрал здесь решение.
Я предоставляю решение проблемы с недопустимой подписью при отправке запросов в API WooCommerce из приложения iOS.
Чтобы использовать WooCommerce в приложении iOS, запросы должны аутентифицироваться с использованием OAuth 1.0. В iOS, независимо от того, написано ли приложение в Objective-C или Swift, AFNetworking облегчает жизнь при написании запросов.
Выполните эту процедуру для настройки ваших запросов:
Добавить AFNetworking в ваш проект, используя Cocoapods. Ваш podfile будет выглядеть следующим образом:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
target 'OAuthSample3' do
use_frameworks!
# Pods for OAuthSample3
pod 'AFNetworking', '1.3.4'
end
Сохранить в директории проекта и запустить pod install
в терминале.
Для следующего шага мы должны установить AFNetworking 1.3.4. Вот почему в файле podfile сказано 1.3.4.
Затем загрузите этот проект из GitHub: https://github.com/khanghoang/-WooClient
разархивировать и скопировать AFOAuth1Client.h
, AFOAuth1Client.m
, AFOAuth1OneLeggedClient.h
, AFOAuth1OneLeggedClient.m
, AFOAuth1OneLeggedClientWooParser.h
, AFOAuth1OneLeggedClientWooParser.m
к вашему проекту.
Теперь мы должны немного изменить эти файлы. Откройте AFOAuth1Client.h
и найдите метод AFHMACSHA1Signature()
.
Посмотрите на эти строки:
// one-legged
if(![secret isEqualToString:@""]) {
secretString = [secretString stringByAppendingFormat:@"&%@", AFPercentEscapedQueryStringPairMemberFromStringWithEncoding(secret, stringEncoding)];
}
И заменить их:
// one-legged
secretString = [secretString stringByAppendingFormat:@"&"];
Вот оно! Это решит проблему.
В контроллере зрения можно сделать запрос, как это:
- (void)viewDidLoad {
[super viewDidLoad];
AFOAuth1OneLeggedClient *client = [[AFOAuth1OneLeggedClient alloc] initWithBaseURL:[NSURL URLWithString:PATH] key:OAUTH_CONSUMER_KEY secret:OAUTH_CONSUMER_SECRET];
[client getPath:@"orders" parameters:@{} success:^(AFHTTPRequestOperation *operation, id responseObject) {
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
}];
}
Вы можете добавить параметры в словаре. OAUTH_CONSUMER_KEY
и OAUTH_CONSUMER_SECRET
должны быть заменены на значения, которые вы собрали на первом этапе.
Вы также можете сделать это в Swift. Просто используйте заголовок моста для импорта файлов AFNetworking.
Большое спасибо khanghoang за прорыв в AFOAuth1Client.
Добавление ответа на @Akilan Arasu для решения Swift в «Список продуктов» в WooCommerce
Выполните первые четыре шага выше решения и список продуктов от WooCommerce 5 шага в стрижа будет
let client = AFOAuth1OneLeggedClient.init(baseURL: NSURL(string:"http://example.com/wc-api/v3/"), key: "ck_xxxxxx ",secret: "cs_xxxxx")
client.getPath("products", parameters: nil, success: { (operation, responseObject ) in
let responseArray = responseObject as? NSDictionary
print(responseArray)
let product = responseArray?.valueForKey("products") as! NSArray
print("JSON: " + responseObject.description)
}, failure: { (operation, error) in
print("Error: " + error.localizedDescription)
})
Какие файлы вы импортировали в заголовочный файл моста? Я вижу некоторую ошибку –
@Sid Я добавил AFOAuth1Client.h, AFOAuth1Client.m, AFOAuth1OneLeggedClient.h, AFOAuth1OneLeggedClient.h, AFOAuth1OneLeggedClientWooParser.h, AFOAuth1OneLeggedClientWooParser.m эти файлы вручную из зашифрованного файла из https://github.com/khanghoang/-WooClient, и там будут AFOAuth1OneLeggedClientTests и другие файлы тестов в нем. Просто пренебрегайте этими .. и также добавьте #import "AFOAuth1Client.h" #import "AFOAuth1OneLeggedClient.h" #import "AFOAuth1OneLeggedClientWooParser.h "в заголовке моста –
Вы обновили i. путь поиска для связующего файла заголовка ii. Добавить afnetworking в бинарный раздел ссылки на фазе сборки iii. Поиск путей заголовка. Любой из этих? –
Я ищу вызов API для торговли в ios, я использовал ваш код, но получаю ошибку 401, {"code": "woocommerce_rest_authentication_error", "message": "Недопустимая подпись - подпись не соответствует". –