【问题标题】:API credentials are incorrectAPI 凭据不正确
【发布时间】:2013-03-10 08:05:05
【问题描述】:

我已尝试将示例从 PayPal APIs Getting Started Guide 改编为 PHP:

<?php

define('PAYPAL_API_USER', '<snip>');
define('PAYPAL_API_PWD', '<snip>');
define('PAYPAL_API_SIGNATURE', '<snip>');
define('PAYPAL_API_APPLICATION_ID', 'APP-80W284485P519543T');

$endpoing = 'https://svcs.sandbox.paypal.com/AdaptiveAccounts/CreateAccount';
$headers = array(
    'X-PAYPAL-SECURITY-USERID' => PAYPAL_API_USER,
    'X-PAYPAL-SECURITY-PASSWORD' => PAYPAL_API_PWD,
    'X-PAYPAL-SECURITY-SIGNATURE' => PAYPAL_API_SIGNATURE,

    'X-PAYPAL-REQUEST-DATA-FORMAT' => 'JSON',
    'X-PAYPAL-RESPONSE-DATA-FORMAT' => 'JSON',

    'X-PAYPAL-APPLICATION-ID' => PAYPAL_API_APPLICATION_ID,

    'X-PAYPAL-DEVICE-IPADDRESS' => '192.0.2.0', // :-? Also tried with my public IP address
    'X-PAYPAL-SANDBOX-EMAIL-ADDRESS' => '<snip>', // Typed my account's e-mail
);
$payload = '{
    "sandboxEmailAddress": "Sender-emailAddress",
    "accountType": "PERSONAL",
    "name": {
        "firstName": "Lenny",
        "lastName": "Riceman"
    },
    "address": {
        "line1": "123 Main St",
        "city": "Austin",
        "state": "TX",
        "postalCode": "78759",
        "countryCode": "US"
    },
    "citizenshipCountryCode": "US",
    "contactPhoneNumber": "512-555-5555",
    "dateOfBirth": "1968-01-01Z",
    "createAccountWebOptions": {
        "returnUrl": "http://www.example.com/success.html"
    },
    "currencyCode": "USD",
    "emailAddress": "lr12345@example.com",
    "preferredLanguageCode": "en_US",
    "registrationType": "Web",
    "requestEnvelope": {
        "errorLanguage": "en_US"
    }
}';
$options = array(
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_HTTPHEADER => $headers,
CURLOPT_POST => false,
CURLOPT_POSTFIELDS => $payload,
    CURLOPT_RETURNTRANSFER => true,
);

try{
    $curl = curl_init($endpoing);
    if(!$curl){
        throw new Exception('Could not initialize curl');
    }
    if(!curl_setopt_array($curl, $options)){
        throw new Exception('Curl error:' . curl_error($curl));
    }
    $result = curl_exec($curl);
    if(!$result){
        throw new Exception('Curl error:' . curl_error($curl));
    }
    curl_close($curl);
    echo $result;
}catch(Exception $e){
    echo 'ERROR: ' . $e->getMessage() . PHP_EOL;
}

...但我总是得到这个:

<?xml version='1.0' encoding='utf-8'?>
<ns3:FaultMessage xmlns:ns3="http://svcs.paypal.com/types/common" xmlns:ns2="http://svcs.paypal.com/types/aa">
    <responseEnvelope>
        <timestamp>2013-03-20T16:33:46.309-07:00</timestamp>
        <ack>Failure</ack>
        <correlationId>7d7fa53e6a930</correlationId>
        <build>5343121</build>
    </responseEnvelope>
    <error>
        <errorId>520003</errorId>
        <domain>PLATFORM</domain>
        <subdomain>Application</subdomain>
        <severity>Error</severity>
        <category>Application</category>
        <message>Authentication failed. API credentials are incorrect.</message>
    </error>
</ns3:FaultMessage>

我已经仔细检查了 API 凭据(用户、密码和签名),它们与个人资料页面中显示的完全一样。我不太确定X-PAYPAL-DEVICE-IPADDRESSX-PAYPAL-SANDBOX-EMAIL-ADDRESS

我怀疑我误读了某些内容或省略了某些 curl 选项。你能发现我的代码有什么问题吗?

【问题讨论】:

    标签: php paypal


    【解决方案1】:

    有点无益的是,CURLOPT_HTTPHEADER 选项采用 Header=>值对的散列,只是一个字符串列表,每个字符串都必须是一个完整的 HTTP 标头。

    所以你需要$headers = array('X-PAYPAL-SECURITY-USERID: ' . PAYPAL_API_USER, ...)而不是$headers = array('X-PAYPAL-SECURITY-USERID' =&gt; PAYPAL_API_USER, ...)

    【讨论】:

    • 是的,当然……我一定是瞎子!这就解释了为什么我收到的是 XML 错误消息而不是 JSON 错误消息。非常感谢。
    • 修复此问题后,我仍然收到相同的错误消息(除了在 JSON 中很好地格式化)。最后,我从 PayPal.com 下载了一些 PHP 示例,这些示例恰好有一个配置文件,其中包含天知道谁提供的 API 凭据。我尝试了这些,一切都开始起作用了。因此,出于某种原因,PayPal 为我分配了一个无效的 API 密码。 (当然,我对 curl 的愚蠢误用是我代码中明显的问题。)
    • 大家好,我遇到了身份验证失败错误。我从贝宝网站获得了 API。我在开发人员站点中创建了沙盒帐户。我也检查了标题。但我无法解决这个错误。请给我建议。
    • @user2003356,问你自己的问题。 Álvaro,你能把这个凭证放在那里吗?因为我和你有同样的问题:)
    【解决方案2】:

    原因是您使用了错误的 api 凭据。您需要在您的主要开发者帐户中设置一个用户。设置完成后,您将在他们的个人资料中看到他们拥有自己独立的 API 凭据。

    我遇到了同样的问题,花了几个小时才解决,但现在一切正常。

    【讨论】:

    • 虽然这不能回答这个精确的问题(我实际上是在滥用 Curl),但它确实是让我浪费了好几天的大障碍。但是即使现在我知道该怎么做,通常也需要几个小时才能设置几个测试帐户进行开发。
    • +1。要设置沙盒帐户,请转到 developer.paypal.com,单击应用程序,沙盒帐户就在那里。
    【解决方案3】:

    它确实说得很清楚,沙盒的 APP-ID 始终是APP-80W284485P519543T

    当您上线时,您将拥有自己的。

    【讨论】:

      猜你喜欢
      • 2012-09-19
      • 2013-09-15
      • 1970-01-01
      • 2016-01-10
      • 2011-12-09
      • 2013-08-13
      • 2015-11-08
      • 2016-11-21
      • 2018-10-23
      相关资源
      最近更新 更多