Shopify アプリに関する話題はこちら
ShopifyのREST APIを利用して、アプリを開発したいと考えています。
アプリの言語: PHP7.3(外部サーバーにカスタムアプリとして構築)です。
ひとまず、アプリを実装+ショップへのインストールまでは成功し、
以下のような処理を実行して、
・注文の作成
・チェックアウトデータの作成
・カード情報の保存
などはできるようになっています。
が、支払いデータの処理のところでつまづいています。
具体的には、後述するコードにあるように、
POST /admin/api/2021-01/checkouts/{token}/payments.json',
を叩いた結果として、
{"errors":"Not Found"}
となってしまいます。
何が問題なのか、
・パラメータの指定やURL(途中のtokenなど)が間違えているのか
・何か手続きが必要なのか(Checkout APIやPayment APIが使えるようになっていない?)
など、具体的な方法について、ご教授いただけませんでしょうか。
※いろいろ調べたところでは、販売チャネルで Checkout API を使えるように申請する必要がある、
などの情報もあったのですが、(英語が苦手なことも災いして)よく理解ができませんでした・・・。
どうぞよろしくお願いします。
// 注文作成
$response = shopify_call(
$this->shop['access_token'],
$this->shop['subdomain'],
'/admin/api/2021-01/orders.json',
$query,
'POST',
);
$order = json_decode($response['response'], true)['order'];
// Checkoutデータ作成
$response = shopify_call(
$this->shop['access_token'],
$this->shop['subdomain'],
'/admin/api/2021-01/checkouts.json',
$query,
'POST'
);
$checkout = json_decode($response['response'], true)['checkout'];
// カード情報保管
$data = array(
'credit_card'=> [
'number'=> '4242424242424242',
'first_name'=> 'Hogehoge',
'last_name'=> 'Test',
'month'=> '5',
'year'=> '23',
'verification_value'=> '123'
]
);
$response = HttpRequestJson::post($checkout['payment_url'], $data);
$sessionId = $response['id'];
// 支払いデータ作成
$response = shopify_call(
$this->shop['access_token'],
$this->shop['subdomain'],
'/admin/api/2021-01/checkouts/' . $checkout['token'] . '/payments.json',
$query,
'POST'
);
$payment = json_decode($response['response'], true)['payment'];
// 支払いデータ作成 結果
array(2) {
["headers"]=>
array(31) {
["status"]=>
string(23) "HTTP/1.1 404 Not Found "
["Date"]=>
string(19) "Mon, 15 Mar 2021 00"
["Content-Type"]=>
string(31) "application/json; charset=utf-8"
["Transfer-Encoding"]=>
string(7) "chunked"
["Connection"]=>
string(10) "keep-alive"
["X-Sorting-Hat-PodId"]=>
string(3) "162"
["X-Sorting-Hat-ShopId"]=>
string(11) "53117190307"
["Vary"]=>
string(15) "Accept-Encoding"
["Referrer-Policy"]=>
string(24) "origin-when-cross-origin"
["X-Frame-Options"]=>
string(4) "DENY"
["X-ShopId"]=>
string(11) "53117190307"
["X-ShardId"]=>
string(3) "162"
["X-Stats-UserId"]=>
string(0) ""
["X-Stats-ApiClientId"]=>
string(7) "4928073"
["X-Stats-ApiPermissionId"]=>
string(12) "311545626787"
["Strict-Transport-Security"]=>
string(15) "max-age=7889238"
["X-Shopify-Stage"]=>
string(10) "production"
["Content-Security-Policy"]=>
string(23) "default-src 'self' data"
["X-Content-Type-Options"]=>
string(7) "nosniff"
["X-Download-Options"]=>
string(6) "noopen"
["X-Permitted-Cross-Domain-Policies"]=>
string(4) "none"
["X-XSS-Protection"]=>
string(219) "1; mode=block; report=/xss-report?source%5Baction%5D=create&source%5Bapp%5D=Shopify&source%5Bcontroller%5D=admin%2Fcheckouts%2Fpayments&source%5Bsection%5D=admin_api&source%5Buuid%5D=11703ed6-f13c-49ee-bc50-ff47f201b2a2"
["X-Dc"]=>
string(45) "gcp-asia-northeast2,gcp-us-east1,gcp-us-east1"
["X-Request-ID"]=>
string(36) "11703ed6-f13c-49ee-bc50-ff47f201b2a2"
["Set-Cookie"]=>
string(63) "_shopify_fs=2021-03-15T00%3A06%3A17Z; Expires=Tue, 15-Mar-22 00"
["CF-Cache-Status"]=>
string(7) "DYNAMIC"
["cf-request-id"]=>
string(32) "08d4cd84db0000fbe4e4bbe000000001"
["Expect-CT"]=>
string(33) "max-age=604800, report-uri="https"
["Server"]=>
string(10) "cloudflare"
["CF-RAY"]=>
string(20) "63017eb49e28fbe4-KIX"
["alt-svc"]=>
string(7) "h3-27=""
}
["response"]=>
string(22) "{"errors":"Not Found"}"
$checkout['token'] にはそれらしいトークンがはいっておりますでしょうか?
Payment APIはPCIDSSを保持している決済会社などに特例で許可されるもので、通常は使えません。また、Shopifyの購入フローに独自の決済を実装することはAPIの利用規約で禁止されております。
(Payment APIは、カード情報を直接受け取ってトークン化するものですので、通常のマーチャントやパートナーが利用することは推奨されません)。
https://www.shopify.com/legal/api-terms
Checkout APIは、 Storefront APIの一部でmPublic Appの場合は、アプリをSales Channelにする必要があります(設定画面から申請可能です)。
自身のショップだけで使う場合は、Private appで権限を有効にすれば呼べるようになります。
ただ、注意点ですが、Storefront APIを使った独自フローの実装でも、最後の決済画面はShopifyに遷移してShopify画面で行うことになります(上記のPaymnent APIは使いません)。
下記にサンプルコードを共有していますので、ご参考ください。
サポートの選択肢が増えていく中、最適となる選択の判断が難しくなっているかと存じます。今回は問題の解決に最適となるサポートの選択方法を、紹介させて頂きます。 選択肢のご紹介...
By Mirai Oct 6, 20242023年初頭、Shopifyペイメントアカウント、及びShopifyアカウント全体のセキュリティを強化する為の変更が適用されました。ユーザーのアカウントセキュリティを強化す...
By Mirai Sep 29, 2024概要: 年末/年明けは、消費者が最もショッピングを行う時期の一つです。特に、ブラックフライデー・サイバーマンデー(BFCM)は、世界中で注目される大規模なセールイベントであ...
By JapanGuru Sep 25, 2024