如何使用 Paypal Checkout 的服务器实现(PHP)从支付页面发送值?
How to send values from payment page using the server implementation(PHP) of Paypal Checkout?
我正在尝试根据 this page, and setting up a transaction as per this page 实施 PayPal Checkout 的服务器集成。
据我从其他帖子中了解到,“最佳”方法是创建 2 条路线,使用 createOrder
和 onApprove
方法来创建和验证已执行的订单。
我已成功安装 Checkout PHP SDK,并且我可以使用此代码启动交易:
客户端javascript (checkoutpage.php):
paypal.Buttons({
// Call your server to set up the transaction
createOrder: function(data, actions) {
return fetch('createorder.php', {
method: 'post'
}).then(function(res) {
return res.json();
}).then(function(orderData) {
// console.log(orderData);
return orderData.id;
});
},
//onApprove function below left out for clarity purposes
onApprove: function(data) {}
}).render('#paypal-button-container');
和服务器端PHP代码(createorder.php):
<?php
namespace Sample\CaptureIntentExamples;
require __DIR__ . '/route/to/paypal/autoload.php';
use Sample\PayPalClient;
use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
class CreateOrder
{
public static function createOrder($debug=false)
{
$request = new OrdersCreateRequest();
$request->prefer('return=representation');
$request->body = self::buildRequestBody();
$client = PayPalClient::client();
$response = $client->execute($request);
if ($debug)
{
echo json_encode($response->result, JSON_PRETTY_PRINT);
}
return $response;
}
private static function buildRequestBody()
{
return array(
'intent' => 'CAPTURE',
'application_context' =>
array(
'return_url' => 'https://example.com/return',
'cancel_url' => 'https://example.com/cancel'
),
'purchase_units' =>
array(
0 =>
array(
'amount' =>
array(
'currency_code' => 'USD',
'value' => '2.00'
)
)
)
);
}
}
if (!count(debug_backtrace()))
{
CreateOrder::createOrder(true);
}
?>
至此,交易已启动,数据位于 createorder.php
页面的 purchase_units
数组中。我的问题是如何将这些值从 checkoutpage.php
发送到 createorder.php
页面,同时维护服务器端 PHP 实施?而不是像这样设置 100% 客户端:
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: '88.44'
}
}]
});
},
原因是价格、商品数量、运费等值可以在结帐页面中使用 JS 动态更改,而在其他情况下使用静态 DB 值。
提前致谢
我终于找到了解决方案:
客户端:
createOrder: function(data, actions) {
return fetch('createorder.php', {
method: 'post',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify({
"intent": "CAPTURE",
"purchase_units": [
{
"amount": {
"currency_code": "USD",
"value": "100.00"
}
}
]
})
}).then(function(res) {
return res.json();
}).then(function(orderData) {
// console.log(orderData);
return orderData.id;
});
},
和服务器端PHP:
<?php
namespace Sample\CaptureIntentExamples;
require __DIR__ . '/route/to/paypal/autoload.php';
use Sample\PayPalClient;
use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
class CreateOrder
{
public static function createOrder($debug=false)
{
$request = new OrdersCreateRequest();
$request->prefer('return=representation');
$request->body = file_get_contents('php://input');
$client = PayPalClient::client();
$response = $client->execute($request);
if ($debug)
{
echo json_encode($response->result, JSON_PRETTY_PRINT);
}
return $response;
}
}
if (!count(debug_backtrace()))
{
CreateOrder::createOrder(true);
}
?>
我正在尝试根据 this page, and setting up a transaction as per this page 实施 PayPal Checkout 的服务器集成。
据我从其他帖子中了解到,“最佳”方法是创建 2 条路线,使用 createOrder
和 onApprove
方法来创建和验证已执行的订单。
我已成功安装 Checkout PHP SDK,并且我可以使用此代码启动交易:
客户端javascript (checkoutpage.php):
paypal.Buttons({
// Call your server to set up the transaction
createOrder: function(data, actions) {
return fetch('createorder.php', {
method: 'post'
}).then(function(res) {
return res.json();
}).then(function(orderData) {
// console.log(orderData);
return orderData.id;
});
},
//onApprove function below left out for clarity purposes
onApprove: function(data) {}
}).render('#paypal-button-container');
和服务器端PHP代码(createorder.php):
<?php
namespace Sample\CaptureIntentExamples;
require __DIR__ . '/route/to/paypal/autoload.php';
use Sample\PayPalClient;
use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
class CreateOrder
{
public static function createOrder($debug=false)
{
$request = new OrdersCreateRequest();
$request->prefer('return=representation');
$request->body = self::buildRequestBody();
$client = PayPalClient::client();
$response = $client->execute($request);
if ($debug)
{
echo json_encode($response->result, JSON_PRETTY_PRINT);
}
return $response;
}
private static function buildRequestBody()
{
return array(
'intent' => 'CAPTURE',
'application_context' =>
array(
'return_url' => 'https://example.com/return',
'cancel_url' => 'https://example.com/cancel'
),
'purchase_units' =>
array(
0 =>
array(
'amount' =>
array(
'currency_code' => 'USD',
'value' => '2.00'
)
)
)
);
}
}
if (!count(debug_backtrace()))
{
CreateOrder::createOrder(true);
}
?>
至此,交易已启动,数据位于 createorder.php
页面的 purchase_units
数组中。我的问题是如何将这些值从 checkoutpage.php
发送到 createorder.php
页面,同时维护服务器端 PHP 实施?而不是像这样设置 100% 客户端:
createOrder: function(data, actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: '88.44'
}
}]
});
},
原因是价格、商品数量、运费等值可以在结帐页面中使用 JS 动态更改,而在其他情况下使用静态 DB 值。
提前致谢
我终于找到了解决方案:
客户端:
createOrder: function(data, actions) {
return fetch('createorder.php', {
method: 'post',
headers: {
'content-type': 'application/json',
},
body: JSON.stringify({
"intent": "CAPTURE",
"purchase_units": [
{
"amount": {
"currency_code": "USD",
"value": "100.00"
}
}
]
})
}).then(function(res) {
return res.json();
}).then(function(orderData) {
// console.log(orderData);
return orderData.id;
});
},
和服务器端PHP:
<?php
namespace Sample\CaptureIntentExamples;
require __DIR__ . '/route/to/paypal/autoload.php';
use Sample\PayPalClient;
use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
class CreateOrder
{
public static function createOrder($debug=false)
{
$request = new OrdersCreateRequest();
$request->prefer('return=representation');
$request->body = file_get_contents('php://input');
$client = PayPalClient::client();
$response = $client->execute($request);
if ($debug)
{
echo json_encode($response->result, JSON_PRETTY_PRINT);
}
return $response;
}
}
if (!count(debug_backtrace()))
{
CreateOrder::createOrder(true);
}
?>