Square Checkout URL支付成功时的响应内容与格式,C# WPF WebView2问题
Square Checkout支付响应与WebView2问题解决方案
一、支付完成后的响应类型与格式
Square Checkout支付完成后有两种核心响应方式:
- 前端跳转响应:支付成功/取消后,Square会自动跳转到创建Checkout时指定的
redirect_url,并在URL查询参数中携带结果:- 支付成功:
redirect_url?checkoutId=xxx&status=COMPLETED - 支付取消:
redirect_url?checkoutId=xxx&status=CANCELED
- 支付成功:
- Webhook异步通知:若配置了Webhook,Square会向你指定的后端端点发送POST请求,响应为JSON格式,包含完整的支付与订单详情,示例结构如下:
{ "merchant_id": "MERCHANT_ID", "type": "checkout.order.completed", "event_id": "EVENT_ID", "created_at": "2024-05-20T14:30:00Z", "data": { "object": { "order": { "id": "ORDER_ID", "status": "COMPLETED", "total_money": { "amount": 1500, "currency": "USD" } } } } }
二、C# WPF WebView2获取响应的问题排查
针对支付成功后无响应/事件触发的问题,按以下步骤排查:
- 确认redirect_url配置:创建Checkout时指定的
redirect_url需是WebView2可拦截的地址,比如自定义协议(如myapp://payment-result)或本地页面,避免使用外部公网地址导致WebView2无法触发本地导航事件。 - 监听WebView2导航事件:注册
NavigationStarting或NavigationCompleted事件,解析跳转URL的查询参数:// 初始化WebView2后注册事件 webView.CoreWebView2.NavigationStarting += CoreWebView2_NavigationStarting; private void CoreWebView2_NavigationStarting(object sender, CoreWebView2NavigationStartingEventArgs e) { if (e.Uri.StartsWith("myapp://payment-result")) { var queryParams = System.Web.HttpUtility.ParseQueryString(new Uri(e.Uri).Query); var status = queryParams["status"]; var checkoutId = queryParams["checkoutId"]; // 在这里处理支付结果逻辑 e.Cancel = true; // 阻止不必要的导航跳转 } } - 检查WebView2权限设置:确保未禁用导航事件,或配置了错误的内容安全策略导致跳转被拦截。可通过
CoreWebView2.Settings确认相关权限。 - 验证Square跳转逻辑:先在普通浏览器中测试Checkout URL,确认支付后是否正常跳转到指定的
redirect_url,排除Square端的配置问题。
内容的提问来源于stack exchange,提问作者Jaimin
相关产品推荐
相关产品推荐

