BILLmanagerがよりオープンになりました





久しぶりにHabrに戻ります。 そして本日、BILLmanager用の独自のアドオンモジュールをすばやく簡単に作成する方法をお伝えしたいと思います。 すでに実装したプラグインのソースコードが利用可能になったため、このタスクは大幅に簡素化されました。



BILLmanagerの追加モジュールを取得する可能性は、以前にいくつかの方法で存在していました。



最初のオプションは、ISPsystemでモジュールを注文することです。 結果の製品は、BILLmanagerの将来のすべてのバージョンでサポートされ、他のユーザーとの接続にも使用できるようになります。 ただし、タイトなロードマップにより、目的のプラグインのリリースが長時間遅れることがあります。



2番目の選択肢は、テクノロジーパートナーに連絡することですが、この場合、製品サポートの問題はパートナーとさらに対処する必要があります。



最後に、3番目のオプションはモジュールを自分で作成することです。 バージョン5.58以降、次のような印象的なプログラミングエクスペリエンスは不要になります。 現在、BILLmanager開発キットには、8つの既存のプラグインのソースコード例が含まれています。



  1. cpanel-同じ名前のコントロールパネルとの統合を提供します。
  2. epp-ドメイン名レジストラをサポートするEPPプロトコルと対話するための汎用ハンドラー。
  3. webnames-このドメインレジストラと対話します。
  4. thesslstore-SSL証明書を購入するためのモジュール。
  5. paypal-この支払いシステムを介して支払いを受け取るためのプラグイン。
  6. privatbank-銀行請求との相互作用;
  7. remotemail-メールゲートウェイ。
  8. smsc-SMSセンター会社のSMSゲートウェイ。


サンプルを含むパッケージを入手するには、BILLmanagerをインストールする必要があります(これを行う方法については、 こちらをご覧ください )。 インストールプロセス中に、製品の目的のバージョン(Standard、Advanced、またはCorporate)を選択してから、billmanager- [selected_ option] -develパッケージ(たとえば、yum install billmanager-corporate-devel)をインストールします。

develパッケージをインストールすると、例は次のようになります。

/ usr / local / mgr5 / src /サンプル



サンプルと利用可能なドキュメントを用意して、ほぼすべての支払いシステム、ドメインレジストラー、SMSゲートウェイなどのモジュールを開発できます。

Q-telecomモバイルオペレーターとやり取りするSMSゲートウェイを作成するプロセスを検討してください。 ソースコード-カットの下は少し低くなります。



モジュールを変更するときに、Q-telecom APIの説明が使用されました。 ここにあります



APIのドキュメントには、例からのSMSゲートウェイだけでなく、httpプロトコルを介して対話が実行されることが示されています。 これを活用してください。

ディレクトリ/ usr / local / mgr5 / src / examples / smscのコピーを作成し、gwqtcという名前を付けます。

内部には3つのファイルがあります。xmlは、BILLmanagerでプラグインがどのように見えるかを担当します。 cppはバックエンドを説明します。 メイクファイルには、このすべての美しさをバイナリにアセンブルする方法をコンパイラに指示するものが含まれています。



最も難しい部分から始めましょう-gwsmsc.cppを作り直します。 名前をgwqtc.cppに変更してから、テキストエディターでファイルを開きます。 ポストリクエストの作成を担当するコードでは、変数の名前をQ-telecomの担当者によって記述された名前に変更します。 パラメータgzip = noneを追加します。これにより、失敗した場合にエラーテキストが読みやすくなります。 QTCが理解できない行は削除されます。



どこで何が変わったのか




次に、ファイル内で検索し、「smsc」を「qtc」に変更します(その結果、変更は2行になります)。 これで、gwqtc.cppファイルの準備ができました。 私たちがした最も難しいこと。



xmlを実行してみましょう。名前をbillmgr_mod_gwqtcに変更します。 「SMS-center」内で「Q-telecom」に書き換え、「smsc」を「qtc」に書き換えます。 外観が完成しました。

メイクファイルでは、すべてが非常に単純です。どこでも「smsc」を「qtc」に変更します。



make installコマンドでモジュールをコンパイルおよびインストールします。システムにない場合は、gcc-c ++パッケージをインストールすることを忘れないでください。

BILLmanagerでのこれらすべてのアクションの後、メニュー「統合」→「メッセージモジュール」→「作成」に、新しいモジュールQ-telecomが表示されます。



BILLmanagerでの表示




Q-telecomとの契約の締結時に受け取った設定を行うことは残っています-そして、あなたはそれを使用することができます!



最終的な形で約束された情報源を以下に示します。



gwqtc.cpp
#include <gate/gatemodule.h> #include <defines.h> #include <mgr/mgrlog.h> #include <mgr/mgrrpc.h> #include <sstream> #define BINARY_NAME "gwqtc" MODULE("notify"); namespace gate { class QTC : public Module { public: QTC() : Module(BINARY_NAME) { } virtual mgr_xml::Xml Features() const { mgr_xml::Xml out; mgr_xml::XmlNode features = out.GetRoot().AppendChild("features"); features.AppendChild("feature").SetProp("name", GATE_CMD_OUTGOING); out.GetRoot().AppendChild("notify_module", "ntsms"); return out; } virtual mgr_xml::Xml Ingoing(mgr_xml::Xml& msg) const { mgr_xml::Xml out; return out; } virtual void Outgoing(mgr_xml::Xml& msg) const { string message = msg.GetRoot().FindNode("message"); string project_id = msg.GetRoot().FindNode("project").FindNode("id"); string phone = msg.GetRoot().FindNode("user").FindNode("phone"); str::inpl::RemoveNonDigit(phone); string sender = GateParam("originator_" + project_id); if (sender.empty()) sender = GateParam("originator"); mgr_rpc::HttpQuery http; http.EnableCookie(); http.AcceptAnyResponse(); std::stringstream out; http.Post("http://service.qtelecom.ru/public/http/", "user=" + str::url::Encode(GateParam("login")) + "&pass=" + str::url::Encode(GateParam("psw")) + "&target=" + str::url::Encode(phone) + "&message=" + str::url::Encode(message) + "&gzip=none" "&sender=" + str::url::Encode(sender) + "&action=post_sms", out); Debug("response: %s", out.str().c_str()); mgr_xml::XmlString result(out.str()); string result_str = result.GetNode("//result/error"); if (!result_str.empty()) throw mgr_err::Error(result_str); } }; } // END NAMESPACE GATE RUN_MODULE(gate::QTC)
      
      







billmgr_mod_gwqtc.xml
 <?xml version="1.0" encoding="UTF-8"?> <mgrdata> <plugin name="gwqtc"> <group>gateway</group> <author>BILLmanager team</author> </plugin> <metadata name="gateway.gwqtc"> <form> <field name="login"> <input type="text" name="login" required="yes" identifier="yes"/> </field> <field name="psw"> <input type="password" name="psw" required="yes"/> </field> <field name="originator" project="yes"> <input type="text" name="originator"/> </field> </form> </metadata> <lang name="ru"> <messages name="plugin"> <msg name="desc_short_gwqtc">Q-telecom</msg> <msg name="desc_full_gwqtc"> Q-telecom</msg> <msg name="price_gwqtc"></msg> </messages> <messages name="gateway.gwqtc"> <msg name="login"></msg> <msg name="psw"></msg> <msg name="translit"></msg> <msg name="originator"></msg> <msg name="hint_login">    Q-telecom</msg> <msg name="hint_psw">   </msg> <msg name="hint_translit">    </msg> <msg name="hint_originator">   </msg> </messages> <messages name="gateway_include"> <msg name="module_gwqtc"> Q-telecom</msg> <msg name="gwqtc">Q-telecom</msg> <msg name="desc_gwqtc"> </msg> </messages> </lang> <lang name="en"> <messages name="plugin"> <msg name="desc_short_gwqtc">SMS-center</msg> <msg name="desc_full_gwqtc">Server SMS-center</msg> <msg name="price_gwqtc">Free</msg> </messages> </lang> </mgrdata>
      
      







メイクファイル
 MGR = billmgr PLUGIN = gwqtc CFLAGS += -I/usr/local/mgr5/include/billmgr CXXFLAGS += -I/usr/local/mgr5/include/billmgr WRAPPER += gwqtc gwqtc_SOURCES = gwqtc.cpp gwqtc_FOLDER = gate gwqtc_LDADD = -lmgr -lmgrdb gwqtc_DLIBS = gatemodule BASE ?= /usr/local/mgr5 include $(BASE)/src/isp.mk
      
      







あなたと私がちょうど見つけたように、ほんの数行が例に関して変更されました。 つまり、プラグインを作成するためのプログラミングエクスペリエンスはわずかで十分であり、パートナーはサンプルに基づいて製品の品質を向上させることができます。

ちなみに、開発したアドオンを無料で、または他の会社のためにいくらかのお金で配置できるモジュールストアを立ち上げる予定です。



この記事がBILLmanagerユーザーに役立つことを願っています。 記載されているプロセスでの成功についてお聞かせいただければ幸いです。



All Articles