使用PayPal REST API完成支付后如何返回iOS应用?
解决PayPal REST API集成后从WebView返回iOS应用的方案
1. 配置iOS应用的URL Scheme
- 打开Xcode项目设置,进入「Info」标签页,展开「URL Types」,点击+号添加自定义URL Scheme(比如
myapp-paypal),这个标识用来让系统唤起你的应用。
2. 创建PayPal订单时指定返回URL
调用PayPal的/v2/checkout/orders创建订单接口时,在请求体的application_context字段中设置return_url和cancel_url,值为你配置的URL Scheme链接,示例请求体如下:
{ "intent": "CAPTURE", "purchase_units": [ { "amount": { "currency_code": "USD", "value": "10.00" } } ], "application_context": { "return_url": "myapp-paypal://paypal/success", "cancel_url": "myapp-paypal://paypal/cancel" } }
PayPal完成支付或用户取消支付后,会自动跳转到你指定的这两个URL。
3. 在WebView中拦截跳转并返回应用
如果使用WKWebView,设置WKNavigationDelegate,在导航代理方法中拦截目标URL:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { guard let url = navigationAction.request.url else { decisionHandler(.allow) return } // 匹配自定义URL Scheme if url.scheme == "myapp-paypal" { // 解析URL路径判断支付状态 switch url.path { case "/paypal/success": // 执行支付成功逻辑,比如获取订单ID、关闭WebView break case "/paypal/cancel": // 执行支付取消逻辑 break default: break } decisionHandler(.cancel) return } decisionHandler(.allow) }
4. 处理系统唤起应用的回调(备用)
如果WebView跳转直接触发系统唤起应用,需要在AppDelegate或SceneDelegate中处理URL:
- AppDelegate示例:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { guard url.scheme == "myapp-paypal" else { return false } // 解析URL参数,处理支付结果 return true }
- SceneDelegate示例:
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) { guard let url = URLContexts.first?.url, url.scheme == "myapp-paypal" else { return } // 解析URL参数,处理支付结果 }
补充说明
PayPal REST API无需在其后台配置返回URL,完全由你在创建订单时指定即可。如果追求更高安全性,也可以用Universal Links替代URL Scheme,配置方式类似,仅需将返回URL替换为你的域名链接,并完成苹果开发者后台与域名服务器的关联配置。
内容的提问来源于stack exchange,提问作者Nala
相关产品推荐
相关产品推荐

