Woocommerce 调用网址(完成订单后)

2023-12-09

我有 3 个问题(需要帮助):

  1. 我不知道,如何运行这个插件(给我致命错误)请检查我的脚本(我是初学者)
  2. 需要管理页面帮助来设置 APIkey 并选择调用 URL 的语言http://xxx.CZ or http://xxx.SK(此页面尚未编写脚本)
  3. 如何将我的插件管理页面添加到 woocommerce 管理页面?

该插件适用于 Woocommerce。它应该调用特定的URL(http://heureka.cz/or .sk/dotaznik/"Clients API set up in admin page in woocommerce"/"Customers email"/"Order ID"/"bought Products ID"/)当客户订单完成时。

我是 PHP 和 Wordpress 的初学者。谢谢大家对我的帮助。

CODE:

<?php
/*
Plugin Name: Overené zákazníkmi Heureka
Plugin URI: http://www.podujatie.eu
Version: 0.1
Description: 
Author: Podujatie.eu, Ing. Igor Kóňa
Tested up to: 3.6
Author URI: http://www.podujatie.eu
Text Domain: woocommerce-new-badge
License: GNU General Public License v3.0
License URI: http://www.gnu.org/licenses/gpl-3.0.html
*/
/**
 * Check if WooCommerce is active
 **/
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {

    if ( ! class_exists( 'WC_HO' ) ) {

        class WC_HO {

        function heurekaovereno( $order_id ) {     
        error_log( "Order complete for order $order_id", 0 ); } 
        add_action( 'woocommerce_order_status_completed', 'heurekaovereno' );

    // order object (optional but handy)
    $order = new WC_Order( $order_id );

    // do some stuff here
        private function sendRequest($url)
        {
        $parsed = parse_url($url);
        $fp = fsockopen($parsed['host'], 80, $errno, $errstr, 5);
        if (!$fp) {
            throw new HeurekaOverenoException($errstr . ' (' . $errno . ')');
            } else {
            $return = '';
            $out = "GET " . $parsed['path'] . "?" . $parsed['query'] . " HTTP/1.1\r\n" .
                    "Host: " . $parsed['host'] . "\r\n" .
                    "Connection: Close\r\n\r\n";
            fputs($fp, $out);
            while (!feof($fp)) {
                $return .= fgets($fp, 128);
            }
            fclose($fp);
            $returnParsed = explode("\r\n\r\n", $return);

            return empty($returnParsed[1]) ? '' : trim($returnParsed[1]);
            }
        }
        /**
     * Sends request to Heureka Overeno service and checks for valid response
     * 
     * @return boolean true
     */
    public function send()
        {
        if (empty($this->email)) {
            throw new HeurekaOverenoException('Customer email address not set');
        }

        // create URL
        $url = $this->getUrl() . '?id=' . $this->apiKey . '&email=' . urlencode($this->email);
        foreach ($this->products as $product) {
            $url .= '&produkt[]=' . urlencode($product);
            }
        foreach ($this->productsItemId as $itemId) {
            $url .= '&itemId[]=' . urlencode($itemId);
            }

        // add order ID
        if (isset($this->orderId)) {
            $url .= '&orderid=' . urlencode($this->orderId);
            }

        // send request and check for valid response
        $contents = $this->sendRequest($url);
        if ($contents == FALSE) {
            throw new HeurekaOverenoException('Unable to create HTTP request to Heureka Overeno service');
            } elseif ($contents == self::RESPONSE_OK) {
            return TRUE;
            } else {
            throw new HeurekaOverenoException($contents);
            }
        }
        /**
     * Adds ordered products using item ID
     *
     * @param string $itemId Ordered product item ID
     */
    public function addProductItemId($itemId)
    {
        $this->productsItemId[] = $itemId;
    }
        /**
     * Adds ordered products using name
     * 
     * Products names should be provided in UTF-8 encoding. The service can handle
     * WINDOWS-1250 and ISO-8859-2 if necessary
     *
     * @param string $productName Ordered product name
     */
    public function addProduct($productName)
    {
        $this->products[] = $productName;
    }
        /**
     * Heureka endpoint URL
     *
     * @var string     
     */
    const BASE_URL = 'http://www.heureka.cz/direct/dotaznik/objednavka.php';
    const BASE_URL_SK = 'http://www.heureka.sk/direct/dotaznik/objednavka.php';

    /**
     * Language IDs
     *
     * @var int     
     */
    const LANGUAGE_CZ = 1;
    const LANGUAGE_SK = 2;
    /**
     * Valid response value
     *
     * @var string     
     */
    const RESPONSE_OK = 'ok';

    /**
     * Shop API key
     *
     * @var string     
     */
    private $apiKey;

    /**
     * Customer email
     *
     * @var string     
     */
    private $email;

    /**
     * Ordered products
     *
     * @var array     
     */
    private $products = array();

    /**
     * Order ID
     *
     * @var int    
     */
    private $orderId;

    /**
     * Current language identifier
     *
     * @var int     
     */
    private $languageId = 1;

    /**
     * Ordered products provided using item ID
     * 
     * @var array
     */
    private $productsItemId = array();

    /**
     * Initialize Heureka Overeno service 
     *
     * @param string $apiKey Shop API key
     * @param int $languageId Language version settings
     */
    public function __construct($apiKey, $languageId = self::LANGUAGE_CZ)
    {
        $this->setApiKey($apiKey);
        $this->languageId = $languageId;
    }

    /**
     * Sets API key and check well-formedness
     * 
     * @param string $apiKey Shop api key
     */
    public function setApiKey($apiKey)
    {
        if (preg_match('(^[0-9abcdef]{32}$)', $apiKey)) {
            $this->apiKey = $apiKey;
        } else {
            throw new OverflowException('Api key ' . $apiKey . ' is invalid.');
        }
    }

    /**
     * Sets customer email
     *
     * @param string $email Customer email address
     */
    public function setEmail($email)
    {
        $this->email = $email;
    }

    // Default options
    add_option( 'wc_nb_newness', '30' );


    // Admin
    add_action( 'woocommerce_settings_image_options_after', array( $this, 'admin_settings' ), 20);
    add_action( 'woocommerce_update_options_catalog', array( $this, 'save_admin_settings' ) );



            /*-----------------------------------------------------------------------------------*/
            /* Class Functions */
            /*-----------------------------------------------------------------------------------*/

            // Load the settings
            function admin_settings() {
                woocommerce_admin_fields( $this->settings );
            }


            // Save the settings
            function save_admin_settings() {
                woocommerce_update_options( $this->settings );
            }

        if (!isset($wpdb)) $wpdb = $GLOBALS['wpdb'];

        $heurekaovereno_ver = '1.00';

        $WC_HO = new WC_HO();
        }
    }
}
?>

这个脚本只有当你把它放在functions.php中时才有效(它有很少的错误,但它有效)这就是我要问的地方,为什么会这样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Woocommerce 调用网址(完成订单后) 的相关文章

随机推荐

  • 将非对称算法私钥和公钥与 RSA C# 一起使用

    我有两个包含 RSA 私钥和 RSA 公钥的 AsymmetryAlgorithm 对象 私钥是从 Windows MY 密钥库中检索的 公钥是从用户的证书中检索的 如何在 C 中将这些密钥与 RSACryptoServiceProvide
  • 画布内元素中的事件

    我在画布标签内绘制了图像 我如何向其中添加事件 我想在用户单击该图像时执行某些操作 character addEventListener click function alert foo true character is a var im
  • Android 日历提供程序 API 级别

    我们正在开发一个 Android 日历应用程序 问题是我们想要获取其他日历的事件并将我们的事件也分享给他们 据我所知 这是由内容提供商实现的 问题是日历内容提供程序所需的API级别是API 14 我们需要在API 7 Android 2 1
  • CGImageRef 宽度与每行字节数不一致

    我正在尝试从屏幕缓冲区中读取像素 我正在创建一个CGImageRef with CGDisplayCreateImage 但值CGImageGetWidth and CGImageGetBytesPerRow在一起没有意义 将每行字节数除以
  • 如何在sql server中将数字写入word函数[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如何在 SQL Server 中编写一个函数来以文字形式输出数字 input 1输出 1个 输入 129输出 一百二十九 考虑使用辅助数字表 注意 这个 MS SQL 创建一个序
  • Firebase:setPersistenceEnabled 和 keepSynced 之间有什么区别?

    我一直认为 当我使用以下内容时 所有聊天对话数据都可以随时离线使用 但不知何故不是 所有节点都是从服务器加载的 FirebaseDatabase getInstance setPersistenceEnabled true 然后 根据 DO
  • Swift 广播流媒体 AVPlayer

    我想在 Swift 中从互联网传输音频 但还没有找到正确的功能示例 In Objective C AVPlayerItem playerItem AVPlayerItem playerItemWithURL NSURL URLWithStr
  • 使用 PHP 和 CURL 发出 PUT 请求

    首先 我基于以下假设进行工作 根据 REST 架构 您可以使用 PUT 创建新资源 在我的例子中是一个包含用户提供的附加信息的文件 如果这个概念不正确 请告诉我 这样我就不会从架构的角度提出错误的问题 我发现有两件事与使用 CURL 的 P
  • Python 正则表达式模式 * 未按预期工作

    在工作过程中Google 2010 年 Python 课程 我找到了以下文档 左侧出现 0 次或多次模式 但是当我尝试以下操作时 re search r i biiiiiiiiiiiiiig group 我期望 iiiiiiiiiiiiii
  • jqueryui自动完成限制多项选择

    我正在使用 jQuery UI 自动完成 并试图限制多个结果 基本上 我正在构建一个 PM 系统 我正在使用 收件人 字段的自动完成功能 但我试图限制一条消息可以发送给的人数 因此 将最大选择限制为 25 有什么办法可以限制这个吗 还有关于
  • Android中如何保存RecyclerView的滚动位置?

    我有位于 SwipeRefreshLayout 内部的 Recycler 视图 此外 能够在另一个活动中打开每个项目 返回到 Recycler 后 我需要滚动到所选项目 或滚动到上一个 Y 怎么做 是的 我用谷歌搜索 在 StackOver
  • 如何使用 thymeleaf 序列化 POJO?

    我想在 a 中插入一个 POJO 普通的旧 java 对象 作为普通 Json
  • 使用 AVG() 进行 MySQL 查询时出现问题

    我正在使用一个查询 该查询取每个给定 id 的所有记录的平均值 query SELECT bline id AVG flow as flowavg FROM blf WHERE bline id BETWEEN 1 AND 30 GROUP
  • 将结构放入匿名名称空间有什么作用? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么使用未命名的命名空间以及它们有什么好处 查看某人的代码 这就是他们声明的内容 namespace struct myStruct int x int y obj1 在一个函数中我看到它是这样使用
  • 允许调度程序切换正在执行的线程的机制是什么?

    我知道CPU调度程序使用时间片并让一个线程运行指定的时间 然后切换线程 但我不明白的是CPU如何知道停止执行线程并切换任务 它不能在每条指令后重复检查时钟 对吗 这将花费大量的开销 这将是非常浪费的 我不认为它在线程上使用一些确定性计算来在
  • 使用 sockaddr_in 的值填充 sockaddr_storage 结构

    我有一个sockaddr storage对象 我需要用用户提供的值填充它 请注意 用户可以提供其中之一AF INET or AF INET6作为填充结构的域 void fill sockaddr storage addrStruct int
  • 可变参数宏中的参数计数无效

    我正在尝试创建一个宏 它将迭代定义的术语列表 并为每个术语调用另一个宏 可能还带有附加参数列表 这是我得到的 define ITERATE OVER TERMS MACRO MACRO Term1 VA ARGS MACRO Term2 V
  • 如何按

    from pywinauto import application app application Application start C Program Files Microsoft Office Office12 EXCEL exe
  • 删除 URL 中的 .PHP 文件扩展名

    我在强制删除 URL 中的 php 文件扩展名时遇到了一个小问题 如果用户执行以下操作 我可以成功删除 php 文件扩展名 Remove PHP if original request is foo bar php RewriteCond
  • Woocommerce 调用网址(完成订单后)

    我有 3 个问题 需要帮助 我不知道 如何运行这个插件 给我致命错误 请检查我的脚本 我是初学者 需要管理页面帮助来设置 APIkey 并选择调用 URL 的语言http xxx CZ or http xxx SK 此页面尚未编写脚本 如何