これが私の質問に対する答えです
PaypalにはWP7用の特定のSDKがないので、私は次の方法で問題を解決しようとしました
- クエリ文字列でアイテムの価格/詳細を取得するWebサイトを作成します
- そのWebサイトにのみExpressCheckoutを実装します。ペイパルサンドボックスWebサービスを使用して実装しました
- WP7アプリにブラウザーコントロールを配置し、
BrowserControl_Navigated
そのコントロールのイベントを追加します
- 次のような独自のWebサイトのURLを作成します
string.Format("http://localhost:62744/PaymentGateway/ExpressCheckout.aspx?ItemName={0}&Number={1}&Desc={2}&ItemPrice={3}&ItemUrl={4}", ItemName, ItemNumber, ItemDescription, ItemPrice, ItemUrl).Replace(" ", "+");
- WP7アプリコードでウェブサイトに電話する
BrowserControl.Navigate(new Uri(url));
- 支払いの完了後、ペイパルサービスはアプリを成功URLにリダイレクトします。それ以外の場合は失敗URLにリダイレクトします。
- イベントでは
BrowserControl_Navigated
、ペイパルの成功と失敗のURLを確認するための条件を追加します
条件が成功した場合は、WP7の成功ページに移動します
if (BrowserControl.Source.ToString().Contains( "http://localhost:62744/PaymentGateway/Success.html"))
NavigationService.Navigate(new Uri("/Success.xaml", UriKind.Relative));
アップデート:
上記のコードは、ページをPayPalモバイルページにリダイレクトします。ルックアンドフィールのiOSログインページとしては適切ではありません。WindowsPhone7でちょっとしたトリックでPayPaliOSページを取得できます
ブラウザのヘッダー(クライアントのユーザーエージェント)を変更すると、PayPalのiPhoneページが表示されます
以下のように
string header = "User-Agent:Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_1 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8B117 Safari/6531.22.7";
string url = string.Format("http://10.11.32.211:88/PaymentGateway/ExpressCheckout.aspx?ItemName={0}&Number={1}&Desc={2}&ItemPrice={3}&ItemUrl={4}", ItemName, ItemNumber, ItemDescription, ItemPrice, ItemUrl).Replace(" ", "+");
BrowserControl.IsScriptEnabled = true;
BrowserControl.Navigate(new Uri(url),null, header);