【问题标题】:Securionpay checkout verify successSecurionpay结账验证成功
【发布时间】:2018-11-18 19:45:19
【问题描述】:

好的,我决定使用 securionpay 作为付款方式。

我正在苦苦挣扎的是我不知道如何在我的服务器上验证付款是否成功

<script src = "https://securionpay.com/checkout.js"> </script>
<script src="https:/ / ajax.googleapis.com / ajax / libs / jquery / 3.1.0 / jquery.min.js "></script>
<script type="
text / javascript ">
  $(function () {
    SecurionpayCheckout.key = 'pk_test_ZVhCjD2Gz7OF222L00bxIdlD';
    SecurionpayCheckout.success = function (result) {
      // handle successful payment (e.g. send payment data to your server)
    };
    SecurionpayCheckout.error = function (errorMessage) {
      // handle integration errors (e.g. send error notification to your server)
    };

    $('#payment-button').click(function () {
      SecurionpayCheckout.open({
        checkoutRequest: 'NTQ1NDAwYTczZTljMjUwYzNhZjA0NTdkOTFjNThiOTY5YzIxY2ViMjBhMDRmOTYwNjg1MDI3OWQ2OTZlN2VjMnx7ImNoYXJnZSI6eyJhbW91bnQiOjQ5OSwiY3VycmVuY3kiOiJFVVIifX0=',
        name: 'SecurionPay',
        description: 'Checkout example'
      });
    });
  });
</script>

<button id="payment-button">Payment button</button>

是这样的

  1. 用户选择产品
  2. 用户点击订单(请求将发送到我创建签名的“结帐请求”的服务器
  3. 我渲染了带有 checkoutRequest 填充的 javascript 文件
  4. 用户点击“支付按钮”
  5. 用户填写卡信息并点击支付
  6. SecurtionpayCheckout.success 运行

无论“结果”如何返回给我,它都无助于在服务器上进行验证。我只在服务器端生成结帐请求。

我的想法是我的服务器应该生成一些我将存储在订单模型中的变量,如果成功,“结果”应该返回我该变量,然后我可以根据我可以验证的内容来验证它吗?我可能错过了一些东西......

文档: https://securionpay.com/docs/tutorials/checkout

P.S 我不想在我的服务器上存储卡信息

谢谢

【问题讨论】:

    标签: javascript ruby-on-rails payment


    【解决方案1】:

    您应该使用metadata。将是否需要的数据放在 checkoutRequest.charge.metadata 属性中。在success方法中会附加到charge并在result参数中返回。

    【讨论】:

    • 我认为这不是一天结束时的正确做法。由于结帐请求可以从 Base64 解码,因此会暴露元数据,因此我无法根据它进行验证。相反,我只需将charge_id 发送回我的后端,然后将帖子发送到安全...这是问题。我不想获得有关使用的卡等的任何信息。我​​要寻找的是我猜的事件。我只想检查这是否成功。你可以帮帮我吗 ?我们可以用波兰语交谈。
    • 结帐请求可以被解码,但它是用你的密钥 (securionpay.com/docs/api#checkout-request-sign) 签名的,它不能被修改。
    • 这是真的,但是当它被解码时,带有“假结帐 id”的元数据可能会被发送回我的服务器,甚至不需要向 securion 发送付款。我的意思是我需要以一种或另一种方式将帖子发送到后端的安全以完全验证它,然后我可以使用元数据来验证它。也许我误解了“我应该如何使用元数据”。如果捕获 == true,则表示已向客户收费,对吗?
    • 我不明白如何将带有“假结帐 ID”的元数据发送到后端。附加到结帐请求和稍后收费的元数据在前端不可修改。通常,您只需将chargeId 传递给后端,您可以在那里检索费用并检查它是否被拒绝。如果没有找到charge,那么chargeId 是假的。此外,您可以存储已处理/验证的 ChargeId 以处理重复(如果有人会尝试使用以前的 ChargeId)。无法猜测chargeId(它有 24 个随机字母数字字符)。是的,捕获 == true 表示向客户收费。
    • 你当然是对的。我要说的是,不可能不在后端发送帖子以通过 checkout_id 检查交易的状态。我只是希望能够捕获 javascript 响应成功并基于此响应(仅)验证结帐。如果在我的后端我不会将 checkout_id 发布到 securion 以检索费用,则可以发送刚刚解码的元数据作为确认,并使用伪造的结帐 ID。我想我们只是误会了对方。
    猜你喜欢
    • 2017-02-05
    • 2013-05-25
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 2020-06-20
    • 2017-04-20
    相关资源
    最近更新 更多