Shopify 如何将购买链接到另一个系统中的用户记录?

Shopify 如何将购买链接到另一个系统中的用户记录?,shopify,Shopify,很抱歉,在我意识到你已经将这类问题转移到stackoverflow之前,我在google群组中发布了这篇文章 我正在为我们的客户开发一款带有电子商务组件的网络应用程序,该组件基于shopify,是一款带有白色标签的产品。我们的应用程序允许我们客户的客户购买产品订阅,以便在应用程序中使用。我们的每个客户都将有一个单独的shopify商店。我们有一个web界面,允许我们的客户创建产品,我们使用shopify api通过应用程序在他们的商店中创建产品。我们已经安装了web钩子来接收付款通知,以便我们可

很抱歉,在我意识到你已经将这类问题转移到stackoverflow之前,我在google群组中发布了这篇文章

我正在为我们的客户开发一款带有电子商务组件的网络应用程序,该组件基于shopify,是一款带有白色标签的产品。我们的应用程序允许我们客户的客户购买产品订阅,以便在应用程序中使用。我们的每个客户都将有一个单独的shopify商店。我们有一个web界面,允许我们的客户创建产品,我们使用shopify api通过应用程序在他们的商店中创建产品。我们已经安装了web钩子来接收付款通知,以便我们可以在系统中创建适当的记录,允许客户访问他们购买的产品

到目前为止,我们的计划是在我们的网站上提供一个带有“立即购买”按钮的产品列表,将产品添加到商店的购物车中,然后引导用户使用Shopify的结账系统结账。在fulfillment web钩子中,我们获得了购物车令牌,因此链接两个系统所需做的就是将购物车令牌临时记录在我们的客户数据库中,然后我们就可以将购买归功于正确的用户

我们遇到的问题是,似乎无法将购物车/订单/付款链接到实际登录到我们系统的用户。我们仍在开发中,因此我们正在使用测试商店,应用程序的域与商店的域不同(在生产系统中也可能如此),并且似乎不可能找出如何连接这两个系统

我尝试了几种不同的方法

1) 使用一个表单并使用return\u to=back发布到商店的购物车/add.js

这似乎是成功的,因为项目被添加到购物车,并且在新窗口中打开购物车会将他们带到他们添加项目的购物车,但由于我们无法在单独的域中访问购物车令牌,因此无法将该购物车与系统上的用户相关联

2) 使用代理(我们的系统在节点中编写)发布到商店的购物车并截获购物车令牌

这也适用于将项目添加到购物车,我们可以从响应中访问_session_id和购物车cookies,但我似乎无法在浏览器中设置这些cookies。前往商店购物车不会显示刚刚添加的商品,商店会获得不同的购物车令牌

是否有不同的方法,或者其中一种方法是否有效

我们是否应该完全不同地这样做

干杯


Paul

您最好的选择是在创建订单时在购物车属性中放入一些内容,并在获得webhook时使用这些内容将订单链接到其他系统。您可以在另一台服务器上使用一个简单的json端点来返回当前登录的用户,或者让他们在购物车页面上输入某个用户并将其存储在购物车属性中。有关购物车属性的更多信息

为了实现John的建议,我将以下内容放入我的cart.liquid文件中:

<script type="text/javascript">
(function($){
    $(document).ready(function(){
        $.ajax({
            url: 'http://<server>/token',
            dataType: 'jsonp',
            success: function(data, status, xhr) {
                $('#cartform').append('<input type="hidden" name="attributes[token]" value="'+data.token+'" />');
            },
            error: function(xhr, status, error) {
                alert('Error');
            }
        });
    });
})(jQuery);
</script>

(函数($){
$(文档).ready(函数(){
$.ajax({
网址:'http:///token',
数据类型:“jsonp”,
成功:功能(数据、状态、xhr){
$('#cartform')。附加('');
},
错误:函数(xhr、状态、错误){
警报(“错误”);
}
});
});
})(jQuery);
我的服务器运行在与商店不同的域上,因此我使用的是jsonp。令牌是我可以用来唯一标识数据库中的客户记录的东西。我使用了一个属性,这样,如果客户想自己使用它做一些事情,它就不会与客户使用shopify的note功能相冲突。我还没有用我的web钩子测试过这个,但我认为我可以从现在开始工作


我对此并不完全满意,因为这需要我们的客户将其放入模板中,以便shopify与我们的系统配合使用。我仍然认为应该有一种方法可以通过JSON/cart API为cart设置注释的值。

谢谢John,我将在这里尝试并跟进。我希望找到一个根本不涉及修改shopify页面的解决方案,但我认为这在目前是可行的。添加项目时,是否有方法通过/cart API调用传入note或cart属性?这就是我真正需要的。我在下面添加了John建议的实施作为答案,因为我似乎无法将其纳入评论中,并且似乎不适合修改问题。John的解决方案对我来说仍然不理想,但我可以让它发挥作用。你可以做的是使用a插入此JS并使用元字段,而不是用户和商家可见的note属性。我刚刚得出了相同的结论,我将其简化为让客户机insert
返回document.ready上的jquery函数,该函数使用服务器上用户会话中预设的值注入名为attributes[token]的隐藏输入。他们仍然需要修改购物车模板,但我们至少可以更集中地控制实现。为了结束这个循环,我刚刚用我的订单/付费网络挂钩成功地完成了测试,并能够从订单的属性中检索到我的用户令牌。事实上,使用ScriptTag API,根本不需要让客户机修改他们的购物车。完整的方法是在应用程序范围中包含write_script_标记,在代码中添加一条路径,该路径通过向购物车中注入隐藏字段来返回设置自定义属性的脚本,并在订单/付费网络挂钩中查找该路径。我使用的脚本是
(function($){$('#cartform').append('''})(jQuery);
,其中我从服务器端的用户会话中提取令牌值。