Jump to content
xbenjii

Webhooks?

Recommended Posts

Is there any such thing in PrestaShop?

 

By which I mean, is there anywhere I can set a pre-defined URL to POST data upon a PrestaShop action such as creating a new order.

 

Scenario:

  1. User places order
  2. Webhook is fired and POSTS the order data to a pre-defined URL such as http://www.example.com/incoming
  3. Data is then parsed and synchronised with our stock control services.

 

The only way I can think of doing this is extending the OrderDetailCore class and adding in the hook manually using cURL. Something like:

class OrderDetail extends OrderDetailCore {
    public function create(Order $order, Cart $cart, $product, $id_order_state, $id_order_invoice, $use_taxes = true, $id_warehouse = 0) {
        parent::create($order, $cart, $product, $id_order_state, $id_order_invoice, $use_taxes, $id_warehouse);
        $ch=curl_init();
        curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/incoming');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $product);
        $reply=curl_exec($ch);
        curl_close($ch);
    }
}

Share this post


Link to post
Share on other sites

i don't understand your expectactions well but i think that you're talking about webservice (?)

it's a kind of API to manage store based on something like "SOAP"

http://doc.prestashop.com/display/PS16/Using+the+PrestaShop+Web+Service

 

No I'm not talking about the SOAP Webservice. I want a method to be called whenever another method is called. The method I want calling will fire off some data via a POST request.

 

Something like the Github webhooks. https://developer.github.com/webhooks/

 

A good definition of a webhook can be seen here: http://en.wikipedia.org/wiki/Webhook

 

Webhooks are "user-defined HTTP callbacks".[2] They are usually triggered by some event, such as pushing code to a repository[3] or a comment being posted to a blog.[4] When that event occurs, the source site makes an HTTP request to the URI configured for the webhook. Users can configure them to cause events on one site to invoke behaviour on another.

 

 
 
Don't those just hook into the views?
Edited by xbenjii (see edit history)

Share this post


Link to post
Share on other sites

 

Ah, I see. Thanks for the help.

 

Came up with something like this, will be expanded later.

<?PHP

if (!defined("_PS_VERSION_"))
    exit;

class orderHook extends Module {

    public function __construct() {
        $this->name = "orderHook";
        $this->tab = "checkout";
        $this->version = "0.1";
        $this->author = "Benjamin Fortune";

        $this->need_instance = 0;
        $this->ps_versions_compliancy = array('min' => '1.6', 'max' => '1.6');
        $this->dependencies = array();

        parent::__construct();

        $this->displayName = $this->l("Order Hook");
        $this->description = $this->l("Fires a POST request to a pre-defined URL upon order creation.");

        $this->confirmUninstall = $this->l("Are you sure you want to uninstall?");

        if (!Configuration::get('orderHook'))
            $this->warning = $this->l('No name provided.');
    }

    public function install() {
        if (Shop::isFeatureActive())
            Shop::setContext(Shop::CONTEXT_ALL);

        return parent::install() &&
                $this->registerHook('actionValidateOrder') &&
                Configuration::updateValue('ORDER_HOOK_URL', 'http://localhost/orders/incoming');
    }

    public function uninstall() {
        return parent::uninstall() &&
                $this->unregisterHook('actionValidateOrder');
    }

    public function hookactionValidateOrder($params) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, Configuration::get('ORDER_HOOK_URL'));
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($params));
        curl_exec($ch);
        curl_close($ch);
    }

}

Share this post


Link to post
Share on other sites

Did this webhook module ever get added to the store?

I really need one for slack.

Basically on the exact same scenario as you.

This really should be build into the system IMO.

Share this post


Link to post
Share on other sites

Did this webhook module ever get added to the store?

I really need one for slack.

Basically on the exact same scenario as you.

This really should be build into the system IMO.

 

Not as such, I did end up creating a little module which should do the job though. It hasn't been updated so I don't know how it'll work with the latest version. Let me know if you have any problems.

 

https://www.prestashop.com/forums/topic/375015-webhook-module/

  • Like 1

Share this post


Link to post
Share on other sites

Awesome.

Thanks for that man.

 

I just inherited a project and I have never used this cart before.

Share this post


Link to post
Share on other sites

Hello,

 

I tried uploading the webhook.zip that you provided and got the following errors in prestashop:

 

  1. webhook (parse error in /modules/webhook/webhook.php)
  2. webhook (class missing in /modules/webhook/webhook.php)

I was wondering if you could help since I really want to be able to use webhooks in the form you have implemented.

 

I am also surprised such a standard feature isn't available.

Share this post


Link to post
Share on other sites

Hi,

 

I encountered the same problem.

 

In webhook.php, replacing <?PHP by <?php did the trick for me.

 

Hope this helps someone...

Share this post


Link to post
Share on other sites
40 minutes ago, stweet said:

up

This is very old module. Don't think it is working in latest Prestashop versions. Which PS version are you using ?

The hack mentioned here before does not work ?

On 10.5.2016 at 6:01 PM, bpoller said:

Hi,

 

I encountered the same problem.

 

In webhook.php, replacing <?PHP by <?php did the trick for me.

 

Hope this helps someone...

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More