Shopify - 客户端订单标记

时间:2017-09-11 02:40:52

标签: api shopify

根据我的要求,在Shopify商店,管理员应该能够从客户选择的交货日期中搜索订单。我能找到的唯一可行的方法是用订单标记订单并过滤标签中的订单。我的问题是,在订单创建时,是否有适当的方式在客户指定交货日期时标记订单? (我不允许使用任何付费应用/插件)

我可以通过管理订单API找到两种方法,但两者都有问题,

  1. 将webhook(用于订单确认事件)写入外部服务器,该服务器可以获取用户选择的交货日期并从那里调用管理订单API来标记订单 - 问题是它的开销维护服务器只是为了标记订单,即使我这样做,因为管理员API不允许CORS这是可行的吗? (并且由于店主甚至不想支付付费插件,维护服务器也不实用)

  2. 确认订单后,从客户端调用admin API。我尝试了这个,它的工作原理是预期的,但问题是我必须保留客户端JavaScript中存储的订单和事务的管理API凭据,根据我的知识,这根本不是一个好的做法。

  3. 允许使用cart-attributes在客户端创建有关订单的其他详细信息,并且它们也显示在管理员订单的页面上,但Shoify不允许使用添加到订单的购物车属性搜索订单。

    如果有人能为此提出解决方案,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您实际上可以使用没有服务器端要求的Chrome插件(或非常复杂的书签)来实现此目的。见https://developer.chrome.com/extensions/overview

你的api调用看起来像下面的POC脚本。 API calls不会按标记搜索订单,因此您可以跳过该标记并按照主题的.liquid代码设置的note_attribute进行过滤。然后,您的chrome插件会列出未结订单并按要求的交货日期显示。

获取现有订单并更新其注释属性:

jQuery.get('/admin/orders/5803440262.json').then(function(d) {
    console.log(d.order);
    var so = {
        id: d.order.id,
        note_attributes: [{
            name: 'Test Value',
            value: 'Test'
        }]
    };
    jQuery.ajax({
        url: '/admin/orders/' + so.id + '.json',
        type: 'PUT',
        data: JSON.stringify({
            order: so
        }),
        contentType: 'application/json'
    }).then(function(d) {
        console.log(JSON.stringify(d, null, ' '));
    });
});

并阅读订单:

jQuery.get('/admin/orders.json?limit=250').then(function(d) {
    var count = 0;
    d.orders.forEach(function(so) {
        if (so.tags.indexOf('__amazon_pending') != -1) count++;
    });
    console.log(count + ' matching orders');
});