Я могу успешно зарядить, используя 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']);
но все, что я получаю, это:
Неустранимая ошибка: невозможно получить доступ к защищенному свойству
Возможно, это даже не правильный способ попробовать что-то подобное, поэтому я полностью открыт для предложений.
Мне удалось выяснить, что нужно использовать метод getTransaction, который включен в объект, чтобы получить удобную форму свойств.
$transaction = $result->getTransaction();
Тогда вы можете просто получить свойства, которые вы хотите:
$transactionID = $transaction["tenders"][0]["transaction_id"];
Я довольно раздражен тем, что нигде не встречал этого в документации (на самом деле поиск в Google по всему docs.connect.squareup.com не приводит ни одной ссылки на getTransaction). Мне пришлось наткнуться на него, когда я пытался преобразовать исходный объект ChargeResponse в массив, используя другую хакерскую работу.
В любом случае, рад, что это решено. Хотел оставить это здесь для других.
Это будет работать
$transaction_id = $result->getTransaction()->getId();
Я пришел сюда с той же проблемой, а затем у меня был момент ага.
Вместо того, чтобы указать на несколько вызовов функций, вот как найти их все.
Просто посмотрите на квадратные файлы библиотеки, которые вы реализовали в своем решении.
В этом случае «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'