test_auth.ts 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { SpApiClient } from './src/client.ts';
  2. import { SpApiConfig } from './src/types.ts';
  3. const config: SpApiConfig = {
  4. clientId: process.env.AMAZON_LWA_CLIENT_ID || '',
  5. clientSecret: process.env.AMAZON_LWA_CLIENT_SECRET || '',
  6. refreshToken: process.env.AMAZON_REFRESH_TOKEN || '',
  7. region: 'us-east-1'
  8. };
  9. if (!config.clientId || !config.clientSecret || !config.refreshToken) {
  10. throw new Error('Set AMAZON_LWA_CLIENT_ID, AMAZON_LWA_CLIENT_SECRET and AMAZON_REFRESH_TOKEN');
  11. }
  12. console.log('Initializing SP-API Client with environment credentials');
  13. const client = new SpApiClient(config);
  14. async function testAuth() {
  15. try {
  16. console.log('Attempting to fetch Access Token...');
  17. // 通过访问私有方法或者触发请求来测试
  18. // 由于 getAccessToken 是私有的,我们通过 request 方法触发它
  19. // 我们故意请求一个不存在的端点,如果能走到 404,说明 Auth 成功了
  20. // 如果是 400/401 且来自 Amazon Auth Server,说明 Auth 失败
  21. const response = await client.request({
  22. method: 'GET',
  23. path: '/orders/v0/orders',
  24. query: {
  25. MarketplaceIds: ['ATVPDKIKX0DER'], // getOrders expects MarketplaceIds as a list
  26. CreatedAfter: '2023-10-01T00:00:00Z'
  27. }
  28. });
  29. console.log('Response:', JSON.stringify(response, null, 2));
  30. console.log('Request executed successfully.');
  31. } catch (error: any) {
  32. console.log('Test finished with error.');
  33. if (error.response) {
  34. console.log('HTTP Status:', error.response.status);
  35. console.log('Response Data:', JSON.stringify(error.response.data, null, 2));
  36. // 分析错误来源
  37. if (error.config && error.config.url && error.config.url.includes('api.amazon.com/auth/o2/token')) {
  38. console.error('❌ LWA Authentication Failed: Unable to get Access Token.');
  39. } else if (error.response.status === 403) {
  40. console.log('✅ Access Token acquired successfully! (But API request forbidden/invalid as expected with dummy creds)');
  41. } else if (error.response.status === 404) {
  42. console.log('✅ Access Token acquired successfully! (API endpoint not found)');
  43. } else if (error.response.status === 401) {
  44. console.log('❌ API Unauthorized: Access Token might be invalid or expired immediately.');
  45. } else {
  46. // 如果是我们预期的 token 请求错误
  47. if (error.message.includes('refresh_token')) {
  48. console.error('❌ LWA Token Error:', error.message);
  49. }
  50. }
  51. } else {
  52. console.error('Error Message:', error.message);
  53. }
  54. }
  55. }
  56. testAuth();