Bigcommerce客户登录api(单点登录)无效登录问题

时间:2017-02-14 22:22:29

标签: php jwt bigcommerce

我是bigcommerce和jwt令牌的新手。我试图让客户登录api在路径商店工作。但是无法自动成功登录客户。

我让它工作了一两次,但现在它不再工作了,而且由于代码没有任何改变,因此无法弄清奇怪的行为。如果其他人遇到客户登录API问题但我一无所获,我试过谷歌搜索。

我已经通过https://developer.bigcommerce.com/api/v2/#customer-login-api上的教程,并复制了提供的示例。 我在下面的代码中是否遗漏了一些东西?

  • 我已经去了developer.bigcommerce.com并创建了草稿应用程序。
  • 我从草稿应用程序中获得了客户端ID和客户端密钥。
  • 我已进入试用商店并成功安装了应用程序草稿。
  • 我也在SSL上对此页面进行了测试。
  • 可能是因为它是一家小道商店,只有当它是一家真正的商店时它才有用吗?

感谢。

以下是php代码:

include "vendor/autoload.php";

use Bigcommerce\Api\Client as Bigcommerce;
use Firebase\JWT\JWT;

function getCustomerLoginToken($id, $redirectUrl = '', $requestIp = '') {
  /*
  if (empty(self::$client_secret)) {
    throw new Exception('Cannot sign customer login tokens without a client secret');
  }
  */

  $payload = array(
     'iss' => '#MyApp1's Client ID#',
     'iat' => time(),
     'jti' => bin2hex(random_bytes(32)),
     'operation' => 'customer_login',
     'store_hash' => '#Store Hash#',
     'customer_id' => $id
  );

  if (!empty($redirectUrl)) {
    $payload['redirect_to'] = $redirectUrl;
  }

  if (!empty($requestIp)) {
    $payload['request_ip'] = $requestIp;
  }

  return JWT::encode($payload, "#MyApp1's Client Secret#", "HS256");
}

$jwt = getCustomerLoginToken(1);

header("Location: " . 'https://store-#Store Hash#.mybigcommerce.com/login/token/' . $jwt);
exit();

2 个答案:

答案 0 :(得分:2)

有一些限制可能导致错误:

  • 应用程序必须安装在商店中(看起来你好了 - 你也可以使用在商店本地创建的API令牌进行测试 - https://support.bigcommerce.com/articles/Public/Store-API-Accounts/
  • 该应用必须具有“登录OAuth范围”
  • 必须在大约30秒内访问JWT网址,否则它将无法正常工作。
  • 生成JWT的计算机/服务器需要有一个同步的时钟,否则你的IAT值似乎是在超过30秒之前创建的,或者甚至在将来会失败
  • 只能访问一次网址 - 如果有任何内容除了目标最终用户的浏览器之外还有针对它的GET请求,它就无法工作。例如,如果您在Slack消息中发送URL,则slack将尝试通过访问它来预览链接,从而使其无效。
  • https://jwt.io/
  • 仔细检查您的JWT是否有效是件好事

如果您排除了上述情况,BigCommerce支持可以访问日志,这可以更好地了解情况。

希望这有帮助!

答案 1 :(得分:0)

不需要应用程序的client_id和密码,您需要api的client_id和密码