2016-06-11 7 views
1

Многие люди рвут свои волосы, ища решение проблемы с недопустимой подписью при отправке запросов на Apache WooCommerce из приложения iOS.WooCommerce iOS OAuth Invalid Signature

Я собрал здесь решение.

ответ

2

Я предоставляю решение проблемы с недопустимой подписью при отправке запросов в API WooCommerce из приложения iOS.

Чтобы использовать WooCommerce в приложении iOS, запросы должны аутентифицироваться с использованием OAuth 1.0. В iOS, независимо от того, написано ли приложение в Objective-C или Swift, AFNetworking облегчает жизнь при написании запросов.

Выполните эту процедуру для настройки ваших запросов:

  1. Получить URL, OAuth 1.0 Потребительский ключ и секрет потребителя готовы.
  2. Добавить 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.

  3. Затем загрузите этот проект из GitHub: https://github.com/khanghoang/-WooClient
    разархивировать и скопировать AFOAuth1Client.h, AFOAuth1Client.m, AFOAuth1OneLeggedClient.h, AFOAuth1OneLeggedClient.m, AFOAuth1OneLeggedClientWooParser.h, AFOAuth1OneLeggedClientWooParser.m к вашему проекту.

  4. Теперь мы должны немного изменить эти файлы. Откройте AFOAuth1Client.h и найдите метод AFHMACSHA1Signature().
    Посмотрите на эти строки:

    // one-legged 
        if(![secret isEqualToString:@""]) { 
         secretString = [secretString stringByAppendingFormat:@"&%@", AFPercentEscapedQueryStringPairMemberFromStringWithEncoding(secret, stringEncoding)]; 
        } 
    

    И заменить их:

    // one-legged 
        secretString = [secretString stringByAppendingFormat:@"&"]; 
    
  5. Вот оно! Это решит проблему.

В контроллере зрения можно сделать запрос, как это:

- (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.

+0

Я ищу вызов API для торговли в ios, я использовал ваш код, но получаю ошибку 401, {"code": "woocommerce_rest_authentication_error", "message": "Недопустимая подпись - подпись не соответствует". –

0

Добавление ответа на @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) 


    }) 
+0

Какие файлы вы импортировали в заголовочный файл моста? Я вижу некоторую ошибку –

+0

@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 "в заголовке моста –

+0

Вы обновили i. путь поиска для связующего файла заголовка ii. Добавить afnetworking в бинарный раздел ссылки на фазе сборки iii. Поиск путей заголовка. Любой из этих? –

Смежные вопросы