gpt4 book ai didi

perl - PayPal API 在尝试获取交易时返回 500 IS 错误

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:18 25 4
gpt4 key购买 nike

我正在尝试找出为什么我的 Curl 请求不适用于 PayPal API。我有以下查询可以正常获取身份验证 token :

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 IS 错误:

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]的值是从PayPal传回的PAY-xxxx交易ID -Checkout.JS 系统。

如果我手动运行这个 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 的输出(带有调试和 header );

* 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 技术人员的回复。看起来这个特定的函数需要一个 GET 而不是 POST:

I see you are trying to use a POST where you need to use a GET (the REST API flow needs a GET for you to be able to get transaction details. GET https://api.sandbox.paypal.com/v1/payments/payment/ Can you try changing it for a GET? I hope this sorts it.

...果然,它已修复 :)

对于任何想知道我是如何进行更改的人,我只是注释掉了:

$curl->setopt(CURLOPT_POST,1);

curl 在发送请求时默认为 GET。

关于perl - PayPal API 在尝试获取交易时返回 500 IS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42360353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com