
Shopifyでの運用効率化のために、Google Apps Script(GAS)からShopify Admin APIを叩く機会があったため、その際にやったことについてご紹介します。
注文番号からShopifyの注文IDを取得したい
とあるオペレーションで注文番号をスプレッドシートに記載する作業があったのですが、その際、その注文番号の、Shopify管理画面の注文詳細ページリンクも合わせて記載したいと考えていました。
ただ、注文詳細ページURLに使われているのは、注文番号ではなく、Shopifyの注文IDのため、Shopify Admin APIを使って、注文番号から注文IDを取得し、それを使って注文詳細ページのURLを生成する必要がありました。
どうやるのか
注文に関するデータとなるので、Orderリソースを取得するAPIを使います。
このとき注文番号をクエリパラメータとして指定して該当の注文データを取得するということがやりたかったのですが、ShopifyのAPIドキュメントには記載が見当たらなかったため他の方法を探したところ、Shopify Communityのこの投稿を参考に、 query=name:注文番号
という形式で注文番号を指定して取得できることがわかりました。
以下、APIをつかったGASのスクリプトです。トークンなどの必要な情報は、GASのスクリプトプロパティに保存しておくと良いでしょう。
/**
* 注文番号(#付きだとAPIがうまく動かないため#なしを渡すこと)からShopifyの注文IDを取得
* なお、ステータスが発送済みの注文は取得不可であることを動作確認済み
*/
function getOrderIdFromOrderNumber__(orderNumber) {
const scriptProperties = PropertiesService.getScriptProperties();
const shopName = scriptProperties.getProperty('SHOPIFY_SHOP_NAME');
const accessToken = scriptProperties.getProperty('SHOPIFY_ACCESS_TOKEN');
const apiVersion = scriptProperties.getProperty('SHOPIFY_API_VERSION');
// ref: https://community.shopify.com/c/shopify-discussions/using-rest-api-to-get-a-single-order-by-name-when-name-contains/m-p/2572236/highlight/true#M440687
const url = `https://${shopName}.myshopify.com/admin/api/${apiVersion}/orders.json?query=name:${orderNumber}`;
console.log(url);
const options = {
method: 'get',
headers: {
'X-Shopify-Access-Token': accessToken,
'Content-Type': 'application/json'
}
};
try {
const response = UrlFetchApp.fetch(url, options);
const orders = JSON.parse(response.getContentText()).orders;
if (orders.length > 0) {
console.log(orders[0].id);
return orders[0].id;
} else {
Logger.log('Order not found');
return null;
}
} catch (error) {
Logger.log('Error: ' + error.message);
return null;
}
}
ほかにも、注文IDから注文者氏名を取得するスクリプトも作成しましたので、参考にしてください。
/**
* Shopifyの注文IDから注文者氏名を取得
*/
function getOrderCustomerFullname__(orderId) {
const scriptProperties = PropertiesService.getScriptProperties();
const shopName = scriptProperties.getProperty('SHOPIFY_SHOP_NAME');
const accessToken = scriptProperties.getProperty('SHOPIFY_ACCESS_TOKEN');
const apiVersion = scriptProperties.getProperty('SHOPIFY_API_VERSION');
// docs: https://shopify.dev/docs/api/admin-rest/2024-07/resources/order#get-orders-order-id?fields=id,line-items,name,total-price
const url = `https://${shopName}.myshopify.com/admin/api/${apiVersion}/orders/${orderId}.json`;
console.log(url);
const options = {
method: 'get',
headers: {
'X-Shopify-Access-Token': accessToken,
'Content-Type': 'application/json'
}
};
try {
const response = UrlFetchApp.fetch(url, options);
const order = JSON.parse(response.getContentText()).order;
if (order) {
return `${order.customer.last_name} ${order.customer.first_name}`;
} else {
Logger.log('Order not found');
return null;
}
} catch (error) {
Logger.log('Error: ' + error.message);
return null;
}
}
まとめ
Shopify Admin APIの使用例の一部をご紹介しました。ぜひ本記事を参考に、APIを活用した業務効率化にチャレンジしてみてください。