Парсинг данных передается в нескольких форматах ... как получить из него нужные мне данные - PullRequest
3 голосов
/ 19 сентября 2019

Thrivecart передает данные через веб-крючок.Вот некоторый пример кода, который он передает обратно, это ложные данные, но того же формата.

event=order.success&mode=test&mode_int=1&thrivecart_account=generic&thrivecart_secret=JLZE3Y54FEQ1&base_product=2&order_id=1514394&invoice_id=000000004&order_date=2019-03-06%2022%3A57%3A24&order_timestamp=1551913044&currency=USD&customer_id=6702306&customer_identifier=cus_EeRXonHQ7LQPBQ&customer%5Bid%5D=6702306&customer%5Bemail%5D=jsmith%40email.com&customer%5Baddress%5D%5Bcountry%5D=NZ&customer%5Baddress%5D%5Bstate%5D=Bay%20of%20Plenty&customer%5Baddress%5D%5Bline1%5D=1234%20Main%20Street&customer%5Baddress%5D%5Bcity%5D=Auckland&customer%5Baddress%5D%5Bzip%5D=3345&customer%5Bip_address%5D=255.255.255.255&customer%5Bname%5D=John%20Smith&customer%5Bcheckbox_confirmation%5D=false&customer%5Bfirst_name%5D=John&customer%5Blast_name%5D=Smith&order%5Btax%5D=null&order%5Btax_type%5D=null&order%5Bprocessor%5D=stripe&order%5Btotal%5D=10000&order%5Btotal_str%5D=100.00&order%5Bcharges%5D%5B0%5D%5Bname%5D=Webhook%20testing&order%5Bcharges%5D%5B0%5D%5Breference%5D=2&order%5Bcharges%5D%5B0%5D%5Bitem_type%5D=product&order%5Bcharges%5D%5B0%5D%5Bitem_identifier%5D=product_2&order%5Bcharges%5D%5B0%5D%5Bamount%5D=10000&order%5Bcharges%5D%5B0%5D%5Bamount_str%5D=100.00&order%5Bcharges%5D%5B0%5D%5Btype%5D=single&order%5Bcharges%5D%5B0%5D%5Bquantity%5D=1&order%5Bcharges%5D%5B0%5D%5Bpayment_plan_id%5D=17869&order%5Bcharges%5D%5B0%5D%5Bpayment_plan_name%5D=Subscription%20%28%24100.00%2Fmnth%29&order%5Bcharges%5D%5B1%5D%5Bname%5D=Webhook%20testing&order%5Bcharges%5D%5B1%5D%5Breference%5D=2&order%5Bcharges%5D%5B1%5D%5Bitem_type%5D=product&order%5Bcharges%5D%5B1%5D%5Bitem_identifier%5D=product_2&order%5Bcharges%5D%5B1%5D%5Bamount%5D=10000&order%5Bcharges%5D%5B1%5D%5Bamount_str%5D=100.00&order%5Bcharges%5D%5B1%5D%5Btype%5D=recurring&order%5Bcharges%5D%5B1%5D%5Bquantity%5D=1&order%5Bcharges%5D%5B1%5D%5Bfrequency%5D=month&order%5Bcharges%5D%5B1%5D%5Bpayment_plan_id%5D=17869&order%5Bcharges%5D%5B1%5D%5Bpayment_plan_name%5D=Subscription%20%28%24100.00%2Fmnth%29&order%5Bdate%5D=2019-03-06%2022%3A57%3A25&order%5Bdate_unix%5D=1551913045&transactions%5Bproduct-2%5D=ch_1EB8ftAB5gsRjJxz4wuVM65M&subscriptions%5Bproduct-2%5D=sub_EeRZvC1TxlYaT7&purchases%5B0%5D=Webhook%20testing&purchase_map%5B0%5D=product-2&purchase_map_flat=product-2&fulfillment%5Burl%5D=https%3A%2F%2Fgeneric.thrivecart.com%2Fwebhook-testing%2Fconfirm%2F%2F

Итак, я создал функцию синтаксического анализа, которая берет все данные в $ _REQUEST и анализирует их, так чтомогу найти эти данные.

Вот что мне выводит:

"event"="order.success"
"mode"="test"
"mode_int"="1"
"thrivecart_account"="generic"
"thrivecart_secret"="JLZE3Y54FEQ1"
"base_product"="2"
"order_id"="1514394"
"invoice_id"="000000004"
"order_date"="2019-03-06 22:57:24"
"order_timestamp"="1551913044"
"currency"="USD"
"customer_id"="6702306"
"customer_identifier"="cus_EeRXonHQ7LQPBQ"
"customer"="Array"
"order"="Array"
"transactions"="Array"
"subscriptions"="Array"
"purchases"="Array"
"purchase_map"="Array"
"purchase_map_flat"="product-2"
"fulfillment"="Array"

Мое поле, которое мне нужно, находится в части "customer", но это массив.

Я пробовал несколько способов и не могу получить эти данные.Похоже, это массив JSON.Поэтому я попробовал этот код, кто-то еще предложил кому-то еще, который работал для них, но он не работал для меня:

foreach ($_REQUEST as $key => $value) {
    if($key == "customer") {
        foreach($value->data as $mydata) {
            echo $mydata->name . "\n";
            foreach($mydata->values as $values) {
                echo $values->value . "\n";
            }
        }
    }
    echo '"' . $key . '"="' . $value . '"<br />' . "\n";
 }

Обновление, Попробовал предложенный в комментариях, он тоже не работал, попробовалэто так:

$json = $value;
$obj = json_decode($json);
echo "... found email='" .  $obj->{'email'} . '"';
parse_str($json, $get_array);
print_r($get_array);
parse_str($value, $get_array2);
print_r($get_array2);

Так что еще одна попытка не удалась.: (

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

Кто-нибудь знает, как его получить?

ОБНОВЛЕНИЕ: хорошо, НЕКОТОРЫЙ прогресс ...

this: var_dump значения данных "customer", которые являются массивом, показали мне это:

NULL array(8) { ["id"]=> string(7) "6702306" ["email"]=> string(16) "jsmith@email.com" ["address"]=> array(5) { ["country"]=> string(2) "NZ" ["state"]=> string(13) "Bay of Plenty" ["line1"]=> string(16) "1234 Main Street" ["city"]=> string(8) "Auckland" ["zip"]=> string(4) "3345" } ["ip_address"]=> string(15) "255.255.255.255" ["name"]=> string(10) "John Smith" ["checkbox_confirmation"]=> string(5) "false" ["first_name"]=> string(4) "John" ["last_name"]=> string(5) "Smith" } qstring: 'Array'

так что теперь, когда я знаю, что данные в "customer" могут быть сброшены таким образом, как мне извлечь из него значение "email"? Также это значение "ip_address"? "First_name""значение? в основном все поля, которые мне нужны?

Есть ли способ поместить это в некоторый тип хэша или что-то, где я мог бы назвать это так:

$fields{email} or $fields["email"]

В любом случае?

Прогресс ...

Еще одна находка ... в трехэтажной тележке они говорят это (здесь: https://support.thrivecart.com/help/using-webhook-notifications/) о том, как они передают данные:

We send the data through as POST variables as key/value pairs, and in these, we do have nested variables which create objects/arrays when decoded.

и

переданные данные: клиент: массив (имя, имя, фамилия, адрес электронной почты, адрес)

Есть идеи, как получить его с этими знаниями?

...