【发布时间】:2021-07-07 10:01:37
【问题描述】:
我按照示例使用PayPalCheckoutSdk 库,我有以下内容:
<?php
require __DIR__ . '/PayPalCheckout/vendor/autoload.php';
use PayPalCheckoutSdk\Core\PayPalHttpClient;
use PayPalCheckoutSdk\Core\SandboxEnvironment;
$clientId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$clientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$environment = new SandboxEnvironment($clientId, $clientSecret);
$client = new PayPalHttpClient($environment);
$invoiceNumber = uniqid();
$items = array();
$items[0] = [
'name' => 'HTML5',
'description' => 'Video streaming service',
'type' => 'SERVICE',
'sku' => 'sku03',
'unit_amount' =>
[
'currency_code' => 'USD',
'value' => '90.00',
],
'quantity' => '1',
'category' => 'DIGITAL_GOODS',
];
$new_item = [
'name' => 'CSS3',
'description' => 'Video streaming service',
'type' => 'SERVICE',
'sku' => 'sku02',
'unit_amount' =>
[
'currency_code' => 'USD',
'value' => '45.00',
],
'quantity' => '2',
'category' => 'DIGITAL_GOODS',
];
array_push($items , $new_item);
use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
$request = new OrdersCreateRequest();
$request->prefer('return=representation');
$request->body = [
'intent' => 'CAPTURE',
'application_context' => [
'brand_name' => 'COMPANY',
'locale' => 'us-US',
'user_action' => 'PAY_NOW',
"cancel_url" => "http://localhost/PayPal/cancel.php",
"return_url" => "http://localhost/PayPal/return.php",
'landing_page' => 'BILLING',
],
'purchase_units' => [0 => [
'reference_id' => $invoiceNumber,
'amount' => [
'currency_code' => 'USD',
'value' => '160.00',
'breakdown' => [
'item_total' => [
'currency_code' => 'USD',
'value' => '180.00',
],
'shipping_discount' => [
'currency_code' => 'USD',
'value' => '20.00',
],
],
],
'items' =>
$items,
]],
];
try {
$response= $client->execute($request);
if ($response->statusCode == 201){
for ($i = 0; $i < count($response->result->links); ++$i){
$link = $response->result->links[$i];
if ($link->rel =='approve') {
header("location: $link->href");
}
}
} else {
exit(1);
}
} catch (HttpException $ex) {
echo $ex->statusCode;
print_r($ex->getMessage());
}
?>
我正在通过get方法print_r($_REQUEST);接收数据:
Array ( [token] => 3JX899952R0552721 [PayerID] => J95XSJRX4WXVS
并且,该信息在文件return.php 中处理,该文件具有以下代码:https://ideone.com/ncVjIt
我希望能够通过post方式接收信息,我应该进行哪些配置以使数据通过post而不是通过get发送?
【问题讨论】:
-
你不能。在贝宝网站上付款后,用户在自己的浏览器中被重定向回指定的
return_url。该重定向意味着 GET 请求,您无法将其转换为 POST。 -
@CBroe 我认为这是可能的,在您的示例中,观察到三个链接(自我、批准、捕获),其中两个来自 get 方法,最后一个来自 post 方法。
-
“在您的示例中观察到三个链接(自我、批准、捕获)” - 我不知道您在说什么。 // 从支付网关向您的服务器发出的 POST 请求通常是这些网关提供的一个选项(“webhook”),但这会在后台发生。
-
@CBroe 我指的是 Github 文档中的输出数据示例。好的,我明白了,如果表单通过 post 方法接收数据,显然一切都会有所不同。
标签: php paypal paypal-sandbox checkout