#laravel #paypal
#laravel #paypal
Вопрос:
Я использую фреймворк Laravel 8 для PHP и пытаюсь интегрировать paypal в свой локальный веб. Однако я застрял на «create_order_error», хотя я строго следовал некоторым фрагментам примеров, предоставленным paypal, я все еще сталкиваюсь с этим профессионалом
Ссылки:
- https://developer.paypal.com/demo/checkout/#/pattern/server
- https://github.com/paypal/Checkout-PHP-SDK#code
- https://developer.paypal.com/docs/checkout/reference/server-integration/
Ошибка: SyntaxError: Unexpected token < in JSON at positio…1kLoyti46gxJY-Rl1PH23n49yWhfamp;currency=PHP:2:79380"
Код:
<script>
// Render the PayPal button into #paypal-button-container
paypal.Buttons({
style: {
shape: 'pill',
layout: 'horizontal',
color: 'blue',
height: 35
},
// Call your server to set up the transaction
createOrder: function(data, actions) {
return fetch('/billing/createOrder', {
method: 'post',
headers: {
'content-type': 'application/json'
}
}).then(function(res) {
return res.json();
}).then(function(orderData) {
return orderData.id;
});
},
}).render('#paypal-button-container');
</script>
Примечание: я удалил функцию onApprove, так как я застрял в CreateOrder
Контроллер
<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use PayPalCheckoutSdkCorePayPalHttpClient;
use PayPalCheckoutSdkCoreSandboxEnvironment;
use PayPalCheckoutSdkOrdersOrdersCreateRequest;
use PayPalCheckoutSdkOrdersOrdersCaptureRequest;
use PayPalHttpHttpException;
class PaypalCheckoutController extends Controller
{
private $environment;
private $client;
public function __construct()
{
$this->environment = new SandboxEnvironment(config('paypal.client_id'), config('paypal.secret'));
$this->client = new PayPalHttpClient($this->environment);
}
public function index(Request $request)
{
return view('payment.checkout');
}
public function createOrder(Request $request)
{
$order = new OrdersCreateRequest();
$order->prefer('return=representation');
$order->body = array(
'intent' => 'CAPTURE',
'application_context' =>
array(
'return_url' => 'http://dummyweb.test/billing/checkout',
'cancel_url' => 'http://dummyweb.test/billing/checkout'
),
'purchase_units' =>
array(
0 =>
array(
'amount' =>
array(
'currency_code' => 'PHP',
'value' => '420.00'
)
)
)
);
try {
$result = $this->client->execute($order);
return $result;
}
catch(HttpException $ex) {
print_r($ex->getMessage());
}
}
}
Ответ №1:
Ошибка синтаксиса: неожиданный токен < в JSON в positio…
Вы возвращаете вещи, отличные от JSON, когда браузер вызывает / billing / CreateOrder . Вы должны возвращать только JSON.
Используйте вкладку Сеть в инструментах разработчика вашего браузера или загрузите путь в новой вкладке, чтобы просмотреть тело ответа того, что вы фактически возвращаете.
Это явно будет что-то другое, чем JSON. На основе этого сообщения об ошибке оно будет начинаться с некоторого HTML ( <
символа)
Возвращайте только JSON. Вы должны иметь возможность скопировать все тело ответа в средство проверки JSON, и все будет в порядке.
Комментарии:
1. Это означает, что я должен обернуть свой возврат в json на стороне сервера, верно?
2. К сожалению, когда я смотрю на «Сетевую вкладку», я не получаю ответа. Открывшееся новое окно для paypal немедленно закроется.
3. Проблема не в окне PayPal. Добавьте точку останова в свой код, где вы пытаетесь проанализировать свой не-JSON как JSON.
Ответ №2:
попробуйте
return response()->json($result);
и в запросе на выборку добавьте заголовок
Accept: 'application/json'