Подключение к API Shopify в фоновом режиме - PullRequest
0 голосов
/ 07 апреля 2019

У меня есть фоновая работа в приложении Ruby on Rails для Shopify, которое работает каждую ночь более года.Через некоторое время после обновления до Shopify_app 8.3.1 и rails 5 (из 4) я периодически сталкиваюсь с проблемами, начиная сеанс вручную в этом фоновом задании.

Очевидно, что поскольку задание не наследуется от Authenticated Controller, я должен запустить сеанс shopify вручную.Я делаю это, сначала извлекая последний сохраненный токен из базы данных моего магазина (подключенного к текущему домену).Затем я передаю этот токен в новый сеанс и активирую его.

@mazer_shop = Shop.find_by(shopify_domain: "mazer-3.myshopify.com")
extra = { "scope" => ShopifyApp.configuration.scope.split(", ") }
@shopify_session = ShopifyAPI::Session.new(@mazer_shop.shopify_domain, @mazer_shop.shopify_token, extra)
ShopifyAPI::Base.activate_session(@shopify_session)

В прошлом месяце (после обновления) в течение 29 дней он активировался нормально и работал без проблем.Однако, начиная с 30-го, около 11 часов утра, он начал давать этот ответ об ошибке (вторая попытка в тот день):

I, [2019-03-30T08:57:18.949278 #30482]  INFO -- : GET https://mazer-3.myshopify.com:443/admin/shop.json
I, [2019-03-30T08:57:18.949392 #30482]  INFO -- : --> 200 OK 1482 (191.1ms)
I, [2019-03-30T08:57:18.949546 #30482]  INFO -- : Headers: {"Accept"=>"application/json", "User-Agent"=>"ShopifyAPI/5.2.4 ActiveResource/5.1.0 Ruby/2.4.5", "X-Shopify-Access-Token"=>"XXXXXXOmittedHereXXXXXXX"}
I, [2019-03-30T08:57:18.949581 #30482]  INFO -- : Response:
{"shop":{"id":5302909,"name":"Mazer Appliance","email":"mazer@mazer.com","domain":"mazer.com","province":"Alabama","country":"US","address1":"2  41st Street South","zip":"35222","city":"Birmingham","source":"zeekee","phone":"2052249600","latitude":33.5260509,"longitude":-86.7758489,"primary_locale":"en","address2":"","created_at":"2014-06-08T10:59:04-05:00","updated_at":"2018-12-31T11:28:19-06:00","country_code":"US","country_name":"United States","currency":"USD","customer_email":"mazer@mazer.com","timezone":"(GMT-06:00) Central Time (US \u0026 Canada)","iana_timezone":"America\/Chicago","shop_owner":"Mike Mazer","money_format":"$ {{amount}}","money_with_currency_format":"$ {{amount}} USD","weight_unit":"lb","province_code":"AL","taxes_included":false,"tax_shipping":null,"county_taxes":true,"plan_display_name":"Shopify Plus","plan_name":"shopify_plus","has_discounts":true,"has_gift_cards":true,"myshopify_domain":"mazer-3.myshopify.com","google_apps_domain":null,"google_apps_login_enabled":null,"money_in_emails_format":"${{amount}}","money_with_currency_in_emails_format":"${{amount}} USD","eligible_for_payments":true,"requires_extra_payments_agreement":false,"password_enabled":false,"has_storefront":true,"eligible_for_card_reader_giveaway":false,"finances":true,"primary_location_id":41435139,"checkout_api_supported":true,"multi_location_enabled":true,"setup_required":false,"force_ssl":true,"pre_launch_enabled":false,"enabled_presentment_currencies":["USD"]}}
E, [2019-03-30T11:00:07.254947 #30482] ERROR -- : GET https://mazer-3.myshopify.com:443/admin/shop.json
E, [2019-03-30T11:00:07.255065 #30482] ERROR -- : --> 401 Unauthorized 89 (105.2ms)
I, [2019-03-30T11:00:07.255252 #30482]  INFO -- : Headers: {"Accept"=>"application/json", "User-Agent"=>"ShopifyAPI/5.2.4 ActiveResource/5.1.0 Ruby/2.4.5", "X-Shopify-Access-Token"=>"XXXXXXOmittedHereXXXXXXX"}
I, [2019-03-30T11:00:07.255305 #30482]  INFO -- : Response: {"errors":"[API] Invalid API key or access token (unrecognized login or wrong password)"}

Странно то, что первый ответ (который работал в 8:57 утра),который успешно запустил сеанс, использует тот же токен, что и второй ответ, который дал неверный ключ API или ответ токена доступа примерно через 2 часа.Я предполагаю, что токен истек.Однако мне нужен способ запустить фоновое задание независимо от того, недавно кто-то вошел в приложение и заново сгенерировал токен.У меня никогда не было этой проблемы, пока после обновления.Кто-нибудь знает способ?

...