我正在努力解決爲什麼我的Curl請求不適用於PayPal API。我有以下查詢工作的罰款,以獲得身份驗證令牌:PayPal API返回500 IS嘗試獲取交易時出錯
sub get_token {
my $curl = WWW::Curl::Easy->new();
my $fh = 'README';
$curl->setopt(CURLOPT_HEADER,0); # dont want the headers, or they will break the json reading!
$curl->setopt(CURLOPT_URL,"https://".$config->{$config->{mode}}->{transaction_endpoint}."/v1/oauth2/token");
$curl->setopt(CURLOPT_POSTFIELDS,"grant_type=client_credentials");
$curl->setopt(CURLOPT_USERPWD, $config->{$config->{mode}}->{system_client_id}.":".$config->{$config->{mode}}->{system_secret});
$curl->setopt(CURLOPT_SSL_VERIFYPEER,0);
$curl->setopt(CURLOPT_SSL_VERIFYHOST,0);
$curl->setopt('CURLOPT_RETURNTRANSFER',1);
$curl->setopt(CURLOPT_POST,1);
my $response_body;
open(my $fh, '>', \$response_body);
$curl->setopt(CURLOPT_WRITEDATA, $fh);
$curl->setopt(CURLOPT_VERBOSE,0);
my $retcode = $curl->perform();
if ($retcode != 0) {
warn "An error happened: ", $curl->strerror($retcode), " ($retcode)\n";
warn "errbuf: ", $curl->errbuf;
}
my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE);
use JSON;
my $json_vals = decode_json($response_body);
return $json_vals->{access_token};
}
..但後來當我嘗試使用下面的相同的邏輯來獲得交易時,出現一個500錯誤:
sub get_proper_trans_id {
my $token = get_token($_[0]);
print $IN->header('utf8');
my $curl = WWW::Curl::Easy->new();
my $fh = 'README';
my @headers = ("Authorization: Bearer $token","Content-Type: application/json; charset=utf-8");
print qq|Getting: https://$config->{$config->{mode}}->{transaction_endpoint}/v1/payments/payment/$_[0] \n|;
$curl->setopt(CURLOPT_HTTPHEADER,\@headers);
$curl->setopt(CURLOPT_HEADER,1);
$curl->setopt(CURLOPT_URL,"https://$config->{$config->{mode}}->{transaction_endpoint}/v1/payments/payment/$_[0]");
$curl->setopt(CURLOPT_SSL_VERIFYPEER,0);
$curl->setopt(CURLOPT_SSL_VERIFYHOST,0);
$curl->setopt('CURLOPT_RETURNTRANSFER',1);
$curl->setopt(CURLOPT_POST,1);
my $response_body;
open(my $fh, '>', \$response_body);
$curl->setopt(CURLOPT_WRITEDATA, $fh);
$curl->setopt(CURLOPT_VERBOSE,1);
my $retcode = $curl->perform();
if ($retcode != 0) {
warn "An error happened: ", $curl->strerror($retcode), " ($retcode)\n";
warn "errbuf: ", $curl->errbuf;
}
my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE);
}
傳入get_proper_trans_id()
的$_[0]
的值爲PAY-xxxx從PayPal-Checkout.JS系統傳回的交易ID。
如果我手動運行該curl命令,它的工作原理:
curl https://$config->{$config->{mode}}->{transaction_endpoint}/v1/payments/payment/$_[0] -H "Content-Type: application/json; charset=utf-8" -H "Authorization: Bearer $token"
的問題是,我在使用該方法UTF8的問題,所以我想找到一個模塊,將做的工作爲了我。
這裏是curl的輸出(帶有調試和頭文件);
* Hostname was NOT found in DNS cache
* Trying 173.0.82.78...
* Connected to api.sandbox.paypal.com (173.0.82.78) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSL connection using TLSv1.2/AES256-SHA256
* Server certificate:
* subject: C=US; ST=California; L=San Jose; O=PayPal, Inc.; OU=PayPal Production; CN=api.sandbox.paypal.com
* start date: 2016-01-13 00:00:00 GMT
* expire date: 2018-01-13 23:59:59 GMT
* issuer: C=US; O=Symantec Corporation; OU=Symantec Trust Network; CN=Symantec Class 3 Secure Server CA - G4
* SSL certificate verify ok.
> POST /v1/payments/payment/PAY-6KY19646FF321593HLCVRQSY HTTP/1.1
Host: api.sandbox.paypal.com
Accept: */*
Authorization: Bearer MY_TOKEN_HERE
Content-Type: application/json; charset=utf-8
Expect: 100-continue
< HTTP/1.1 500 Internal Server Error
< Date: Tue, 21 Feb 2017 06:38:03 GMT
* Server Apache is not blacklisted
< Server: Apache
< paypal-debug-id: 217b14fc80976
< Connection: close
< X-SLR-RETRY: 500
< X-SLR-RETRY-API: /v1/payments/payment/{id}
< Connection: close
< Paypal-Debug-Id: 217b14fc80976
< Set-Cookie: X-PP-SILOVER=name%3DSANDBOX3.API.1%26silo_version%3D1880%26app%3Dplatformapiserv%26TIME%3D1273015128%26HTTP_X_PP_AZ_LOCATOR%3D; Expires=Tue, 21 Feb 2017 07:08:03 GMT; domain=.paypal.com; path=/; Secure; HttpOnly
< Set-Cookie: X-PP-SILOVER=; Expires=Thu, 01 Jan 1970 00:00:01 GMT
< Vary: Authorization
< Content-Length: 196
< Content-Type: text/xml;charset=UTF-8
<
* Closing connection 0
GOT:
"HTTP/1.1 500 Internal Server Error
Date: Tue, 21 Feb 2017 06:38:03 GMT
Server: Apache
paypal-debug-id: 217b14fc80976
Connection: close
X-SLR-RETRY: 500
X-SLR-RETRY-API: /v1/payments/payment/{id}
Connection: close
Paypal-Debug-Id: 217b14fc80976
Set-Cookie: X-PP-SILOVER=name%3DSANDBOX3.API.1%26silo_version%3D1880%26app%3Dplatformapiserv%26TIME%3D1273015128%26HTTP_X_PP_AZ_LOCATOR%3D; Expires=Tue, 21 Feb 2017 07:08:03 GMT; domain=.paypal.com; path=/; Secure; HttpOnly
Set-Cookie: X-PP-SILOVER=; Expires=Thu, 01 Jan 1970 00:00:01 GMT
Vary: Authorization
Content-Length: 196
Content-Type: text/xml;charset=UTF-8
<ns1:XMLFault xmlns:ns1="http://cxf.apache.org/bindings/xformat"><ns1:faultstring xmlns:ns1="http://cxf.apache.org/bindings/xformat">java.lang.NullPointerException</ns1:faultstring></ns1:XMLFault>"
我錯過了什麼?謝謝!
看起來像Paypal API中的錯誤。它向他們扔了一個NPE。這可能意味着請求中的錯誤會在服務器上出現錯誤。 –
@JimGarrison -NPE? –
NullPointerException。 –