如何为先前已安装我的应用程序的商店重新获取Shopify OAuth访问令牌?

时间:2018-11-04 22:59:07

标签: php oauth oauth-2.0 shopify

我请求授权公共应用程序能够通过Shopify API访问商店数据。

商店通过授权请求URL(例如

)成功授权了我的应用程序
https://some-store.myshopify.com/admin/oauth/authorize?client_id=123abc&scope=read_inventory%2Cread_products&redirect_uri=http%3A%2F%mysite.com%2Fauth.php&state=123456

,响应被传递回我的应用程序。我的应用程序未正确处理此响应(包含可以交换永久访问令牌的代码)(页面上的错误表示未存储访问令牌)。

我阅读的有关请求这些令牌的所有内容都涉及到商店的授权-但鉴于商店已经授权了我的应用程序,回传了该代码,并且该代码已经成功交换了令牌:如果应用程序已被授权,我的应用程序可以使用我的API密钥来请求相同的令牌或新令牌吗?

我目前可以找到的唯一一种请求令牌的方法需要从头开始并获取用于交换的代码等。

我使用PHP并使用Luke Towers' php shopify wrapper

此阶段已成功完成:

    function check_authorization_attempt()
{
    $data = $_GET;

    $api = new Shopify($data['shop'], [
        'api_key' => '123',
        'secret'  => '456',
    ]);

    $storedAttempt = null;
    $attempts = json_decode(file_get_contents('authattempts.json'));
    foreach ($attempts as $attempt) {
        if ($attempt->shop === $data['shop']) {
            $storedAttempt = $attempt;  
            break;
        }
    }

    return $api->authorizeApplication($storedAttempt->nonce, $data);
}

$response = check_authorization_attempt();

,我本来可以从中读取访问令牌:

 $access_token = $response->access_token;

但这是我的应用程序在访问要写入所述令牌的数据库时遇到错误的阶段。

我不能在不重复身份验证请求的情况下重复它,因为传递给此功能的$ _GET中的数据来自Shopify对店主授权访问的响应,并且在交换的代码中还包含其他内容。

2 个答案:

答案 0 :(得分:0)

您必须重新请求授权。持久层代码不正确不是您的错,而是您的错。因此,您无能为力。确保您的代码有效。由于客户端在您的应用程序持久层中没有令牌,因此您的应用程序将重试授权令牌交换。他们不必先删除您的应用程序。因此,基本上,下一次您的客户尝试使用该应用程序时,是的,他们会要求批准该应用程序,但谁在乎,他们会的,您将获得一个很好的身份验证令牌进行存储。您已经固定了代码(右),这样可以正常工作。您距离荣耀更近了一步。

答案 1 :(得分:0)

Shopify 确实会返回永久访问令牌,但 ACCESS_MODE 必须为“离线”才能使令牌永久有效。

<块引用>

ACCESS_MODE 离线时,您的应用会收到永久访问令牌 无需用户许可即可随时提出请求。

文档: https://shopify.dev/tutorials/authenticate-with-oauth#step-2-ask-for-permission https://shopify.dev/concepts/about-apis/authentication#api-access-modes