Checkout APIを実行した際のレスポンスが Not Found となってしまう

soony
新規メンバー
1 0 0

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"}"

0 件の「いいね!」
fullbalance
先駆者
237 54 262

$checkout['token'] にはそれらしいトークンがはいっておりますでしょうか?

Shopify Expertのフルバランスです。Shopify,Shopify Plusの制作・運営サポートをしております。

国内初のShopify書籍「商品売るならShopify」発売中です。

また6月に技術書を発売予定ですので、こちらもよろしければ手に取ってみてください

ご参考になりましたら、解決&ベストソリューション設定をいただけると嬉しいです
0 件の「いいね!」
junichiokamura
Community Manager
Community Manager
1077 248 421

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は使いません)。

下記にサンプルコードを共有していますので、ご参考ください。

https://community.shopify.com/c/%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89%E9%9...

 

Technical Partner Manager, Japan
0 件の「いいね!」