プラグイン > 開発について > EC-CUBE API 受注情報の更新 |
開発について
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
nkk |
投稿日時: 2018/4/9 9:49
対応状況: −−−
|
半人前 登録日: 2018/3/23 居住地: 投稿: 11 |
EC-CUBE API 受注情報の更新 [EC-CUBE] 3.0.15、新規インストール
[レンタルサーバ] VPS [OS] Ubuntu16.04LTS [PHP] 7.0 [データベース] MySQL 5.7 [WEBサーバ] Apache2.4 [ブラウザ] Chrome [導入プラグインの有無] クローズサイト、ソニーペイメントサービス [カスタマイズの有無] 無し [現象] お世話になっております。 EC-CUBE APIを利用して受注情報を更新しようとしていますが うまく動作しないのでアドバイスをお願いします。 仕様では 「http(s)://<host>/api/v1/order/{id}」にPUTすることで 該当受注の更新が行われるとあります。 下記コードはGoogleAppsScript(like javascript)によるPUT部分のものです。 内容としては受注ステータスを5:配送済みにするものです。 var headers = { 'Authorization': 'Bearer ' + getKeyValue('access_token') }; var payload = { 'OrderStatus' : {'id': 5}, 'CustomerOrderStatus' : {'id': 5} }; var params = { 'method' : 'PUT', 'headers' : headers, 'Content-Type': 'application/json', 'payload': JSON.stringify(payload), 'muteHttpExceptions' : true, }; var url = getKeyValue('host') + getKeyValue('order_url') + '/' + id; var response = UrlFetchApp.fetch(url, params); var code = response.getResponseCode(); こちらを実行するとレスポンスコードとして204が返ってきます。 仕様ではPOST、PUTでは201が返ってくるようですが、 204はコンテンツなし、つまりは処理するものがないということなのでしょうか? 一方で正しくPUTするためにはpayload部をどのように指定すればよいのでしょうか? 追記:実行ログ [2018-04-09 15:59:10,092842] eccube.INFO [NULL] [36d79979] [NULL] [RouterListener:onKernelRequest:145] - Matched route "api_operation_put". {"route_parameters":{"_controller":"Plugin\\EccubeApi\\Controller\\EccubeApiCRUDController::update","table":"order","id":"113","_route":"api_operation_put"},"request_uri":"https://<host>/api/v1/order/113"} [PUT, /api/v1/order/113, xxx.xxx.xxx.xxx, NULL, Mozilla/5.0 (compatible; Google-Apps-Script)] [2018-04-09 15:59:10,093305] eccube.INFO [NULL] [36d79979] [NULL] [AnonymousAuthenticationListener:handle:62] - Populated the TokenStorage with an anonymous Token. [PUT, /api/v1/order/113, xxx.xxx.xxx.xxx, NULL, Mozilla/5.0 (compatible; Google-Apps-Script)] [2018-04-09 15:59:10,094205] eccube.INFO [b5d06247] [36d79979] [NULL] [LogListener:logRequest:83] - > PUT /api/v1/order/113 [PUT, /api/v1/order/113, xxx.xxx.xxx.xxx, NULL, Mozilla/5.0 (compatible; Google-Apps-Script)] [2018-04-09 15:59:10,209469] eccube.INFO [b5d06247] [36d79979] [NULL] [LogListener:logResponse:96] - < 204 [PUT, /api/v1/order/113, xxx.xxx.xxx.xxx, NULL, Mozilla/5.0 (compatible; Google-Apps-Script)] |
nkk |
投稿日時: 2018/4/10 0:32
対応状況: 解決済
|
半人前 登録日: 2018/3/23 居住地: 投稿: 11 |
Re: EC-CUBE API 受注情報の更新 自己レスです。
一部ソースの修正とpayloadの変更で更新ができました。 /app/Plugin/EccubeApi/Util/EntityUtil.php L175 - if (!is_array($srcProperties[$name])) { + if (is_null($srcProperties[$name])) { コメントにはプロパティ名の値が空の時はスキップとあったのでis_nullに変更しました。 また、payload部をstringではなく、バイナリで送ることで認識させることができました。 var headers = { "Authorization": "Bearer " + getKeyValue('access_token') }; var payload = { OrderStatus : 5, CustomerOrderStatus : 5 }; var params = { "method" : "PUT", "headers" : headers, "Content-Type": "application/json", "payload": payload, "muteHttpExceptions" : true, }; var url = getKeyValue('host') + getKeyValue('order_url') + '/' + id; var response = UrlFetchApp.fetch(url, params); |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |