import { View, StyleSheet, Alert } from 'react-native'; import { useRoute, RouteProp, useNavigation } from '@react-navigation/native'; import { useEffect, useState } from 'react'; import { payApi, PaymentInfoResponse } from '../../services/api/payApi'; import { WebView } from "react-native-webview"; import * as Linking from 'expo-linking'; import { navigate } from '../../navigation/RootNavigation'; type PayScreenRouteProp = RouteProp<{ Pay: { payUrl: string }; }, 'Pay'>; export const Pay = () => { const [loading, setLoading] = useState(true); const route = useRoute(); const navigation = useNavigation(); const {payUrl} = route.params; const [payInfo, setPayInfo] = useState(); useEffect(() => { console.log(route.params); console.log(payUrl); // 设置处理深度链接的监听器 const handleDeepLink = ({ url }: { url: string }) => { console.log('Deep link received:', url); if ( url.startsWith('myapp://payment-success') || url.startsWith('exp://192.168.0.101:8084/--/payment-success') ) { const parsed = Linking.parse(url); const params = parsed.queryParams || {}; navigate('PaymentSuccessScreen', params); } }; // 添加深度链接事件监听器 const subscription = Linking.addEventListener('url', handleDeepLink); return () => { // 清理订阅 subscription.remove(); }; }, []); const handleNavigationStateChange = (navState: any) => { console.log(navState); // 检查URL是否包含支付成功的回调参数 const { url } = navState; if (url && url.includes('payment_success=true')) { // 如果网页URL中包含成功参数,可以在这里处理 Alert.alert('检测到支付成功!'); // navigation.navigate('PaymentConfirmation'); } } return {payUrl ? ( setLoading(true)} onLoadEnd={() => setLoading(false)} javaScriptEnabled={true} domStorageEnabled={true} startInLoadingState={true} scalesPageToFit={true} originWhitelist={['*']} userAgent="Mozilla/5.0 (Linux; Android 10; Pixel 3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Mobile Safari/537.36" onShouldStartLoadWithRequest={(request) => { console.log('Load request:', request); // 检查URL是否是支付成功的深度链接 const { url } = request; if ( url && ( url.startsWith('myapp://payment-success') || url.startsWith('exp://192.168.0.101:8084/--/payment-success') ) ) { // 解析参数 const parsed = Linking.parse(url); const params = parsed.queryParams || {}; // 跳转到支付成功页面 navigate('PaymentSuccessScreen', params); return false; // 不在WebView中加载 } // 允许所有其他请求 return true; }} /> ) : ( {/* Add fallback content here */} )} } const styles = StyleSheet.create({ webview: { flex: 1, }, });