簡體   English   中英

使用php返回401的貝寶休息API付款呼叫

[英]paypal rest api payment call returning 401 using php

我正在嘗試將貝寶添加到我的網站。 我一直在按照https://developer.paypal.com/webapps/developer/docs/integration/direct/make-your-first-call/上的說明進行操作,但此操作無效。 我已經成功發送了訪問令牌的請求,並得到了答復。 響應中的信息存儲在名為$ accessToken的對象中。 問題出在我嘗試從上面列出的站點在步驟3中進行API調用時。 我收到從請求發回的401錯誤。 我很確定將請求作為函數參數發送到的$ url是正確的。 這是https://api.sandbox.paypal.com/v1/payments/payment 在過去的一個半星期里,我一直在互聯網上尋求幫助,但是我沒有取得任何進展。 任何幫助將不勝感激。 謝謝!

function MakePaymentAPICall($accessToken, $sale, $url, $url_success, $url_cancel){

// Create cURL resource
$ch = curl_init();

// Set url
curl_setopt($ch, CURLOPT_URL, $url);

$tokenType = $accessToken->GetTokenType();
$token = $accessToken->GetAccessToken();
$auth = "Authorization:" . $tokenType . " " . $token;
$saleTotal = $sale->GetTotal();

$header = array(
'Content-Type' => 'application/json',
'Authorization' => $tokenType . ' ' . $token
);


$dataArray = array(
    'intent' => 'sale',
    'redirect_urls' => array(
            'return_url' => $url_success,
            'cancel_url' => $url_cancel
        ),
    'payer' => array(
            'payment_method' => 'paypal'
        ),
    'transactions' => array(
            'amount' => array(
                    'total' => $saleTotal,
                    'currency' => 'USD'
                ),
            'description' => 'Test payment.'
        )
);


curl_setopt($ch, CURLOPT_HEADER, http_build_query($header));


// set data to post
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($dataArray));


curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);


// Execute curl command
$output = curl_exec($ch);


// Get info about request
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);


// Close cURL resource to free up system resources
curl_close($ch);

return $output;

} // MakePaymentAPICall函數

@ Jason247

http://php.net/manual/en/function.curl-setopt.php

我認為CURLOPT_HEADER需要一個int或bool(無論是1還是TRUE)來發送標頭。

我確實相信CURLOP_HTTPHEADER是您想要的,您可以直接將數組傳遞給它,而無需編碼為查詢字符串。

例如

curl_setopt($curlHandle, CURLOPT_HEADER, 1);
curl_setopt($curlHandle, CURLOPT_HTTPHEADER, $curlHeaders);

401錯誤通常表示訪問令牌無效或已過期: https : //developer.paypal.com/webapps/developer/docs/integration/direct/rest-payments-error-handling/

您是否在授權標頭中包含“承載者”? 例:

Authorization:Bearer EMxItHE7Zl4cMdkvMg-f7c63GQgYZU8FjyPWKQlpsqQP

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM