You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Adyen加密的$_POST['encrypted-data']提取字段替换支付测试数据

要实现从$_POST['encrypted-data']提取加密卡字段并替换测试数据,你只需要解析加密数据的JSON字符串,然后将对应字段赋值给CheckoutPaymentMethod的属性即可,具体实现如下:

核心逻辑说明

Adyen客户端加密(CSE)生成的encrypted-data是JSON格式字符串,其中包含你需要的所有加密卡信息(字段采用小驼峰命名,比如encryptedCardNumber对应你提到的EncryptedCardNumber)。只需解析该JSON,提取对应字段后替换测试值即可。

修改后的payment.php完整代码

<?php
// 1. 验证加密数据是否存在
if (!isset($_POST['encrypted-data']) || empty($_POST['encrypted-data'])) {
    die("加密数据不能为空");
}

// 2. 解析JSON为PHP关联数组
$encryptedData = json_decode($_POST['encrypted-data'], true);
if (json_last_error() !== JSON_ERROR_NONE) {
    die("加密数据解析失败");
}

// 3. 校验必要字段完整性
$requiredFields = ['encryptedCardNumber', 'encryptedExpiryMonth', 'encryptedExpiryYear', 'encryptedSecurityCode'];
foreach ($requiredFields as $field) {
    if (!isset($encryptedData[$field]) || empty($encryptedData[$field])) {
        die("缺少必要加密字段: {$field}");
    }
}

require_once 'vendor/autoload.php';
$client = new \Adyen\Client();

$client->setXApiKey("my api key");
$client->setEnvironment(\Adyen\Environment::TEST);
$client->setTimeout(30);
$service = new \Adyen\Service\Checkout\PaymentsApi($client);

// 用动态唯一值生成幂等键,避免重复请求问题
$requestOptions['idempotencyKey'] = uniqid();

// 初始化支付方式对象,替换测试数据为真实加密值
$paymentMethod = new \Adyen\Model\Checkout\CheckoutPaymentMethod();
$paymentMethod
    ->setType("scheme")
    ->setEncryptedCardNumber($encryptedData['encryptedCardNumber'])
    ->setEncryptedExpiryMonth($encryptedData['encryptedExpiryMonth'])
    ->setEncryptedExpiryYear($encryptedData['encryptedExpiryYear'])
    ->setEncryptedSecurityCode($encryptedData['encryptedSecurityCode']);

// 初始化金额对象
$amount = new \Adyen\Model\Checkout\Amount();
$amount
    ->setValue(10)
    ->setCurrency("EUR");

// 初始化支付请求对象
$paymentRequest = new \Adyen\Model\Checkout\PaymentRequest();
$paymentRequest
    ->setMerchantAccount("myMerchantAccountCOM")
    ->setPaymentMethod($paymentMethod)
    ->setAmount($amount)
    ->setReference("payment-test-" . uniqid()) // 生成唯一订单参考号
    ->setReturnUrl("https://your-valid-return-url.com"); // 填写真实商户返回URL

// 发起支付请求并处理结果
try {
    $result = $service->payments($paymentRequest, $requestOptions);
    // 生产环境可根据$result结果跳转或返回响应
    var_dump($result);
} catch (\Adyen\AdyenException $e) {
    die("支付请求失败: " . $e->getMessage());
}
?>

关键注意事项

  • 字段名匹配:Adyen旧版CSE生成的JSON字段为小驼峰格式,需严格匹配字段名
  • 幂等键优化:用uniqid()动态生成幂等键,避免重复提交相同请求
  • 返回URL必填:必须填写真实有效的商户返回URL,否则支付流程无法正常完成
  • 错误处理:添加了基础的参数校验和异常捕获,生产环境可进一步优化错误处理逻辑

内容的提问来源于stack exchange,提问作者ashrf glal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 20:10:03