我使用以下API代码进行高级paypal集成:
<?php
// # Create Payment using PayPal as payment method
// This sample code demonstrates how you can process a
// PayPal Account based Payment.
// API used: /v1/payments/payment
require __DIR__ . '/bootstrap.php';
use PayPal\Api\Amount;
use PayPal\Api\Details;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\Payer;
use PayPal\Api\Payment;
use PayPal\Api\RedirectUrls;
use PayPal\Api\Transaction;
// ### Payer
// A resource representing a Payer that funds a payment
// For paypal account payments, set payment method
// to 'paypal'.
$payer = new Payer();
$payer->setPaymentMethod("paypal");
// ### Itemized information
// (Optional) Lets you specify item wise
// information
$item1 = new Item();
$item1->setName('Ground Coffee 40 oz')
->setCurrency('USD')
->setQuantity(1)
->setSku("123123") // Similar to `item_number` in Classic API
->setPrice(7.5);
$item2 = new Item();
$item2->setName('Granola bars')
->setCurrency('USD')
->setQuantity(5)
->setSku("321321") // Similar to `item_number` in Classic API
->setPrice(2);
$itemList = new ItemList();
$itemList->setItems(array($item1, $item2));
// ### Additional payment details
// Use this optional field to set additional
// payment information such as tax, shipping
// charges etc.
$details = new Details();
$details->setShipping(1.2)
->setTax(1.3)
->setSubtotal(17.50);
// ### Amount
// Lets you specify a payment amount.
// You can also specify additional details
// such as shipping, tax.
$amount = new Amount();
$amount->setCurrency("USD")
->setTotal(20)
->setDetails($details);
// ### Transaction
// A transaction defines the contract of a
// payment - what is the payment for and who
// is fulfilling it.
$transaction = new Transaction();
$transaction->setAmount($amount)
->setItemList($itemList)
->setDescription("Payment description")
->setInvoiceNumber(uniqid());
// ### Redirect urls
// Set the urls that the buyer must be redirected to after
// payment approval/ cancellation.
$baseUrl = getBaseUrl();
$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl("$baseUrl/ExecutePayment.php?success=true")
->setCancelUrl("$baseUrl/ExecutePayment.php?success=false");
// ### Payment
// A Payment Resource; create one using
// the above types and intent set to 'sale'
$payment = new Payment();
$payment->setIntent("sale")
->setPayer($payer)
->setRedirectUrls($redirectUrls)
->setTransactions(array($transaction));
// For Sample Purposes Only.
$request = clone $payment;
// ### Create Payment
// Create a payment by calling the 'create' method
// passing it a valid apiContext.
// (See bootstrap.php for more on `ApiContext`)
// The return object contains the state and the
// url to which the buyer must be redirected to
// for payment approval
try {
$payment->create($apiContext);
} catch (Exception $ex) {
exit(1);
}
// ### Get redirect url
// The API response provides the url that you must redirect
// the buyer to. Retrieve the url from the $payment->getApprovalLink()
// method
$approvalUrl = $payment->getApprovalLink();
return $payment;
我的checkout.js的html文件:
<html>
<head>
<script src="https://www.paypalobjects.com/api/checkout.js"></script>
<script>
paypal.Button.render({
env: 'sandbox',
payment: function(resolve, reject) {
var CREATE_PAYMENT_URL = '/paypal/CreatePaymentUsingPayPal.php';
return paypal.request.post(CREATE_PAYMENT_URL)
.then(function(data) { resolve(data.paymentID); })
.catch(function(err) { reject(err); });
},
onAuthorize: function(data) {
var EXECUTE_PAYMENT_URL = '/paypal/ExecutePayment.php';
return paypal.request.post(EXECUTE_PAYMENT_URL,
{ paymentID: data.paymentID, payerID: data.payerID })
.then(function(data) { /* Go to a success page */ })
.catch(function(err) { /* Go to an error page */ });
}
}, '#paypal-button-server');
</script>
</head>
<body>
<p>Paypal:</p>
<div id="paypal-button-server"></div>
</body>
</html>
当我尝试通过点击paypal按钮进行快速结账时,我得到:
错误:JSON解析错误:意外的EOF
如果我使用Paypal API,json会出现什么问题? (我的脚本基于Paypal API示例。)
$ apiContext和getBaseUrl()方法在bootstrap.php中定义。
日志:
04-2017 03:26:31] PayPal\Core\PayPalHttpConnection : INFO: Response Status : 201
[27-04-2017 03:26:31] PayPal\Core\PayPalHttpConnection : DEBUG: Response Headers : HTTP/1.1 201 Created, Date: Thu, 27 Apr 2017 15:26:31 GMT, Server: Apache, paypal-debug-id: a201c7bc10e43, Content-Language: *, Paypal-Debug-Id: a201c7bc10e43, Set-Cookie: X-PP-SILOVER=name%3DSANDBOX3.API.1%26silo_version%3D1880%26app%3Dplatformapiserv%26TIME%3D2802647641%26HTTP_X_PP_AZ_LOCATOR%3D; Expires=Thu, 27 Apr 2017 15:56:31 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: 967, Connection: close, Content-Type: application/json, ,
[27-04-2017 03:26:31] PayPal\Core\PayPalHttpConnection : DEBUG: Response Data : {"id":"PAY-1KU75701VG630150ALEBA3JY","intent":"sale","state":"created","payer":{"payment_method":"paypal"},"transactions":[{"amount":{"total":"20.00","currency":"USD","details":{"subtotal":"17.50","tax":"1.30","shipping":"1.20"}},"description":"Payment description","invoice_number":"59020da6c110b","item_list":{"items":[{"name":"Ground Coffee 40 oz","sku":"123123","price":"7.50","currency":"USD","quantity":1},{"name":"Granola bars","sku":"321321","price":"2.00","currency":"USD","quantity":5}]},"related_resources":[]}],"create_time":"2017-04-27T15:26:31Z","links":[{"href":"https://api.sandbox.paypal.com/v1/payments/payment/PAY-1KU75701VG630150ALEBA3JY","rel":"self","method":"GET"},{"href":"https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-8JM45688MM601683H","rel":"approval_url","method":"REDIRECT"},{"href":"https://api.sandbox.paypal.com/v1/payments/payment/PAY-1KU75701VG630150ALEBA3JY/execute","rel":"execute","method":"POST"}]}