【发布时间】:2018-12-17 22:35:03
【问题描述】:
我正在开发一个 react-native 应用程序,它应该与支付网关通信,在完成支付过程(成功或失败)后,我需要向用户显示警报。为此,我在 WebView 中打开一个链接,然后我得到返回的 url 为 onNavigationStateChange 并显示成功或失败消息。
但是,此安全问题流程必须在默认设备浏览器中完成。
当前代码:
const BASEURL = 'https://gatewayURL/?ID=';
let Token = null;
let paymentAccepted = null;
let paymentFactorId = null;
class Gateway extends PureComponent {
static propTypes = {
dispatch: PropTypes.func,
navigation: PropTypes.any,
}
componentWillMount() {
this.props.dispatch(getPaymentStatus());
}
_onLoad(webViewState) {
let url = webViewState.url.toString();
let isResponseValid = url.includes('backFromGateway');
if(isResponseValid){
if(this.props.checkedPaymentStatus != 'checked' ){
setTimeout(() => {
this.props.dispatch(setPaymentStatus('checked'));
let splitedURL = url.split("/");
paymentFactorId = splitedURL[splitedURL.length -2];
if(splitedURL[splitedURL.length - 1] === '0'){
paymentAccepted = true;
this.props.dispatch(setGatewayResponse('done', paymentFactorId));
}
else {
paymentAccepted = false;
this.props.dispatch(setGatewayResponse('rejected', paymentFactorId));
}
this.props.navigation.navigate('BackFromGateway', { title: '' })
}, 1000);
}
}
}
render() {
const { addNewOrderGatewayToken, checkedPaymentStatus } = this.props;
token = addNewOrderGatewayToken;
let view = null;
if(checkedPaymentStatus !== 'checked'){
view = <WebView onNavigationStateChange={this._onLoad.bind(this)} style={styles.container} source={{ uri: `${BASEURL}${token}` }}/>
}
else{
view = <View></View>
}
return (
<View style={styles.container}>
{view}
</View>
);
}
}
有什么想法吗?
谢谢
【问题讨论】:
-
我很不明白您在 webviews 安全问题背后的原因和含义是什么?有没有与此相关的文章? Webview 在移动设备上使用与 Chrome 相同的引擎,我看不出 Webview 在安全方面会受到怎样的影响。
-
@JimiPajala 我们本地商店只接受这种方式用于包含在线支付的应用程序。
标签: javascript reactjs react-native