意味は次のとおりです。PostgreSQLデータベースがあり、1Cはこのデータベースで動作し、注文のデータを入力し、注文のステータスを変更します。 また、サーバー上にあり、3分ごとにクラウンで実行されるPHPスクリプトもあります。 このスクリプトは何をすべきですか?
- 1. ozon APIからトークンを受け取ります。
- 2. Ozonですべての新しい注文を収集します。 受け取った注文で新しいXMLファイルを作成します。
- 3.データベースから特定のステータスの注文を受け取ります。 これらの注文のステータスをOzonに変更します。 データベース内のこれらの注文のステータスを変更します。
- 4. Ozonで特定のステータスの注文をクローズします。 データベース内のこれらの注文のステータスを変更します。
トークンの取得に問題はありませんでした。 file_get_contents()関数を使用して、私が望むものを達成しました。
// /auth/token/merchants?applicationid=[ApplicationId] (ApplicationId ) // $sign - SHA1-HMAC , , - path- URL // json, { "token": "9895DDA48379484ABC51A4B193CDAE04", "expiration": 600 } $sign = hash_hmac('sha1','/auth/token/merchants?applicationid=albion','[ ]'); $token = file_get_contents('https://api.ozon.ru/auth/token/merchants?applicationid=[ApplicationId]&sign='.$sign); $token = substr($token,10,32);
さらに問題が発生しました。 要求とともに、ヘッダーを送信する必要がありました。 APIの文書化はかなり不十分で、コード例はありません。Googleには例が見つかりませんでした。 私は試行錯誤で働かなければなりませんでした。 私は最初にfile_get_contents()を介して同じ方法で行動しようとしました-無駄に。 私が何をするにしても、チャンネルを作成することができないというエラーを表示します。
その結果、カールを使用しました。 新しく作成された注文のリストを取得するためのコード(jsonおよびxml):
// json $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'https://api.ozon.ru/merchants/orders?StateName='); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( "x-ApplicationId: [ApplicationId]", "x-Token: ".$token, "x-ApiVersion: 0.1" )); $out = curl_exec($curl); curl_close($curl); // xml $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'https://api.ozon.ru/merchants/orders?StateName='); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( "accept: application/xml", "content-type: application/xml", "x-ApplicationId: [ApplicationId]", "x-Token: ".$token, "x-ApiVersion: 0.1" )); $out1 = curl_exec($curl); curl_close($curl);
ここでは、xmlファイルの作成とpostgreSQLデータベースの変更に関連する瞬間については説明しません。これは既に余談であるためです。
次に、注文のステータスを変更する必要がありました。 これを行うには、特にPUTリクエストの本文で、新しいステータスを転送する必要がありました(XMLの形式での長い調査で判明しました)。
注文ステータスの変更は次のとおりです。
// foreach($ids as $item) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'https://api.ozon.ru/merchants/orders/state/'.$item); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POSTFIELDS, "<OrderStateRequest><StateSysName>ClientOrderStateMerchantAccepted</StateSysName></OrderStateRequest>"); curl_setopt($curl, CURLOPT_HTTPHEADER, array( "accept: application/xml", "content-type: application/xml", "x-ApplicationId: [ApplicationId]", "x-Token: ".$token, "x-ApiVersion: 0.1" )); $out = curl_exec($curl); curl_close($curl); }
異なるステータスの場合、異なるXMLデータを使用する必要があります。 利用可能なすべてのステータスのリストは次のとおりです。
<OrderStatesResponse> <OrderStates> <OrderState> <Name></Name> <SysName>ClientOrderStateMerchantCreated</SysName> </OrderState> <OrderState> <Name> </Name> <SysName>ClientOrderStateMerchantAwaitingPayment</SysName> </OrderState> <OrderState> <Name></Name> <SysName>ClientOrderStateMerchantPaymentDone</SysName> </OrderState> <OrderState> <Name> </Name> <SysName>ClientOrderStateMerchantAccepted</SysName> </OrderState> <OrderState> <Name></Name> <SysName>ClientOrderStateMerchantSent</SysName> </OrderState> <OrderState> <Name></Name> <SysName>ClientOrderStateMerchantDone</SysName> </OrderState> <OrderState> <Name></Name> <SysName>ClientOrderStateMerchantCanceled</SysName> </OrderState> </OrderStates> </OrderStatesResponse>
また、注文をキャンセルする必要がある場合もあります。 これを行うには、キャンセルの理由をリクエストボディにXML形式でも指定します。
例を挙げます(理由は次のとおりです:「注文数が利用可能な数を超えています」):
// $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'https://api.ozon.ru/merchants/orders/state/'.$order_number); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POSTFIELDS, "<OrderStateRequest><StateSysName>ClientOrderStateMerchantCanceled</StateSysName><CancelReason>OrderCountMoreThanRest</CancelReason></OrderStateRequest>"); curl_setopt($curl, CURLOPT_HTTPHEADER, array( "accept: application/xml", "content-type: application/xml", "x-ApplicationId: [ApplicationId]", "x-Token: ".$token, "x-ApiVersion: 0.1" )); $out = curl_exec($curl); curl_close($curl);
したがって、サイトからオゾンの注文を管理できます。
私の記事が誰かに役立つことを願っています。 ご清聴ありがとうございました!
何らかのドキュメント