1C-BitrixからBASHへの標準交換:インポートおよびオファーディレクトリのXMLファイルの増分アップロード

1C-Bitrixの利点について話すとき、最初の言葉で彼らはシステムと1Cの簡単な統合に言及します。 Bitrixは、XMLファイルの形式を定義するCommerceML形式のデータ転送を通じて1Cと対話します。 これに加えて、Bitrixは、1Cとサイト間でこれらのXMLファイルを交換するための標準も提供します。 交換は、1Cから通常のHTTP GETおよびPOST要求をサイトに送信し、コマンドの結果を判断する簡単な回答をサイトから受信することで構成されます。







通常、1Cの一部として、特定の「サイトとの標準的な交換」があると宣言されています。これは、組み込み後すぐに機能するはずです。 実際には、交換の実装は、最初に現れるような些細な作業ではありません。 1C Webサイトとの交換モジュールがシステムを途方もなくロードし、特定のニーズに対して改善が必要であるという苦情があります。 つまり、実際には交換は行われているように見えますが、それを正常に機能させるには、努力する必要があります。







標準交換に参加する理由はいくつかあります。









Bitrix側のデータロードに変更を加えることは意味がなく、その機能を実行します。 一方、1Cデータベースから直接データを取得することも、データベースの複雑さとセキュリティの問題のため、最適なソリューションではありません。 多くの場合、ボトルネックは1Cとサイト間のリクエストの交換の段階で正確に取得されるため、最適な作業スキームは次のようになります。標準の1CアップロードはXMLファイルを生成し、作業を終了します。 この設定は、交換モジュールで使用できます。







次に、結果のファイルを取得し、必要に応じて変更し、1Cの代わりにサイトに送信します。 したがって、交換プロセスを完全に制御し、障害が発生する段階を把握します-発生した場合、ダウンロードログを保持し、XMLファイルをアーカイブし、独自のスケジュールを作成し、交換に関して1Cをほとんど無視できます。







交換プロトコルの実装はすでに存在しますが、それらはすべて、インターネットサイトを表示する要求と変わらない単純なHTTP要求を送信する原理の不完全な理解を示唆する非常に洗練されたツールを使用します。







このスクリプトを作成する目的は次のとおりです。









このスクリプトはBASHで作成され、会社の内部サーバーで動作することになっています。これは通常、Web開発者から常に利用可能であり、会社の内部ネットワーク上にあります。 このスクリプトは、商品の交換、天びん、情報ブロックの読み込み、注文、注文ステータスを実装する同様のスクリプトファミリの一部です。 プロジェクトはgithubに投稿され、いくつかのオンラインストアの運営を提供します。







BASH 1c交換スクリプトとbitrix



このプロジェクトは、bitrexchangeと呼ばれるbitrexchangeと呼ばれます。 このプロジェクトには、bashで記述され、同様の交換を実行する一連のスクリプトが含まれます。







たとえば、最も一般的に使用される交換が考慮されます。CommerceML標準による標準交換スクリプト1CおよびBitrix:インポートおよびオファーディレクトリのXMLファイルの増分アップロード。







スクリプトの最小バージョンが提供されます。 このシリーズの次の記事では、スクリプトの行ごとの分析について説明します。







#!/bin/bash # # bitrexchange - bitrix exchange #    1C     CommerceML #   XML   import  offers # set -e cd $(dirname $0) cdir=$(pwd)"/" remote_dir="/mnt/localwinserver_fs/import/webdata/" zip_fname="catalogue.zip" xml_files="import0_1.xml offers0_1.xml" ctime=$(date +%Y-%m-%d-%H%M) headers="--header=\"User-Agent: 1C+Enterprise/8.2\" --header=\"Accept-Encoding: deflate\"" login="import" password="yourpasswordonbitrix" baseurl="http://yourinternetshop.com/bitrix/admin/1c_exchange.php" ret_line=$( wget $headers --user=${login} --password=${password} --auth-no-challenge -O - -q "${baseurl}?type=sale&mode=checkauth" ) read -a ret_ar <<< $ret_line if [ ${ret_ar[0]} != "success" ]; then echo "Login error\r\n"; exit -1; fi sessvar=${ret_ar[1]} sessid=${ret_ar[2]} echo sessid=$sessid ret=$(wget $headers --header="Cookie: ${sessvar}=${sessid}" -O - -q "${baseurl}?type=catalog&mode=init"); echo $ret ret=$(wget $headers --post-file ${zip_fname} --header="Cookie: ${sessvar}=${sessid}" -O - -q "${baseurl}?type=catalog&mode=file&filename=import.zip"); echo $ret for fname in $xml_files; do st="progress"; while [ "$st" = "progress" ]; do ret=$(wget $headers --header="Cookie: ${sessvar}=${sessid}" -O - -q "${baseurl}?type=catalog&mode=import&filename=${fname}"); st=$( <<< "$ret" head -n1 | cut -c1-8); echo "$ret" | iconv -f cp1251 -t utf-8; done done
      
      





ご清聴ありがとうございました!







シリーズの次の記事:標準交換スクリプト1CおよびBitrixの詳細かつ行ごとの分析








All Articles