Adyen API出现401未授权错误

3
我正在尝试使用curl在Adyen的测试环境中进行支付,但出现了401未经授权的错误响应。我已经检查了Web服务用户的凭据十几次,但我确信它们是正确的。当我尝试使用官方的Adyen PHP Api库(https://github.com/Adyen/adyen-php-api-library)时,我得到了相同的结果。我还尝试创建一个新的Web服务用户,但没有结果。有人知道我做错了什么吗? 请求代码:
<?php

$request = array(
    "merchantAccount" => "MyWebsite",
    "amount" => array(
        "currency" => "EUR",
        "value" => "199"
    ),
    "reference" => "TEST-PAYMENT-" . date("Y-m-d-H:i:s"),
    "shopperIP" => "2.207.255.255",
    "shopperReference" => "YourReference",
    "billingAddress" => array(
        "street" => "Simon Carmiggeltstraat",
        "postalCode" => "1011DJ",
        "city" => "Amsterdam",
        "houseNumberOrName" => "6-60",
        "stateOrProvince" => "NH",
        "country" => "NL"
    ),
    "card" => array(
        "expiryMonth" => "08",
        "expiryYear" => "2018",
        "holderName" => "Test Card Holder",
        "number" => "4111111111111111",
        "cvc" => "737"
    ),
);

$json = json_encode($request);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://pal-test.adyen.com/pal/servlet/Payment/v25/authorise");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC  );
curl_setopt($ch, CURLOPT_USERPWD, "xxxx:xxxx");
curl_setopt($ch, CURLOPT_POST, count($request));
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER,array("Content-type: application/json"));

// things I tried
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17');
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);

$result = curl_exec($ch);

?>

$result 变量返回一个空字符串。

响应:

*   Trying 91.212.42.153...
* Connected to pal-test.adyen.com (91.212.42.153) port 443 (#0)
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
*    subject: C=NL; ST=Noord-Holland; L=Amsterdam; O=Adyen B.V.; CN=*.adyen.com
*    start date: Jun 14 00:00:00 2016 GMT
*    expire date: Aug 13 23:59:59 2018 GMT
*    issuer: C=US; O=thawte, Inc.; CN=thawte SSL CA - G2
*    SSL certificate verify ok.
* Server auth using Basic with user 'xxxxx'
> POST /pal/servlet/Payment/v25/authorise HTTP/1.1
Host: pal-test.adyen.com
Authorization: Basic xxxxxx
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17
Accept: */*
Content-type: application/json
Content-Length: 465

* upload completely sent off: 465 out of 465 bytes
< HTTP/1.1 401 Unauthorized
< Date: Mon, 02 Apr 2018 19:58:11 GMT
< Server: Apache
< Set-Cookie: JSESSIONID=47E667BF9B585DC3BDF40F8D58493E23.test103e; Path=/pal; Secure; HttpOnly
* Authentication problem. Ignoring this.
< WWW-Authenticate: BASIC realm="Adyen PAL Service Authentication"
< Content-Length: 0
< Content-Type: text/plain; charset=UTF-8
< 
* Connection #0 to host pal-test.adyen.com left intact

您现在需要重置密码。同时,请在响应中删除基本身份验证标头,基本身份验证只是用户/密码 base64 编码的意思,这意味着您的用户名和密码现在已经被泄露。 - luke_b
@luke_b 我已重置密码并更改了帖子。这是一个空的测试环境,所以没有太多需要担心的,感谢你的注意。 - Deviant
3个回答

2

401表示认证失败。您没有使用正确的用户和密码组合。

您可以选择为通用API使用或POS付款生成密码。如果您打算将此API用户用于通用API,请使用“生成密码”,而不是“生成POS密码”。


我已经尝试了“生成密码”和“生成POS密码”的重置,但它们没有任何区别。我也多次检查了用户密码组合,确信它们是正确的。这就是整个问题所在。 - Deviant
Adyen示例的文档(https://github.com/Adyen/adyen-php-sample-code/blob/master/2.API/Library/create-payment-api.php)说只有在符合PCI标准的情况下才能进行付款请求,那么测试环境也适用吗? - Deviant
那个文件上的注释是不正确的。使用未加密的卡片详细信息才需要符合PCI合规性要求。你正在使用原始的卡片详细信息示例,因此需要Adyen的支持来为您启用它。但如果您不符合PCI合规性要求,为什么要测试呢? - luke_b

2

状态:401,错误代码:000,通常是以下情况之一导致的经典错误:

  • 使用正确的 merchantAccount 名称,而不是 companyAccount 名称
  • API 密钥 - 最好重新生成 API 密钥,并使用客户区域中的复制按钮进行复制
  • 环境设置为 LIVE/TEST

1

好的,现在它可以工作了。奇怪的是我没有改变任何东西。我的猜测是Adyen在他们那边遇到了麻烦。下一次出现类似情况时,我会给他们打电话。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接