首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用paypal进行安全支付

使用paypal进行安全支付
EN

Stack Overflow用户
提问于 2018-11-29 18:07:53
回答 3查看 911关注 0票数 9

我正在尝试用react paypal-快递-结帐实现一个安全的支付选项.但是我看到用户可以很容易地用chrome工具改变数量..。我不应该从我的服务器向paypal发出API请求并用我的DB验证金额吗?我看不出有什么办法可以用贝宝.

这是我的代码:

代码语言:javascript
复制
import React, { Component } from 'react';
import { connect } from 'react-redux';
import 'react-credit-cards/es/styles-compiled.css'
import './checkout.css';
import PaypalExpressBtn from 'react-paypal-express-checkout';

class CheckOut extends Component {
    constructor(props) {
        super(props);

        this.state = {
            amount: 40
        }
    }

    render() {
        const client = {
            sandbox: 'XXXX',
            production: 'Your-Production-Client-ID',
        }
        return (
                <PaypalExpressBtn client={client} currency={'USD'} total={this.state.amount} />
        );
    }
}


export default connect(CheckOut);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-12-01 20:35:32

Paypal允许来自客户端和服务器的两种类型的使用。我想客户可以修改他们的请求,以减少费用。但是,最终,不管你的生意是什么,你都会收到订单和付款。只需检查付款是否与它应该是不同的,不履行订单,作出退款。

如果您想节省麻烦,那么使用通过您的服务器进行付款的服务器选项

在任何情况下,与任何其他支付方法一样,我建议您自己花时间实现它,遵循Paypal提供的优秀且有良好文档的API。他们有很多例子和用例,有浏览器和服务器的代码。

票数 8
EN

Stack Overflow用户

发布于 2018-12-07 11:16:29

永远不要相信来自客户端的价值。您应该绝对验证服务器端的金额。

正如@jorbuedo所说,您可以创建一个服务器集成,这样就不会公开客户端的值。向服务器发送会话ID或订单号或其他内容,从DB检索订单,并执行重定向到PayPal以处理事务服务器端。

或者,您可以保留所拥有的客户端内容,但在事务完成后进行验证。您可以使用即时付款通知或较新的韦布胡克斯来完成此操作。

您可以将一个custom变量传递到<PaypalExpressButton ...>paymentOptions属性中,然后使用此值验证已在IPN中支付的正确金额。

例如:

代码语言:javascript
复制
<PaypalExpressButton
  client={client}
  currency="USD"
  total={this.state.amount}
  paymentOptions={{
    custom: this.props.sessionId
  }}
/>

然后,作为IPN的一部分,您可以从DB中提取会话ID,检查预期的支付金额(您需要存储它,或者根据根据会话ID保存的项目/价格计算)是否与Paypal提供的支付金额相同(例如,mc_gross)。作为IPN一部分获得的变量的完整列表是可用的这里

使用IPN不收费。如果您不想构建这个流,那么您必须手动验证每个订单,以确保数量是正确的。如果您正在运行一些小的东西,这可能是一个可以接受的折衷方案。

编辑:不要仅仅将预期的金额作为自定义变量发送,并将其与mc_gross值进行比较,因为这也可以使用F12或浏览器扩展进行更改。该值需要是不透明的,您可以将服务器端转换为有意义的东西。

票数 2
EN

Stack Overflow用户

发布于 2018-12-07 14:37:40

@jorbuedo和戴夫所罗门给出了很好的关于安全的答案,你应该把它们考虑进去。

但是,如果你真的不想让用户改变你的组件状态和道具,你可以用这个黑客来禁用Devtools。

代码语言:javascript
复制
if (window.__REACT_DEVTOOLS_GLOBAL_HOOK__) {
  window.__REACT_DEVTOOLS_GLOBAL_HOOK__.emit = function() {};
}

基本上,它模拟了一些react-devtools方法,而Devtool无论如何也找不到您的组件树。

此答案仅用于禁用用户编辑组件。这不是最好的安全解决方案)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53545118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档