Récemment, j'ai décidé de faire une application shopify dont j'entends souvent le nom au Japon, je vais donc garder ce dont je me souvenais à ce moment-là. J'ai remis l'explication de shopify à d'autres personnes, et cette fois je me concentrerai sur le développement d'applications. J'ai posté un article sur Qiita pour la première fois cette fois. J'ai eu du mal car il n'y avait pas beaucoup de commentaires en japonais, alors j'espère que cela aide des personnes similaires. Ce sera un commentaire pour ceux qui souhaitent développer une application. (Veuillez indiquer les parties difficiles à comprendre car j'omets les parties en premier lieu)
Tout d'abord, il existe trois types d'applications. Il existe trois types: application privée, application fermée et application ouverte.
Créez à partir de l'écran du magasin. L'authentification de base est effectuée à l'aide de la clé API et du mot de passe sur l'écran du magasin. Les ressources accessibles sont définies sur l'écran du magasin. Vous n'êtes pas obligé de prêter serment, etc., il est donc bon de commencer rapidement. Cependant, comme cette application ne peut pas être ouverte, elle est limitée au cas où l'opérateur = développeur ou une fois créée, c'est une application unique. Je pense que c'est parfait pour ceux qui veulent le toucher un instant et voir à quoi il ressemble.
import javax.xml.bind.DatatypeConverter; HttpPost http = new HttpPost (urlFullpath); // Au moment de get, HttpUriRequest http.setHeader ("autorisation", "De base" + DatatypeConverter.printBase64Binary ((<clé API> + ":" + <mot de passe>). getBytes ());); http.setHeader("Content-type","application/json; charset=UTF-8"); http.setHeader("user-agent", "Mozilla/5.0"); response = client.execute(http);
Installez à partir de l'écran partenaire. Obtenez un jeton avec l'authentification Oath et authentifiez-vous avec un jeton. Il ne peut être installé que sur les sites sous votre contrôle. On a l'impression que c'est pour le développement avant son ouverture.
Définissez la destination de la redirection lors de l'installation de l'application dans la redirection sur liste blanche.
Étant donné que l'accès vient à l'URL spécifiée pour l'application créée, après avoir effectué l'authentification hmac
"https://"+shop+"/admin/oauth/authorize?client_id="+api_key+"&scope="+scope+"&redirect_uri="+redirect_uri+"&state="+state+"&grant_options[]="+grant_options;
Je vous redirige vers.
Si l'authentification hmac échoue, refusez-la.
Pour api_key, spécifiez la clé API dans l'application sur l'écran du partenaire.
Dans la portée, entrez des autorisations telles que write_orders, read_orders, write_customers, read_customers, etc., séparées par des virgules.
Dans l'état, mettez une chaîne de caractères à vérifier après la redirection ultérieure.
Veuillez noter que vous ne pourrez pas accéder à l'écran du magasin ⇒ rediriger à moins que vous n'entriez l'URL de la destination de rappel dans la redirection en liste blanche. Le paramètre get lorsqu'il est rappelé contient l'état et le code. Vérifiez si l'état correspond à celui défini en 2 ci-dessus. Sinon, refusez-le. code est le code requis pour obtenir le jeton.
Obtenez le jeton en utilisant le code obtenu précédemment et la clé API et la clé secrète API dans l'application sur l'écran du partenaire.
Même si vous envoyez chaque code avec json, il sera lu, alors mettons-le dans le corps de la requête et publions-le.
CloseableHttpClient client = HttpClients.createDefault(); HttpPost httpPost= new HttpPost(”URL”); // shop +"/admin/oauth/access_token" ArrayList<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair(”client_secret”, <API secret key>)); params.add(new BasicNameValuePair(”code”, <code>)); params.add(new BasicNameValuePair(”client_id”, <API key>)); httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
L'autre chose qui était ennuyeuse était l'en-tête http.
httpPost.setHeader("content-type", "application/x-www-form-urlencoded"); httpPost.setHeader("accept", "*/*"); httpPost.removeHeaders ("user-agent"); // Cela n'a peut-être pas de sens httpPost.removeHeaders ("accept-encoding"); // Peut-être que cela n'a pas de sens httpPost.removeHeaders ("connection"); // Cela n'a peut-être pas de sens response = client.execute(httpPost);
Si vous envoyez avec, le jeton sera retourné avec json.
(La croyance que si vous revenez avec json, vous devriez l'envoyer avec json est un pas vers le marais)
Le jeton sera spécifié dans l'en-tête http. (Il semble que vous puissiez utiliser le paramètre get, mais ce n'est pas recommandé)
http.setHeader("X-Shopify-Access-Token", token);
Spécifier d'autres en-têtes est comme ↓.
http.setHeader("accept-encoding", "gzip, deflate"); http.setHeader("accept", "*/*"); http.setHeader("Content-type","application/json; charset=UTF-8");
le jeton ne semble pas expirer.
Installez-le depuis l'App Store et utilisez-le. Si vous demandez à shopify de revoir ce que vous avez fait avec l'application close, elle sera ouverte (il semble que vous ne l'ayez pas encore fait) Si vous l'ouvrez, vous pouvez vendre l'application.
Il y a une limite d'accès. Si vous ne le faites pas dans cet esprit, ce sera tout à fait inefficace. Vérifiez le seau qui fuit pour plus de détails sur son fonctionnement. Grosso modo ... ・ Il peut traiter 2 demandes par seconde (dans le plan normal) ・ Les demandes qui n'ont pas pu être traitées sont empilées pour 40 demandes (dans le plan normal) et traitées séquentiellement. Le nombre actuel de piles de traitement se trouve dans l'en-tête de réponse HTTP_X_SHOPIFY_SHOP_API_CALL_LIMIT Le dépassement entraînera une erreur En d'autres termes, lors d'un traitement en série, l'API n'accepte que deux fois par seconde. Ce sera un goulot d'étranglement considérable, donc ce sera un peu mieux si vous parallélisez votre propre traitement et votre demande d'API, effectuez votre propre traitement lors de l'exécution de l'API et essayez de ne pas créer le timing lorsque vous n'atteignez pas l'API autant que possible. Plus précisément, nous l'avons parallélisé avec Callable et avons commencé à effectuer notre propre traitement dans l'ordre de celui retourné par l'API. Cependant, quel que soit le degré de parallélisation, la réponse de l'API n'est que de deux fois par seconde, donc augmenter la pile ne signifie pas que l'ensemble du processus sera plus rapide. Par conséquent, en ajustant le nombre de threads, nous avons essayé de ne pas transporter une pile de traitement inutile. Si vous continuez à l'utiliser jusqu'à LIMIT, cela gênera d'autres applications, donc je pense qu'il vaut mieux empiler au plus 2 ou 3 fois. C'est le sentiment de toujours s'empiler un peu et de minimiser le timing lorsque l'API est au repos. D'un autre côté, à moins que l'API ne soit au repos, l'empiler davantage ne l'accélérera pas. Il est préférable d'incorporer un mécanisme qui retarde et supprime le prochain APPEL lorsque la limite est sur le point d'être atteinte. Si la pile augmente de façon inattendue et que la limite est dépassée, une erreur se produira, donc si vous avez vous-même un limiteur, vous pouvez éviter tout accès inutile.
Les API qui peuvent être utilisées sont les mêmes, bien qu'il existe des différences entre l'authentification de base et l'authentification Oath, qu'elles soient privées ou fermées. Si vous avez un environnement où vous pouvez utiliser ruby et nodejs, je pense qu'il est plus rapide d'utiliser la bibliothèque publique qui est ouverte au public. Pour cette raison, j'ai décidé de le faire avec java, mais j'espère que ceux qui sont accros au même marais pourront sortir de cet article. À propos, l'ancien java a une forte possibilité de pouvoir utiliser l'authentification SSL, il est donc préférable d'ajouter d'abord un certificat. (Il est préférable de donner la version docilement) Il semble qu'il existe une bibliothèque appelée Shopify4J, mais je n'ai pas eu le courage de l'utiliser car la mise à jour s'est arrêtée il y a longtemps. De plus, comme la communauté officielle shopify est un mélange de pierres, il y a des moments où vous pouvez la nettoyer facilement, et il y a des moments où vous êtes coincé dans les profondeurs, alors faisons des choix à ce sujet. Ce n'est pas si compliqué quand je regarde en arrière après qu'il soit terminé, mais quand je le regarde dans les documents officiels anglais et dans la communauté et que je fais des essais et des erreurs, j'ai l'impression de faire des allers-retours. De toute évidence, tout le monde utilise la bibliothèque, donc vous ne prendriez probablement pas la peine de créer cette zone. Je suis tombé sur des spécifications et des mécanismes intéressants que je vois rarement au Japon, mais cela dépend de la réponse ...
https://www.shopify.com/partners/blog/17056443-how-to-generate-a-shopify-api-token J'ai un échantillon PHP, donc je l'ai utilisé pour m'authentifier. J'ai confirmé et reproduit la même demande pour mon environnement de développement en vérifiant la configuration des en-têtes et des paramètres de transmission. C'est un vestige que la source contient un sort de magie inutile.
Recommended Posts