【问题标题】:Adyen - Unable to decrypt dataAdyen - 无法解密数据
【发布时间】:2017-12-12 07:39:09
【问题描述】:

您好,我正在尝试将 adyen 支付网关集成到我的项目中。 我使用了以下 PHP SDK Adyen PHP SDK

我已按照 sdk 中提到的步骤生成客户端加密并将这些加密值传递给服务器端以执行支付。但是我遇到了一条错误消息“无法解密数据”

以下是我的示例代码,

前端:

<script type="text/javascript" src="https://test.adyen.com/hpp/cse/js/MY_LIBRARY_TOKEN.shtml"></script>
  <form method="POST"  id="adyen-encrypted-form">
    <input placeholder="number" type="text" size="20" data-encrypted-name="number" value="2223520443560010" />
    <input placeholder="holderName" type="text" size="20" data-encrypted-name="holderName" value="Ashok" />
    <input placeholder="expiryMonth" type="text" size="2" data-encrypted-name="expiryMonth" value="10" />
    <input placeholder="expiryYear" type="text" size="4" data-encrypted-name="expiryYear" value="2020" />
    <input placeholder="cvc" type="text" size="4" data-encrypted-name="cvc" value="737" />
    <input type="hidden" value="<?php echo date('Y-m-d\TH:i:sO'); ?>" data-encrypted-name="generationtime"/>
    <input type="submit" value="Pay"/>
 </form>

<script>
    // The form element to encrypt.
    var form = document.getElementById('adyen-encrypted-form');

    var options = {};
    // Bind encryption options to the form.
    var encryptedBlobFieldName = "myFieldName";
    options.name = encryptedBlobFieldName;
    options.onsubmit = function(e) {
        var encryptedData = form.elements[encryptedBlobFieldName].value;
        // Encrypted form detials
        console.log(encryptedData);
        e.preventDefault();
    };
var result = adyen.createEncryptedForm(form, options);
</script>

我从上面的提交操作中获得了加密值,并在表单中填充了测试deails。 (即)加密数据

服务器代码:

$client = new \Adyen\Client();
$client->setApplicationName("Adyen PHP Api Library Example");
$client->setUsername("WS_USERNAME");
$client->setPassword("WS_USER_PASSWORD");
$client->setEnvironment(\Adyen\Environment::TEST);
$service = new \Adyen\Service\Payment($client);
$result = $service->authorise($params);

以下是我传递给授权方法的值,

Array(
[amount] => Array
    (
        [value] => 19
        [currency] => GBP
    )

[reference] => payment-test
[merchantAccount] => MERCHANT_ACCOUNT_CODE
[additionalData] => Array
    (
        [card.encrypted.json] => 'ENCRYPTED_DATA_FROM_FRONT_END'
    )
)

我不确定我做错了什么,从服务器端我收到一个错误,因为无法解密数据。请帮我解决这个问题

【问题讨论】:

  • 问题可能出在 JavaScript 代码中。您正在尝试加密不存在的myFieldName...
  • @NirajShah 我已经从 link 引用了 adyen 文档。 Adyne 将使用给定的 encryptedBlobFieldName 动态创建一个字段,并在该字段中返回加密数据,因此该名称没有任何错误。我也尝试不添加该名称并出现相同的问题。
  • console.log(encryptedData);是否输出加密数据?
  • 是的,我得到了加密数据。但是在服务器端付款时,我遇到了无法解密的问题。我不确定我做错了什么

标签: laravel-5 payment-gateway payment adyen


【解决方案1】:

您是否尝试在不刷新页面的情况下进行付款? 在这种情况下,您确实应该创建字段来加密自己,在您的情况下,您将其称为“myFieldName”。如果你将它添加到你的表单中,你应该很高兴。当这不起作用时让我知道。

【讨论】:

  • 是的,我正在尝试在不刷新页面的情况下创建加密数据。我尝试通过在我的表单中添加字段myFieldName 就像这样&lt;input type="text" value="" data-encrypted-name="myFieldName"/&gt; 添加此字段时,我没有得到任何加密数据。我手动添加了一个提交事件并检查了myFieldName 中的值,在我的情况下它返回为空。同样在adyne文档中没有提到任何需要手动添加字段的内容,所以只有我没有将新字段添加到我的表单中。
【解决方案2】:

您需要使用带有冒号分隔小时和分钟的偏移量。

更改您的日期生成
echo date('Y-m-d\TH:i:sO');

echo date('Y-m-d\TH:i:sP');

【讨论】:

  • 我已经更新了你提到的日期格式,但仍然是同样的错误。我需要更新服务器端代码中的其他内容吗?
【解决方案3】:

我发现了问题。问题是在通过 CSE 从前端生成令牌后,我已通过 GET api 将这些值传递到服务器端。所以在加密字符串中添加了一些额外的字符。 (在 url 中传递的数据使用 url 加密进行了加密)。

我已将服务器 API 方法更改为 post 并且效果很好。

【讨论】:

    猜你喜欢
    • 2020-02-28
    • 2012-01-14
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2013-09-03
    • 2020-04-07
    相关资源
    最近更新 更多