WooCommerce iOS OAuth无效签名

当从iOS应用程序发送请求到WooCommerce api时,许多人一直在寻找解决无效签名问题的方法。

我在这里把解决scheme放在一起。

我从iOS应用程序向WooCommerce API发送请求时提供了无效签名问题的解决scheme。

要在iOS应用程序中使用WooCommerce,请求必须使用OAuth 1.0进行身份validation。 在iOS中,无论应用程序是使用Objective-C还是Swift编写,AFNetworking在编写请求时都会使生活更轻松。

按照以下步骤设置您的请求:

  1. 获取URL,OAuth 1.0消费者密钥和消费者密钥准备就绪。
  2. 使用Cocoapods将AFNetworking添加到您的项目中。 您的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 

    将其保存在您的项目目录中并在terminal中运行pod install
    下一步,我们必须安装AFNetworking 1.3.4。 这就是为什么它在podfile中说1.3.4。

  3. 接下来,从github下载这个项目: https : //github.com/khanghoang/-WooClient
    解压缩并将AFOAuth1Client.hAFOAuth1Client.mAFOAuth1OneLeggedClient.hAFOAuth1OneLeggedClient.mAFOAuth1OneLeggedClientWooParser.hAFOAuth1OneLeggedClientWooParser.m到您的项目中。

  4. 现在我们需要修改这些文件。 打开AFOAuth1Client.h并findAFHMACSHA1Signature()方法。
    寻找这些线:

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

    并将其replace为:

      // 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_KEYOAUTH_CONSUMER_SECRET必须由您在第一步中收集的值replace。

你也可以在Swift中做到这一点。 只需使用桥接头来导入AFNetworking文件。

非常感谢khanghoang在AFOAuth1Client上的突破。

将@Akilan Arasu的解答添加到WooCommerce的“列出产品”中

按照上述解决scheme的前四个步骤,从WooCommerce的第五步列出产品将迅速

  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) })