WooCommerce запускает функцию, когда заказ завершен, однако вызываемый в нем скрипт Python не выполняется - PullRequest
0 голосов
/ 22 сентября 2019

Я новичок в Wordpress / Woocommerce и пытаюсь запустить скрипт на Python, когда заказ будет выполнен.Я создал следующий плагин:

<?php

    /**
     * Plugin Name: Run Python Script on Order Completion
     * Plugin URI: http://www.mindspan.net
     * Description: Fires a Python script which queries the database
     * Version: 1.0
     * Author: Ray Richards
     * Author URI: http://www.mindspan.net
     */

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL);

    function  logIt( $order_id ) {
        error_log( "Order complete for order $order_id", 0 );
        $command = escapeshellcmd('/var/www/html/wp-content/plugins/mindspan/getValues.py');
        shell_exec($command);
    }
    add_action( 'woocommerce_order_status_completed', 'logIt', 10, 1 );

    ?>

Когда заказ завершен, функция определенно выполняется, когда я получаю, например, «Заказ завершен для заказа 8679» в журнале ошибок PHP - без других ошибокуказывается;однако скрипт Python, указанный в функции, не запускается.Вот сценарий Python:

#!/usr/bin/env python
import mysql.connector

textFile = open("testing.txt", "w+")
mydb = mysql.connector.connect(
  host="myHost",
  user="myUser",
  passwd="myPassword",
  database="myDatabase"
)

mycursor = mydb.cursor()

mycursor.execute("SELECT guid  FROM wpv2_posts WHERE post_type = 'shop_order' AND post_status = 'wc-completed' ORDER BY id DESC LIMIT 10")

myresult = mycursor.fetchall()

for result, in myresult:
   print(result)
   textFile.write("%s \n" % result)
textFile.close()

Папка и файлы принадлежат пользователю www-data (я нахожусь на Debian Stretch, размещенном на облачной платформе Google) и когда я выполняю su для этого пользователя и выполняю функцию изкомандная строка (комментируя часть add_action):

sudo su www-data -s /bin/sh
php -r "require 'myFile.php'; logIt(8679);"

Сценарий Python выполняется и создается файл с результатами.

Я также попробовал system () и passthru () и поместил еще один журнал ошибок ПОСЛЕ двух строк, вызывающих скрипт Python, и он также выводит это сообщение в журнал.Когда я создаю еще один файл test.php со следующим содержимым:

<?php
//$command = escapeshellcmd('/var/www/html/wp-content/plugins/mindspan/getValues.py');
//shell_exec($command);

passthru('/usr/bin/python /var/www/html/wp-content/plugins/mindspan/getValues.py 1 2>&1');
?>

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

Поэтому я хотел бы понять, что мешает запускать скрипт Python при его вызове из WooCommerce PHP.Любые предложения будут искренне оценены!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...