首页 > 解决方案 > 如何为之前安装了我的应用程序的商店重新获取 Shopify OAuth 访问令牌?

问题描述

我请求授权公共应用程序能够通过 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 包装器

此阶段已成功完成:

    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 对授权访问的店主的响应,其中包括用于交换的代码。

标签: phpoauthoauth-2.0shopify

解决方案


您必须重新请求授权。您的持久层代码不正确不是任何人的错,而是您的错。因此,您无法做任何改变。确保您的代码有效。由于客户端在您的 App 持久层中没有令牌,您的 App 将重试授权令牌交换。他们不必先删除您的应用程序。所以基本上,下次您的客户尝试使用该应用程序时,是的,他们会要求批准它,但谁在乎,他们会的,您将获得一个好的身份验证令牌来存储。你已经修复了你的代码(右),这样就可以了。你离荣耀又近了一步。


推荐阅读