2

PayPalAPI入門ガイドの例を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-IPADDRESSとはよくわかりませんX-PAYPAL-SANDBOX-EMAIL-ADDRESS

何かを読み間違えたか、カールオプションを省略したのではないかと思います。私のコードの何が問題になっているのかわかりますか?

4

3 に答える 3

6

やや役に立たないことに、このCURLOPT_HTTPHEADERオプションは、Header => Valueペアのハッシュを取得せ、文字列のリストのみを取得します。各文字列は、完全なHTTPヘッダーである必要があります。

$headers = array('X-PAYPAL-SECURITY-USERID' => PAYPAL_API_USER, ...)だからあなたの代わりに$headers = array('X-PAYPAL-SECURITY-USERID: ' . PAYPAL_API_USER, ...)

于 2013-03-20T23:58:17.240 に答える
2

その理由は、間違ったAPIクレデンシャルを使用しているためです。メインの開発者アカウント内にユーザーを設定する必要があります。それが設定されると、彼らが独自の個別のAPIクレデンシャルを持っていることが彼らのプロファイルに表示されます。

私は同じ問題を抱えていて、解決するのに何時間もかかりましたが、今ではすべてうまくいきます。

于 2013-11-04T14:56:15.060 に答える
0

サンドボックスのAPP-IDは常にであることがはっきりとわかりますAPP-80W284485P519543T

あなたがライブに行くとき、あなたはあなた自身のものを持っているでしょう。

于 2014-09-17T23:54:48.023 に答える