Неполадки при работе с объектом Square Connect ChargeResponse

Я могу успешно зарядить, используя API транзакции, следуя примеру на github. Выполнение заряда выглядит так:

$result = $transaction_api->charge($access_token, $location_id, $request_body);
echo "<pre>";
print_r($result);
echo "</pre>";

Вот вывод:

SquareConnect\Model\ChargeResponse Object
(
[errors:protected] =>
[transaction:protected] => SquareConnect\Model\Transaction Object
(
[id:protected] => REMOVED FROM POST
[location_id:protected] => REMOVED FROM POST
[created_at:protected] => 2016-04-30T23:42:33Z
[tenders:protected] => Array
(
[0] => SquareConnect\Model\Tender Object
(
[id:protected] => REMOVED FROM POST
[location_id:protected] => REMOVED FROM POST
[transaction_id:protected] => 02d1d965-51fd-5023-68f5-0fcd148a263b
[created_at:protected] => 2016-04-30T23:42:33Z
[note:protected] => Online Transaction
[amount_money:protected] => SquareConnect\Model\Money Object
(
[amount:protected] => 6000
[currency:protected] => USD
)

[processing_fee_money:protected] =>
[customer_id:protected] =>
[type:protected] => CARD
[card_details:protected] => SquareConnect\Model\TenderCardDetails Object
(
[status:protected] => CAPTURED
[card:protected] => SquareConnect\Model\Card Object
(
[id:protected] =>
[card_brand:protected] => VISA
[last_4:protected] => 5858
[exp_month:protected] =>
[exp_year:protected] =>
[cardholder_name:protected] =>
[billing_address:protected] =>
)

[entry_method:protected] => KEYED
)

[cash_details:protected] =>
)

)

[refunds:protected] =>
[reference_id:protected] =>
[product:protected] => EXTERNAL_API
)

)

Моя проблема в том, что в то время как в некоторых местах (таких как Вот) указывают, что я должен получить массив из метода начисления, вместо этого я получаю объект ChargeResponse.

Внутри этого объекта находится объект транзакции, который содержит всю соответствующую информацию, которую я хочу отобразить клиенту после завершения транзакции, но он защищен, поэтому попытка отобразить идентификатор транзакции, время создания или сумму из этого возвращенного объекта не удалась ,

Я уверен, что делаю что-то не так, но я заблудился о том, как захватывать свойства из объекта ChargeResponse, чтобы я мог делать с ним полезные вещи.

Например, я пытался

echo($result->transaction['id']);

но все, что я получаю, это:

Неустранимая ошибка: невозможно получить доступ к защищенному свойству

Возможно, это даже не правильный способ попробовать что-то подобное, поэтому я полностью открыт для предложений.

3

Решение

Мне удалось выяснить, что нужно использовать метод getTransaction, который включен в объект, чтобы получить удобную форму свойств.

$transaction = $result->getTransaction();

Тогда вы можете просто получить свойства, которые вы хотите:

$transactionID = $transaction["tenders"][0]["transaction_id"];

Я довольно раздражен тем, что нигде не встречал этого в документации (на самом деле поиск в Google по всему docs.connect.squareup.com не приводит ни одной ссылки на getTransaction). Мне пришлось наткнуться на него, когда я пытался преобразовать исходный объект ChargeResponse в массив, используя другую хакерскую работу.

В любом случае, рад, что это решено. Хотел оставить это здесь для других.

8

Другие решения

Это будет работать

$transaction_id = $result->getTransaction()->getId();
1

Я пришел сюда с той же проблемой, а затем у меня был момент ага.

Вместо того, чтобы указать на несколько вызовов функций, вот как найти их все.

Просто посмотрите на квадратные файлы библиотеки, которые вы реализовали в своем решении.
В этом случае «Transaction.php» находится в папке «модель».

Промойте и повторите для всех других объектов (IE: Tenders.php).

Я надеюсь, что это экономит время для некоторых людей, потому что я потратил слишком много времени, прежде чем понять это.

'id' => 'getId',
'location_id' => 'getLocationId',
'created_at' => 'getCreatedAt',
'tenders' => 'getTenders',
'refunds' => 'getRefunds',
'reference_id' => 'getReferenceId',
'product' => 'getProduct',
'client_id' => 'getClientId',
'shipping_address' => 'getShippingAddress',
'order_id' => 'getOrderId'
0
По вопросам рекламы [email protected]