Данные Wordpress / Woocommerce, отправленные в базу данных Firebase - PullRequest
0 голосов
/ 21 марта 2020

У нас есть приложение, построенное на Firebase, и наши клиенты покупают подписку на наше приложение через наш веб-сайт.

В идеале мы хотели бы, чтобы после размещения заказа отправили следующее:

ID - primary key. This is generated using the order number from WooCommerce
card_number - string. This is the order number prefixed with #VIP (e.g #VIP12345). This is needed because of a legacy setup when we first launched. Hopefully it'll be phased out soon.
forename - string
surname - string
user_id - always an empty string. This is completed when the user first signs in.
email - string
expiry - int. The cards expiry date formatted as an epoch
business_reward_admin - always the string 'FALSE'
business_reward_user - always the string 'FALSE'
business_reward_id - always an empty string

Есть ли у кого-нибудь опыт с этим типом интеграции?

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

В основном просто нужны идентификатор_порядка, имя_первого, фамилия, адрес электронной почты и дата_порядка + 365 дней для истечения срока действия - для отправки в базу данных после завершения заказа / страницы благодарности.

Спасибо , Кайл

РЕДАКТИРОВАТЬ:

Я хотел бы сделать что-то вроде этого - но раньше не писал CURL - поэтому извиняюсь, если совершенно не прав.

<?php

add_action('woocommerce_payment_complete', 'bnd_firebase_realtime_put', 10, 1);

function bnd_firebase_realtime_put ($order_id) {

    $order = new WC_Order( $order_id );

// Loop through cart items
    foreach( $order->get_items() as $item ){
        // Get the Product ID
        $order_id = trim( str_replace( '#', '', $order->get_id() ) );
        // Get Users First Name
        $firstname = $order->get_billing_first_name();
        // Get Users Last Name
        $lastname = $order->get_billing_last_name();
        // Get Users Email Address
        $email = $order->billing_email;
        //Epoch Time  + 365 days in Epoch time
        $expiry = time() + 31556926;
        //Get Product ID Number
        $product_id = $item->get_product_id();
        //Get Firebase Project ID number from Product Meta
        $project_id = get_post_meta($product_id,'project_id', true);
        //Get Firebase Access Token from Product Meta
        $access_token = get_post_meta($product_id,'access_token', true);


        curl -X PUT -d '{ "ID" : "'. $order_id . '", "card_number" : "#VIP'. $order_id . '" , "forename" : "' . $firstname .'" , "lastname" : "'. $lastname .'" , "email" : "' . $email . '" , "expiry" : "' . $expiry .'" }' \ 'https://'. $project_id .'.firebaseio.com/users.json?access_token=' . $access_token .'
    }
}

?>

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Вы были правы, упомянув эту документацию: https://firebase-wordpress-docs.readthedocs.io/en/latest/save-data-realtime-firestore.html

В этом плагине есть Restful API.

curl --location --request POST 'http:/your-clouds-path.net/api-database/v1/createDoc' \
--header 'api-token: the-api-token' \
--header 'Content-Type: application/json' \
--header 'source: dashboard' \
--data-raw '{
    "dbType": "firestore",
    "collection": "ordersCollection",
    "docId": "your-order-id",
    "data": {
        "ID": "111",
        "card_number": "abc",
        "forename": "First Name"
    }
}'

Это поможет вам сохранить ваш заказ под именем "ordersCollection" в Firestore.

0 голосов
/ 21 марта 2020

Вы можете использовать Woocommerce webhooks , чтобы вызвать HTTPS Cloud Function .

Вы можете написать свою облачную функцию таким образом, чтобы она получала POST HTTP-запросы и вы передаете нужные данные в теле запроса.

Затем в облачной функции вы используете Admin SDK для записи в нужную базу данных Firebase ( Cloud Firestore или База данных в реальном времени ).

Что-то из следующих строк должно помочь (не проверено):

const functions = require('firebase-functions');
const admin = require('firebase-admin');

exports.wooWebhook = functions.https.onRequest((req, res) => {

  if (req.method !== 'POST') {
    console.error('Request method not allowed.');
    res.status(405).send('Method Not Allowed');
  } else {

    const wooData = req.body.data;

    return admin.firestore().collection('wooOrders').add(wooData)
    .then(docRef => {
       res.status(200).send({result: 'ok'});
    })
    .catch(err => {
       res.status(500).send({error: err});
    });
  }

});

Подробнее о том, как начать работу с облачными функциями на https://firebase.google.com/docs/functions/get-started, а также просмотрев серию видео по номеру https://firebase.google.com/docs/functions/video-series (настоятельно рекомендуется).

...