首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Adyen -无法解密数据

Adyen -无法解密数据
EN

Stack Overflow用户
提问于 2017-12-12 15:39:09
回答 3查看 3.3K关注 0票数 2

嗨,我正在尝试集成adyen支付网关在我的项目。我使用了下面的PHP SDK Adyen PHP SDK

我按照sdk中提到的步骤生成客户端加密,并将加密后的值传递给服务器端进行支付。但是我遇到了一个错误消息"Unable to Decrypt data“。

以下是我的示例代码。

前端:

代码语言:javascript
复制
<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>

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

服务器代码:

代码语言:javascript
复制
$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);

下面是我传递给authorise方法的值。

代码语言:javascript
复制
Array(
[amount] => Array
    (
        [value] => 19
        [currency] => GBP
    )

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-12-15 18:55:41

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

我已经将服务器API方法更改为post,它工作得很好。

票数 1
EN

Stack Overflow用户

发布于 2017-12-12 22:55:21

您是否正在尝试在不刷新页面的情况下进行付款?在这种情况下,您确实应该创建字段来加密您自己,在您的案例中,您将其称为'myFieldName‘。如果你将它添加到你的表单中,你应该就可以使用了。当它不起作用的时候告诉我。

票数 1
EN

Stack Overflow用户

发布于 2017-12-13 02:09:28

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

更改您的日期生成

代码语言:javascript
复制
echo date('Y-m-d\TH:i:sO');

代码语言:javascript
复制
echo date('Y-m-d\TH:i:sP');
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47767433

复制
相关文章

相似问题

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