UIWebView で実行される支払いシステムに取り組んでいます。ユーザーが 1 つのサイトでフォームに入力すると、支払いゲートウェイに移動してカード情報を処理します。支払いが処理されると、ユーザーは最初のサイトの確認ページに戻ります。
通常のブラウザや Mobile Safari でテストした場合、サイトは期待どおりに動作します。サイトはブラック ボックスであり、内部を変更することはできません。どうやら、サイトは相対 URL を使用しており、UIWebView が最初のドメインのベース URL を使用して 2 番目のドメインにページをロードしようとしているために、問題が発生します。
例えば、
- ユーザーはhttp://theform.com/pageからフォームを投稿します
- ユーザーはhttp://theform.com/OrderCC.aspx?orderRef=e59d7f53a693472cad8a76dd8fb64に移動します
2 番目のステップでは、ユーザーはhttp://thepaymentgateway.com/OrderCC.aspx ...に移動する必要があります。
間違ったベース URL へのリクエストを傍受し、次のように正しい URL に再ルーティングしようとしています。
-(BOOL)webView:(UIWebView *)inWeb shouldStartLoadWithRequest:(NSURLRequest*)inRequest navigationType:(UIWebViewNavigationType)inType {
NSString *wrongURL = @"http://theform.com/OrderCC.aspx";
NSString *request = [[inRequest URL] absoluteString];
NSString *data = [[NSString alloc] initWithData:[inRequest HTTPBody] encoding:NSASCIIStringEncoding];
if ([request length] >= 33 && [[request substringWithRange:NSMakeRange(0, 33)] isEqualToString:wrongURL]) {
[webView loadData:[inRequest HTTPBody] MIMEType:@"text/html" textEncodingName:@"UTF-8" baseURL:[NSURL URLWithString:[NSString stringWithFormat:@"https://thepaymentgateway.com/OrderCC.aspx%@", [request substringFromIndex:33]]]];
return NO;
}
return YES;
}
これが実行された後、私の UIWebView は POST データ文字列を含む空白のページを表示しているようです。どこが間違っていますか?