You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.0 KiB
68 lines
2.0 KiB
import { View, StyleSheet } from 'react-native'; |
|
import { useRoute, RouteProp } from '@react-navigation/native'; |
|
import { useEffect, useState } from 'react'; |
|
import { payApi, PaymentInfoResponse } from '../../services/api/payApi'; |
|
import { WebView } from "react-native-webview"; |
|
|
|
type PayScreenRouteProp = RouteProp<{ |
|
Pay: { order_id: string }; |
|
}, 'Pay'>; |
|
|
|
export const Pay = () => { |
|
const [loading, setLoading] = useState(true); |
|
const route = useRoute<PayScreenRouteProp>(); |
|
const {order_id} = route.params; |
|
const [payInfo, setPayInfo] = useState<PaymentInfoResponse>(); |
|
const getPayInfo = async () => { |
|
const data = { |
|
order_id: order_id, |
|
method: 'paypal', |
|
amount: '100', |
|
currency: 'USD' |
|
} |
|
const res = await payApi.getPayInfo(data); |
|
console.log('res',res); |
|
|
|
setPayInfo(res); |
|
} |
|
useEffect(() => { |
|
|
|
getPayInfo(); |
|
},[]) |
|
const handleNavigationStateChange = (navState: any) => { |
|
console.log(navState); |
|
} |
|
return <View style={{ flex: 1 }}> |
|
{payInfo?.payment_url ? ( |
|
<WebView |
|
source={{ uri: payInfo.payment_url }} |
|
style={styles.webview} |
|
onNavigationStateChange={handleNavigationStateChange} |
|
onLoadStart={() => 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(request); |
|
|
|
// 允许所有请求 |
|
return true; |
|
}} |
|
/> |
|
) : ( |
|
<View> |
|
{/* Add fallback content here */} |
|
</View> |
|
)} |
|
</View> |
|
} |
|
|
|
const styles = StyleSheet.create({ |
|
webview: { |
|
flex: 1, |
|
}, |
|
});
|
|
|