Wufoo APIを iPhone アプリケーションに統合しようとしていますが、最終段階で問題が発生しています。AFNetworkingを使用して、Wufoo フォームへの接続を正常に確立し、AFHTTPClient のサブクラスを作成して、HTTP 認証などの必要な追加ヘッダーに対応しました。また、パラメーター エンコーディングを AFJSONParameterEncoding に設定しました。
上記を使用してリクエストを行うと、サーバーに正常に接続されてデータが送信されますが、空のフィールドに関するエラーが返されます。リクエストで渡されるフィールド/キーのペアを NSDictionary に追加しましたが、相手側で処理されないため、間違った形式である必要があります。申し訳ありませんが、私はそれが長い質問であることを知っていますが、助けていただければ幸いです:)。コンソールで得た応答と、関連するクラス ファイル/メソッドを追加しました。
応答:
2013-02-14 12:11:43.053 <AppName>[14750:c07] Success?: 0
Error: Errors have been <b>highlighted</b> below.
Fields: (
{
ErrorText = "This field is required. Please enter a value.";
ID = Field1;
},
{
ErrorText = "This field is required. Please enter a value.";
ID = Field3;
},
{
ErrorText = "This field is required. Please enter a value.";
ID = Field222;
},
{
ErrorText = "This field is required. Please enter a value.";
ID = Field11;
},
{
ErrorText = "This field is required. Please enter a value.";
ID = Field12;
},
{
ErrorText = "This field is required. Please enter a value.";
ID = Field220;
}
)
クラスファイル:
ViewController.m
-(NSDictionary *)getParameters {
NSDictionary *d = [NSDictionary dictionaryWithObjectsAndKeys:
emailAddress, @"Field1", //problem
firstName, @"Field3", //problem
lastName, @"Field4",
activityArranged, @"Field10",
evidenceDescription, @"Field222", // problem
startDate, @"Field11", //Problem
endDate, @"Field224",
@"1", @"Field12", //Problem
benefitExplanation, @"Field113",
activityCategory, @"Field116",
webAddress, @"Field219",
@"I Agree", @"Field220", //Problem
nil];
return d;
}
-(void)submitForm {
DiaryForm *df = [[DiaryForm alloc] init];
[df submitForm:self params:[self getParameters]];
}
DiaryForm.m
-(void)submitForm:(id)sender params:(NSDictionary *)params {
WufooAPIClient *client = [WufooAPIClient sharedClient];
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
[[AFNetworkActivityIndicatorManager sharedManager] incrementActivityCount];
NSURLRequest *req = [client requestWithMethod:@"POST" path:@"entries.json" parameters:params];
AFJSONRequestOperation *op = [AFJSONRequestOperation JSONRequestOperationWithRequest:req success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
[[AFNetworkActivityIndicatorManager sharedManager] decrementActivityCount];
NSLog(@"Success?: %@\nError: %@\nFields: %@",[JSON objectForKey:@"Success"], [JSON objectForKey:@"ErrorText"], [JSON objectForKey:@"FieldErrors"]);
}failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
[[AFNetworkActivityIndicatorManager sharedManager] decrementActivityCount];
NSLog(@"[Error]: (%@ %@) %@", [request HTTPMethod], [[request URL] relativePath], error);
}];
[op start];
}
WfooAPIClient.m
#import "WufooAPIClient.h"
#import "AFNetworking.h"
@implementation WufooAPIClient
+(WufooAPIClient *)sharedClient {
static WufooAPIClient *_sharedClient = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
NSString *kProtocol = @"https";
NSString *kSub = @"<removed>";
NSString *kHost = @"wufoo.com";
NSString *kHash = @"<removed>";
NSString *sURL = [NSString stringWithFormat:@"%@://%@.%@/api/v3/forms/%@/", kProtocol, kSub, kHost, kHash];
NSLog(sURL);
NSURL *url = [NSURL URLWithString:sURL];
_sharedClient = [[self alloc] initWithBaseURL:url];
});
return _sharedClient;
}
-(id)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if (!self) {
return nil;
}
[self registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self setDefaultHeader:@"Accept" value:@"application/json"];
[self setAuthorizationHeaderWithUsername:@"<removed>" password:@"<removed>"];
self.parameterEncoding = AFJSONParameterEncoding;
return self;
}
@終わり