实现 Paypal Sandbox 退款时得到 Http 响应代码 400
Got Http response code 400 when implementing Paypal Sandbox refund
我正在尝试实现 Sandbox Paypal 支付网关退款功能。我正在使用 Laravel 5.6.12 和 Package: "paypal/rest-api-sdk-php": "^1.13"
我付款没问题。以下是支付成功后收到的回复。
{
"id": "PAY-94141048LX592642PLLYUVMA",
"transactions": [
{
"related_resources": [
{
"sale": {
"id": "0KH341752J2209342",
"state": "completed",
"links": [
{
"href": "https://api.sandbox.paypal.com/v1/payments/sale/0KH341752J2209342",
"rel": "self",
"method": "GET"
},
{
"href": "https://api.sandbox.paypal.com/v1/payments/sale/0KH341752J2209342/refund",
"rel": "refund",
"method": "POST"
},
{
"href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-94141048LX592642PLLYUVMA",
"rel": "parent_payment",
"method": "GET"
}
],
"soft_descriptor": "PAYPAL *PANKAJGARGS"
}
}
]
}
]
}
从上面JSON,我取Sale_ID = 0KH341752J2209342,写了下面的代码实现退款
$refund = new Refund();
$refund->setAmount(200);
$sale = new Sale();
$sale->setId("0KH341752J2209342");
try {
$apiContext = $this->_api_context;
$refundedSale = $sale->refund($refund, $apiContext);
} catch (Exception $ex) {
\Log::info($ex);
exit(1);
}
出现以下错误。
访问 https://api.sandbox.paypal.com/v1/payments/sale/0KH341752J2209342/refund 时得到 Http 响应代码 400。
如果有什么不对的地方,请指点一下好吗?如果您需要更多信息,请告诉我。我从上面删除了一些不必要的部分 JSON 以使其简短
错误详情。
状态代码:400 响应:{"name":"MALFORMED_REQUEST","message":"Incoming JSON request does not map to API request","information_link":"developer.paypal.com/webapps/developer/docs/api/…;}PayPal\Exception\PayPalConnectionException: 访问 https://api.sandbox.paypal.com/v1/payments/sale/3FM030155Y9829603/refund
时得到 Http 响应代码 400
您应该添加以下捕获,以便您可以看到真正的错误消息:
} catch (PayPal\Exception\PayPalConnectionException $ex) {
echo $ex->getCode();
echo $ex->getData(); // Prints the detailed error message
die($ex);
}
我在下面添加了三行
$amt = new Amount();
$amt->setTotal(10)
->setCurrency('INR');
在下面的代码中,现在一切正常。
$refund = new Refund();
$refund->setAmount($amt);
$sale = new Sale();
$sale->setId("0KH341752J2209342");
try {
$apiContext = $this->_api_context;
$refundedSale = $sale->refund($refund, $apiContext);
} catch (Exception $ex) {
\Log::info($ex);
exit(1);
}
我正在尝试实现 Sandbox Paypal 支付网关退款功能。我正在使用 Laravel 5.6.12 和 Package: "paypal/rest-api-sdk-php": "^1.13"
我付款没问题。以下是支付成功后收到的回复。
{
"id": "PAY-94141048LX592642PLLYUVMA",
"transactions": [
{
"related_resources": [
{
"sale": {
"id": "0KH341752J2209342",
"state": "completed",
"links": [
{
"href": "https://api.sandbox.paypal.com/v1/payments/sale/0KH341752J2209342",
"rel": "self",
"method": "GET"
},
{
"href": "https://api.sandbox.paypal.com/v1/payments/sale/0KH341752J2209342/refund",
"rel": "refund",
"method": "POST"
},
{
"href": "https://api.sandbox.paypal.com/v1/payments/payment/PAY-94141048LX592642PLLYUVMA",
"rel": "parent_payment",
"method": "GET"
}
],
"soft_descriptor": "PAYPAL *PANKAJGARGS"
}
}
]
}
]
}
从上面JSON,我取Sale_ID = 0KH341752J2209342,写了下面的代码实现退款
$refund = new Refund();
$refund->setAmount(200);
$sale = new Sale();
$sale->setId("0KH341752J2209342");
try {
$apiContext = $this->_api_context;
$refundedSale = $sale->refund($refund, $apiContext);
} catch (Exception $ex) {
\Log::info($ex);
exit(1);
}
出现以下错误。
访问 https://api.sandbox.paypal.com/v1/payments/sale/0KH341752J2209342/refund 时得到 Http 响应代码 400。
如果有什么不对的地方,请指点一下好吗?如果您需要更多信息,请告诉我。我从上面删除了一些不必要的部分 JSON 以使其简短
错误详情。
状态代码:400 响应:{"name":"MALFORMED_REQUEST","message":"Incoming JSON request does not map to API request","information_link":"developer.paypal.com/webapps/developer/docs/api/…;}PayPal\Exception\PayPalConnectionException: 访问 https://api.sandbox.paypal.com/v1/payments/sale/3FM030155Y9829603/refund
时得到 Http 响应代码 400您应该添加以下捕获,以便您可以看到真正的错误消息:
} catch (PayPal\Exception\PayPalConnectionException $ex) {
echo $ex->getCode();
echo $ex->getData(); // Prints the detailed error message
die($ex);
}
我在下面添加了三行
$amt = new Amount();
$amt->setTotal(10)
->setCurrency('INR');
在下面的代码中,现在一切正常。
$refund = new Refund();
$refund->setAmount($amt);
$sale = new Sale();
$sale->setId("0KH341752J2209342");
try {
$apiContext = $this->_api_context;
$refundedSale = $sale->refund($refund, $apiContext);
} catch (Exception $ex) {
\Log::info($ex);
exit(1);
}