这是我的问题的答案
Paypal 没有针对 WP7 的特定 sdk,所以我尝试通过以下方式解决上述问题
- 创建一个网站,该网站将在查询字符串中获取项目价格/详细信息
- 仅在该网站中实施 ExpressCheckout。我已经使用 paypal Sandbox Web 服务实现了
- 在 WP7 应用程序中放置一个浏览器控件并
BrowserControl_Navigated
为该控件添加一个事件
- 为我们自己的网站创建 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));
- 支付完成后,paypal 服务会将应用程序重定向到我们提到的成功 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 登录页面。在windows phone 7中我们可以通过一个小技巧来获取PayPal iOS页面
通过更改浏览器的标题(客户端的用户代理)将为我们提供 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);