PHPツールを使用してOZON(商人)APIを操作する

私たちは大規模なオンラインストアに取り組んでいます。 そのため、UT(1C Trade Management)からO Ozonの注文を管理する必要がありました。



意味は次のとおりです。PostgreSQLデータベースがあり、1Cはこのデータベースで動作し、注文のデータを入力し、注文のステータスを変更します。 また、サーバー上にあり、3分ごとにクラウンで実行されるPHPスクリプトもあります。 このスクリプトは何をすべきですか?





トークンの取得に問題はありませんでした。 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);
      
      





したがって、サイトからオゾンの注文を管理できます。



私の記事が誰かに役立つことを願っています。 ご清聴ありがとうございました!



何らかのドキュメント



All Articles