#php #arrays #json #object
#php #массивы #json #объект
Вопрос:
У меня есть $response
переменная, которая извлекает ответ из вызова Square API. var_dump($response)
предоставляет следующий вывод:
object(SquareHttpApiResponse)#26 (8) {
["request":"SquareHttpApiResponse":private]=>
object(SquareHttpHttpRequest)#15 (4) {
["httpMethod":"SquareHttpHttpRequest":private]=>
string(4) "Post"
["headers":"SquareHttpHttpRequest":private]=>
array(5) {
["user-agent"]=>
string(29) "Square-PHP-SDK/6.1.0.20200722"
["Accept"]=>
string(16) "application/json"
["content-type"]=>
string(16) "application/json"
["Square-Version"]=>
string(10) "2020-07-22"
["Authorization"]=>
string(71) "Bearer EAAAEKqGJAcxq33I1vRGDoSdHuOjM1e0mD_yuMQwFpHnyPpuH-vqy3FCQSojC6Cv"
}
["queryUrl":"SquareHttpHttpRequest":private]=>
string(47) "https://connect.squareupsandbox.com/v2/payments"
["parameters":"SquareHttpHttpRequest":private]=>
NULL
}
["statusCode":"SquareHttpApiResponse":private]=>
int(200)
["reasonPhrase":"SquareHttpApiResponse":private]=>
NULL
["headers":"SquareHttpApiResponse":private]=>
array(13) {
[0]=>
string(15) "HTTP/1.1 200 OK"
["Date"]=>
string(29) "Sun, 30 Aug 2020 19:36:47 GMT"
["Frame-Options"]=>
string(4) "DENY"
["X-Frame-Options"]=>
string(4) "DENY"
["X-Content-Type-Options"]=>
string(7) "nosniff"
["X-Xss-Protection"]=>
string(13) "1; mode=block"
["Content-Type"]=>
string(16) "application/json"
["Square-Version"]=>
string(10) "2020-07-22"
["Squareup--Connect--V2--Common--Versionmetadata-Bin"]=>
string(16) "CgoyMDIwLTA3LTIy"
["Vary"]=>
string(27) "Accept-Encoding, User-Agent"
["Content-Encoding"]=>
string(4) "gzip"
["Content-Length"]=>
string(3) "568"
["Strict-Transport-Security"]=>
string(45) "max-age=631152000; includeSubDomains; preload"
}
["result":"SquareHttpApiResponse":private]=>
object(SquareModelsCreatePaymentResponse)#28 (2) {
["errors":"SquareModelsCreatePaymentResponse":private]=>
NULL
["payment":"SquareModelsCreatePaymentResponse":private]=>
object(SquareModelsPayment)#30 (28) {
["id":"SquareModelsPayment":private]=>
string(29) "7PVOoMjV8mUoSaGWKrX1F8VDyHDZY"
["createdAt":"SquareModelsPayment":private]=>
string(24) "2020-08-30T19:36:47.584Z"
["updatedAt":"SquareModelsPayment":private]=>
string(24) "2020-08-30T19:36:47.771Z"
["amountMoney":"SquareModelsPayment":private]=>
object(SquareModelsMoney)#29 (2) {
["amount":"SquareModelsMoney":private]=>
int(100)
["currency":"SquareModelsMoney":private]=>
string(3) "USD"
}
["tipMoney":"SquareModelsPayment":private]=>
NULL
["totalMoney":"SquareModelsPayment":private]=>
object(SquareModelsMoney)#114 (2) {
["amount":"SquareModelsMoney":private]=>
int(100)
["currency":"SquareModelsMoney":private]=>
string(3) "USD"
}
["appFeeMoney":"SquareModelsPayment":private]=>
NULL
["processingFee":"SquareModelsPayment":private]=>
NULL
["refundedMoney":"SquareModelsPayment":private]=>
NULL
["status":"SquareModelsPayment":private]=>
string(9) "COMPLETED"
["delayDuration":"SquareModelsPayment":private]=>
string(6) "PT168H"
["delayAction":"SquareModelsPayment":private]=>
string(6) "CANCEL"
["delayedUntil":"SquareModelsPayment":private]=>
string(24) "2020-09-06T19:36:47.584Z"
["sourceType":"SquareModelsPayment":private]=>
string(4) "CARD"
["cardDetails":"SquareModelsPayment":private]=>
object(SquareModelsCardPaymentDetails)#92 (15) {
["status":"SquareModelsCardPaymentDetails":private]=>
string(8) "CAPTURED"
["card":"SquareModelsCardPaymentDetails":private]=>
object(SquareModelsCard)#37 (11) {
["id":"SquareModelsCard":private]=>
NULL
["cardBrand":"SquareModelsCard":private]=>
string(4) "VISA"
["last4":"SquareModelsCard":private]=>
string(4) "1111"
["expMonth":"SquareModelsCard":private]=>
int(12)
["expYear":"SquareModelsCard":private]=>
int(2021)
["cardholderName":"SquareModelsCard":private]=>
NULL
["billingAddress":"SquareModelsCard":private]=>
NULL
["fingerprint":"SquareModelsCard":private]=>
string(71) "sq-1-hkTPgBOAraVIsVGaBBcvVA8l9BNMGNv2Vz2BGjYytjR1YCLqMLS8S2MKrea0ZsrIdw"
["cardType":"SquareModelsCard":private]=>
string(6) "CREDIT"
["prepaidType":"SquareModelsCard":private]=>
NULL
["bin":"SquareModelsCard":private]=>
string(6) "411111"
}
["entryMethod":"SquareModelsCardPaymentDetails":private]=>
string(5) "KEYED"
["cvvStatus":"SquareModelsCardPaymentDetails":private]=>
string(12) "CVV_ACCEPTED"
["avsStatus":"SquareModelsCardPaymentDetails":private]=>
string(12) "AVS_ACCEPTED"
["authResultCode":"SquareModelsCardPaymentDetails":private]=>
NULL
["applicationIdentifier":"SquareModelsCardPaymentDetails":private]=>
NULL
["applicationName":"SquareModelsCardPaymentDetails":private]=>
NULL
["applicationCryptogram":"SquareModelsCardPaymentDetails":private]=>
NULL
["verificationMethod":"SquareModelsCardPaymentDetails":private]=>
NULL
["verificationResults":"SquareModelsCardPaymentDetails":private]=>
NULL
["statementDescription":"SquareModelsCardPaymentDetails":private]=>
string(24) "SQ *DEFAULT TEST ACCOUNT"
["deviceDetails":"SquareModelsCardPaymentDetails":private]=>
NULL
["refundRequiresCardPresence":"SquareModelsCardPaymentDetails":private]=>
NULL
["errors":"SquareModelsCardPaymentDetails":private]=>
NULL
}
["locationId":"SquareModelsPayment":private]=>
string(13) "LH0MT7DEW5C1P"
["orderId":"SquareModelsPayment":private]=>
string(27) "bJshmQ0AozoB1zVEH4iif0XpuaB"
["referenceId":"SquareModelsPayment":private]=>
NULL
["customerId":"SquareModelsPayment":private]=>
NULL
["employeeId":"SquareModelsPayment":private]=>
NULL
["refundIds":"SquareModelsPayment":private]=>
NULL
["buyerEmailAddress":"SquareModelsPayment":private]=>
NULL
["billingAddress":"SquareModelsPayment":private]=>
NULL
["shippingAddress":"SquareModelsPayment":private]=>
NULL
["note":"SquareModelsPayment":private]=>
NULL
["statementDescriptionIdentifier":"SquareModelsPayment":private]=>
NULL
["receiptNumber":"SquareModelsPayment":private]=>
string(4) "7PVO"
["receiptUrl":"SquareModelsPayment":private]=>
string(73) "https://squareupsandbox.com/receipt/preview/7PVOoMjV8mUoSaGWKrX1F8VDyHDZY"
}
}
["body":"SquareHttpApiResponse":private]=>
string(944) "{"payment": {"id": "7PVOoMjV8mUoSaGWKrX1F8VDyHDZY","created_at": "2020-08-30T19:36:47.584Z","updated_at": "2020-08-30T19:36:47.771Z","amount_money": {"amount": 100,"currency": "USD"},"status": "COMPLETED","delay_duration": "PT168H","source_type": "CARD","card_details": {"status": "CAPTURED","card": {"card_brand": "VISA","last_4": "1111","exp_month": 12,"exp_year": 2021,"fingerprint": "sq-1-hkTPgBOAraVIsVGaBBcvVA8l9BNMGNv2Vz2BGjYytjR1YCLqMLS8S2MKrea0ZsrIdw","card_type": "CREDIT","bin": "411111"},"entry_method": "KEYED","cvv_status": "CVV_ACCEPTED","avs_status": "AVS_ACCEPTED","statement_description": "SQ *DEFAULT TEST ACCOUNT"},"location_id": "LH0MT7DEW5C1P","order_id": "bJshmQ0AozoB1zVEH4iif0XpuaB","total_money": {"amount": 100,"currency": "USD"},"receipt_number": "7PVO","receipt_url": "https://squareupsandbox.com/receipt/preview/7PVOoMjV8mUoSaGWKrX1F8VDyHDZY","delay_action": "CANCEL","delayed_until": "2020-09-06T19:36:47.584Z"}}
"
["errors":"SquareHttpApiResponse":private]=>
array(0) {
}
["cursor":"SquareHttpApiResponse":private]=>
NULL
}
Однако меня интересует только одна строка в этом объекте:
object(SquareModelsCreatePaymentResponse)#28 (2) {
["errors":"SquareModelsCreatePaymentResponse":private]=>
NULL
["payment":"SquareModelsCreatePaymentResponse":private]=>
object(SquareModelsPayment)#30 (28) {
["id":"SquareModelsPayment":private]=>
string(29) "7PVOoMjV8mUoSaGWKrX1F8VDyHDZY"
У меня нет большого опыта работы с objects amp; JSON, и все чтение и исследования, которые я проводил, не касаются ничего подобного, поэтому я обращаюсь к экспертам здесь. Как мне извлечь id
строку из всего этого ответа?
Редактировать:
Согласно комментариям и ответам, вот ссылка на документацию:
https://developer.squareup.com/reference/square/payments-api/create-payment
и раздел кода, с которым я работаю:
// Initialize the Square client.
$client = new SquareSquareClient([
'accessToken' => $access_token,
'environment' => getenv('ENVIRONMENT')
]);
$payments_api = $client->getPaymentsApi();
$create_payment_request = new CreatePaymentRequest($nonce, uniqid(), $money);
// The SDK throws an exception if a Connect endpoint responds with anything besides
// a 200-level HTTP code. This block catches any exceptions that occur from the request.
try {
$response = $payments_api->createPayment($create_payment_request);
// If there was an error with the request we will
// print them to the browser screen here
if ($response->isError()) {
echo 'Api response has Errors';
$errors = $response->getErrors();
echo '<ul>';
foreach ($errors as $error) {
echo '<li>❌ ' . $error->getDetail() . '</li>';
}
echo '</ul>';
exit();
}
echo '<pre>';
$resp_arr = (array)json_decode($response, true);
var_dump($response);
var_dump($resp_arr);
echo '<br>';
echo 'Payment ID:';
echo $response->result->errors->payment->id;
echo '</pre>';
} catch (SquareExceptionsApiException $e) {
echo 'Caught exception!<br/>';
echo('<strong>Response body:</strong><br/>');
echo '<pre>'; var_dump($e->getResponseBody()); echo '</pre>';
echo '<br/><strong>Context:</strong><br/>';
echo '<pre>'; var_dump($e->getContext()); echo '</pre>';
exit();
}
Заранее спасибо за вашу помощь!
Z
Комментарии:
1. Должен быть метод для извлечения того, что вам нужно, например
getPayments()
или что-то в этом роде. Проверьте документы.
Ответ №1:
Получил помощь от square dev forum. Я смог использовать getBody()
вызов для извлечения ответа json и декодирования его в массив:
$resp_arr = $response->getBody() ;
$resp_dec = json_decode($resp_arr, true) ;
$pmtid = $resp_dec["payment"] ["id"] ;
Ответ №2:
Вы уже пробовали это?
echo $response->result->errors->payment->id;
Кроме того, если вы более знакомы с работой с массивом вместо объекта, вы можете использовать true
аргумент для json_decode()
подобного:
$response = (array)json_decode($response, true);
Таким образом, вы получите массив вместо объекта
Редактировать
Не заметил, что они были частными. С частными свойствами объекта у вас все еще есть несколько способов получить его.
-
Используйте класс, упомянутый в документах, чтобы получить свойство
-
Вы можете попробовать приведение массива, а затем поиск в массиве.
Код:
class Visibility {
public $public = 'public';
protected $protected = 'protected';
private $private = 'private';
}
var_dump((array) new Visibility());
Комментарии:
1. Они все
private
.