Flutter中PayPal webhook支付成功后如何重定向到首页?

问题描述 投票:0回答:1

我正在开发一个 Flutter 应用程序,该应用程序需要在通过 PayPal Webhooks 成功处理付款后将用户重定向到主页小部件。然而,支付成功后,应用程序显示空白,而不是导航到主页。我已经通过 PayPal webhook 验证了付款成功,并且正在尝试在我的 Flutter 应用程序中处理重定向。

代码:

main.dart

 @override
  void initState() {
    super.initState();
    getUserData();
    
    _socketService = SocketService(onSubscriptionSuccess: (isPremium) {
      final currentUser = ref.read(userProvider.notifier).state;
      if (currentUser != null) {
        final updatedUser = currentUser.copyWith(
          isPremium: isPremium,
      
        );
        ref.read(userProvider.notifier).state = updatedUser;
        Routemaster.of(context).replace(HOME_ROUTE);
      }
    });
    _socketService.createSocketConnection();
  }

socket_service.dart

import 'package:socket_io_client/socket_io_client.dart' as IO;

void createSocketConnection() {
  socket = IO.io('http://localhost:3001', <String, dynamic>{
    // Connection setup
  });

  socket.onConnect((_) => {
    // Connection established
  });
  socket.on('subscription_success', (data) => onSubscriptionSuccessHandler(data));
}

void onSubscriptionSuccessHandler(data) {
  if (data != null && data['isPremium'] != null) {
    bool isPremium = data['isPremium'];
    onSubscriptionSuccess(isPremium);
  }
}

路由器.dart

routes: {
    HOME_ROUTE: (route) => const MaterialPage<void>(child: HomePage()),

服务器端 Node.js

index.js


const { Server } = require("socket.io");


const server = http.createServer(app);
const io = new Server(server);

app.use((req, res, next) => {
  req.io = io;
  next();
});

redirectedToPremiunFeatures = true;

io.on("connection", (socket) => {
  socket.emit("user", redirectedToPremiunFeatures);
 
  socket.on("redirected", (reason) => {
    redirectedToPremiunFeatures = true;
    socket.emit("user", redirectedToPremiunFeatures);
    socket.broadcast.emit("user", redirectedToPremiunFeatures);
    
  });
  socket.on("reconnect_attempt", () => {
    
  });
});

server.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

paypal.js


paypalRouter.post("/subscriptions/webhook", webhookRateLimiter, async (req, res) => {
...
   if (updatedUser) {
              console.log("Subscription confirmed for user:", userId);
              req.io.emit("subscription_success", {
                userId: userId,
                isPremium: true,
              });

socket_service.dart
服务器端逻辑(带有
socket.io
的 Node.js)处理订阅成功事件,并应该触发
onSubscriptionSuccess
中的
main.dart
回调。

尽管回调被触发(通过调试日志确认),但应用程序并未按预期导航到

HomePage
小部件。值得注意的是,我的导航设置的其余部分在应用程序的其他部分运行良好。

如何确保应用程序在收到 PayPal webhook 的成功付款通知后导航到主页?

node.js dart socket.io paypal-rest-sdk paypal-webhooks
1个回答
0
投票

在不诊断此处的具体问题的情况下,作为设计问题,Webhooks 不应用于触发客户端事件。它们的目的是通过状态更改来更新您的后端,即在初始批准后和每个周期(PAYMENT.SALE.COMPLETED 事件)后将订阅标记为已付款。为此目的使用网络钩子。

在客户端,让它调用服务器来检查订阅当前是否处于活动状态。如果不是(即尚未收到并处理任何 Webhook 来将其标记为此类),请让服务器执行 GET 调用来检索订阅的状态。将结果返回给客户端,允许其继续(或停止)订阅启用的任何功能。

© www.soinside.com 2019 - 2024. All rights reserved.