Ruby on rails 使用shopify_api gem解决shopify订单履行问题

Ruby on rails 使用shopify_api gem解决shopify订单履行问题,ruby-on-rails,api,shopify,Ruby On Rails,Api,Shopify,我在通过shopify_api gem完成订单中的行项目时遇到问题。当我完成单个行项目时,它会完成订单中的所有行项目。我已经调查过了,人们说了一些关于设置标题的事情,请澄清 我正在做的是 order = ShopifyAPI::Order.find(order_id) 假设此订单有多个行项目 f = ShopifyAPI::Fulfillment.new(:params => { :order_id => order.id, :line_items => [ {"id" =&

我在通过shopify_api gem完成订单中的行项目时遇到问题。当我完成单个行项目时,它会完成订单中的所有行项目。我已经调查过了,人们说了一些关于设置标题的事情,请澄清

我正在做的是

order = ShopifyAPI::Order.find(order_id)
假设此订单有多个行项目

f = ShopifyAPI::Fulfillment.new(:params => { :order_id => order.id, :line_items => [ {"id" => order.line_items.first.id} ] })

f.prefix_options = { :order_id => order.id }

f.save
这段代码完成订单中的所有行项目,并将完成状态设置为“已完成”,这是不需要的


以下是标题、履行对象和tcpdump的详细信息:

商店化标题

(rdb:1) p ShopifyAPI::Fulfillment.headers
{"User-Agent"=>"ShopifyAPI/3.0.1 ActiveResource/3.1.1 Ruby/1.9.2", "X-Shopify-Access-Token"=>"be9d4adaa35e7f82b720a3567250424c"}
实现对象

#<ShopifyAPI::Fulfillment:0xca2086c @attributes={"params"=>#<ShopifyAPI::Fulfillment::Params:0xca20b00 @attributes={"order_id"=>138494648, "notify_customer"=>true, "tracking_number"=>"12345678", "line_items"=>[#<ShopifyAPI::LineItem:0xca28904 @attributes={"id"=>225568082}, @prefix_options={}, @persisted=false>]}, @prefix_options={}, @persisted=false>}, @prefix_options={:order_id=>138494648}, @persisted=false>
##1384946448,“通知客户”=>true,“跟踪客户号”=>“12345678”,“行项目”=>[#225568082},@prefix_options={},@persisted=false>},@prefix_options={},@persisted=false>},@prefix_options={:订单id=>138494646448},@persisted=false>
tcpdump输出

10:07:14.498936 IP localhost.localdomain.34941>localhost.localdomain.domain:50737+AAAA?olson-pfeffer-and-ratke1494.myshopify.com。(59) E..W..D..5.C.V.1..olson-pfeffer-and-ratke1494 myshopify.com。。。。。 10:07:14.655477 IP localhost.localdomain.domain>localhost.localdomain.34941:50737 1/1/0 CNAME shops.shopify.com。(160) E.…@.1.….X.:< 10:07:14.655650 IP localhost.localdomain.36871>localhost.localdomain.domain:39864+A?olson-pfeffer-and-ratke1494.myshopify.com。(59) E..W..D...5.C.V...olson-pfeffer-and-ratke1494 myshopify.com。。。。。 10:07:14.948404 IP localhost.localdomain.domain>localhost.localdomain.36871:39864 5/4/4 CNAME shops.shopify.com.,A 204.93.213.40,A 204.93.213.41,A 204.93.213.42,A 204.93.213.44(301) E..I..@。;。。。。。。。。。。5…5.H………olson-pfeffer-and-ratke1494 myshopfify.com………X…shops.shopfify.2.G………X…](.G………X…]).G………X…]。.G………X…]。.M…….ns3.p19.dynect.net..M…….ns4…M…….ns1…M…….ns2…….0…….NF…….0…….NG…….0。。。。 10:07:16.326985 IP6 geek-laptop.46193>geek-laptop.46193:UDP,长度16 ……q.q.j…………6k。。 10:07:16.338153 IP6 geek-laptop.46193>geek-laptop.46193:UDP,长度20
…@………q.q./#。。。。。!。6k。。
10:07:16.340185 IP6 geek-laptop.46193>geek-laptop.46193:UDP,长度16
…@………..q.q…G。。。。。。。。。。!。6k。。 10:07:16.350974 IP6 geek-laptop.46193>geek-laptop.46193:UDP,长度924 `…q.q.tk。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。“……f” C 2. W ..................................................................................................)
8

实际问题是,当您创建履行时,您正在将履行数据的散列传递给
新的
方法。只需传递数据,就不需要参数键。这只是标准的ActiveResource,没有什么特别的。这应该起作用:

f = ShopifyAPI::Fulfillment.new(:order_id => order.id, :line_items =>[ {"id" => order.line_items.first.id} ] )
f.prefix_options = { :order_id => order.id }
f.save

实际的问题是,在创建实现时,您正在将
:params=>hash\u of_fulfillment\u数据
传递给
新的
方法。只需传递数据,就不需要参数键。这只是标准的ActiveResource,没有什么特别的。这应该起作用:

f = ShopifyAPI::Fulfillment.new(:order_id => order.id, :line_items =>[ {"id" => order.line_items.first.id} ] )
f.prefix_options = { :order_id => order.id }
f.save

谢谢你的回答,是的,我正在使用shopify_api gem。你能准确地告诉我需要设置哪些标题吗?例如,ShopifyAPI::Fulfillment.headers.merge!({:what=>“here”})此外,我不明白他们何时给出api,我们使用的是与gem一起使用的方式,那么为什么gem不负责正确设置标题?这就是我回答的第二部分,应该正确设置标题。这就是为什么我要求您捕获正在发送和发布的实际请求,以便我们可以查看正在发送的内容。我已在“回答您的问题”部分提供了以下详细信息,因为“添加评论”不允许我发布足够的数据。请检查并让我知道是否可以做任何事情。Santosh:感谢您提供的大量信息:)在未来,使用类似的服务是您的最佳选择,因为它可以让您插入任意数量的文本,并提供语法突出显示选项等。感谢您的回答,是的,我正在使用shopify_api gem,你能准确地告诉我需要设置哪些标题吗?例如,ShopifyAPI::Fulfillment.headers.merge!({:what=>“here”})此外,我不明白他们何时给出api,我们使用的是与gem一起使用的方式,那么为什么gem不负责正确设置标题?这就是我回答的第二部分,应该正确设置标题。这就是为什么我要求您捕获正在发送和发布的实际请求,以便我们可以查看正在发送的内容。我已在“回答您的问题”部分提供了以下详细信息,因为“添加评论”不允许我发布足够的数据。请检查并让我知道是否可以做任何事情。Santosh:感谢您提供的信息:)在未来,使用类似的服务是您最好的选择,因为它可以让您插入任意数量的文本,并提供语法突出显示等选项。