如何解决PayPal 结账智能支付按钮——PHP 服务器端调用
我正在尝试将 paypal checkout API 集成到我的网站。当我使用(第 1 部分)时,付款工作正常。当我尝试使用服务器端调用(第 2 部分、第 3 部分、第 4 部分)时,它不起作用。
感谢任何帮助。
第 1 部分(工作 - 所有客户端)
<script src="https://www.paypal.com/sdk/js?client-id=sb"></script>
<div id="paypal-button-container"></div>
<!-- Add the checkout buttons,set up the order and approve the order -->
<script>
paypal.Buttons({
createOrder: function(data,actions) {
return actions.order.create({
purchase_units: [{
amount: {
value: '10'
}
}]
});
},onApprove: function(data,actions) {
return actions.order.capture().then(function(details) {
alert('Transaction completed by ' + details.payer.name.given_name);
});
}
}).render('#paypal-button-container'); // Display payment options on your web page
</script>
我希望服务器端调用 API,而不是客户端调用 Javascript。我正在尝试使用 PayPal Server-Side SDK,但文档不清楚如何配置它。
客户端。
第 2 部分
修改客户端代码。 更改客户端上的 createOrder 函数。此函数现在调用您的服务器来创建订单,而不是 actions.order.create()。
createOrder: function() {
return fetch('/my-server/create-paypal-transaction',{
method: 'post',headers: {
'content-type': 'application/json'
}
}).then(function(res) {
return res.json();
}).then(function(data) {
return data.id; // Use the key sent by your server's response,ex. 'id' or 'token'
});
}
服务器端 (PHP)
第 3 部分
namespace Sample;
use PayPalCheckoutSdk\Core\PayPalHttpClient;
use PayPalCheckoutSdk\Core\SandboxEnvironment;
ini_set('error_reporting',E_ALL); // or error_reporting(E_ALL);
ini_set('display_errors','1');
ini_set('display_startup_errors','1');
class PayPalClient
{
/**
* Returns PayPal HTTP client instance with environment that has access
* credentials context. Use this instance to invoke PayPal APIs,provided the
* credentials have access.
*/
public static function client()
{
return new PayPalHttpClient(self::environment());
}
/**
* Set up and return PayPal PHP SDK environment with PayPal access credentials.
* This sample uses SandboxEnvironment. In production,use LiveEnvironment.
*/
public static function environment()
{
$clientId = getenv("CLIENT_ID") ?: "PAYPAL-SANDBOX-CLIENT-ID";
$clientSecret = getenv("CLIENT_SECRET") ?: "PAYPAL-SANDBOX-CLIENT-SECRET";
return new SandboxEnvironment($clientId,$clientSecret);
}
}
第 4 部分
namespace Sample\CaptureIntentExamples;
require __DIR__ . '/vendor/autoload.php';
//1. Import the PayPal SDK client that was created in `Set up Server-Side SDK`.
use Sample\PayPalClient;
use PayPalCheckoutSdk\Orders\OrdersCreateRequest;
class CreateOrder
{
// 2. Set up your server to receive a call from the client
/**
*This is the sample function to create an order. It uses the
*JSON body returned by buildRequestBody() to create an order.
*/
public static function createOrder($debug=false)
{
$request = new OrdersCreateRequest();
$request->prefer('return=representation');
$request->body = self::buildRequestBody();
// 3. Call PayPal to set up a transaction
$client = PayPalClient::client();
$response = $client->execute($request);
if ($debug)
{
print "Status Code: {$response->statusCode}\n";
print "Status: {$response->result->status}\n";
print "Order ID: {$response->result->id}\n";
print "Intent: {$response->result->intent}\n";
print "Links:\n";
foreach($response->result->links as $link)
{
print "\t{$link->rel}: {$link->href}\tCall Type: {$link->method}\n";
}
// To print the whole response body,uncomment the following line
// echo json_encode($response->result,JSON_PRETTY_PRINT);
}
// 4. Return a successful response to the client.
return $response;
}
/**
* Setting up the JSON request body for creating the order with minimum request body. The intent in the
* request body should be "AUTHORIZE" for authorize intent flow.
*
*/
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' => '220.00'
)
)
)
);
}
}
/**
*This is the driver function that invokes the createOrder function to create
*a sample order.
*/
if (!count(debug_backtrace()))
{
CreateOrder::createOrder(true);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。