たまたまQIWIを通じて支払いの受け入れを有効にすることにしました。 すぐに言ってやった! しかし、開発プロセス中にのみ、qiwi開発者からのコード例の悲惨さに直面する必要がありました。
キーウィからのリクエストを受け入れるサーバーのコード<?php $s = new SoapServer('IShopClientWS.wsdl', array('classmap' => array('tns:updateBill' => 'Param', 'tns:updateBillResponse' => 'Response')));
もちろん、この例は網羅的であることを理解していますが、「もっと準備ができた」何かをレイアウトすることは可能だったのでしょうか? このシステムはPHP言語のように人気があるため、このシステムに接続しなければならない人々の生活を簡素化するために、ライブラリをすぐに
公開リポジトリに置くことにしました。 私の最近の
質問では誰もこの投稿に反対しなかったので、ここに投稿します。
ライブラリにはクライアントとサーバーの両方の部分があります。 単純に接続します
-git経由でアップロードするか、コンポーザーに依存関係を追加します(
werkint / qiwi )。 主な作業は、Qiwi \ Clientクラスのインスタンスを通過します。 たとえば、それから継承し、コンストラクターでストアの名前/パスワードを指定し、クラスをSymfony2サービスとして設計できます(これは私たちのために行われます)。
接続中 <?php namespace MyOwnMegaPrefix\Qiwi; use MyOwnMegaPrefix\Settings, Werkint\Qiwi; class MyQiwi extends Qiwi\Client { protected $settings; public function __construct( Settings $settings // , ) { $this->settings = $settings; parent::__construct( $this->settings->get('qiwi.login'), $this->settings->get('qiwi.pass') ); } }
クライアント(これはSOAPサーバーにリクエストを送信するクライアント)として動作することは基本的です-Qiwi \ Clientのインスタンスを取得し、適切なメソッドを呼び出します。 これらは、php-soapを操作し、パラメーターを変換し、リターンコードをより詳細な状態に変更するためのクラスの単なるラッパーです。 日付フィールドは\ DateTimeにあり、他のすべてはqiwi apiに対応しています(ログイン/パスワードのみを複製する必要はありません)。
サーバーでの作業はもう少し複雑です。 サーバーメソッドは非常にトリッキー(SOAP)と呼ばれるため、クロージャーを使用して要求を処理することにしました。 はい、
設定で x509証明書を無効にすることを忘れないでください。 WSSEをphp-soapに固定する方法をまだ見つけていません(私が理解している限り、誰もそれを見つけませんでした)。 Javaコードの例に証明書のチェックがあるのは残念です。
キーウィからのリクエストを受け入れるサーバーのコード use Werkint\Qiwi\ServerMethods\CheckBillResponse as QiwiBill; $callback = function ($bill) use (&$myMegaService) { $row = $myMegaService->findByKey(
便利ですか? そう思う。 単純に
代替パスと比較でき
ます 。 したがって、ライブラリの利点:
- SOAP、WSDLなどについて考える必要はありません。 すべてが機能します。
- サーバーの署名チェックがあり、ステータスの更新後、チェックがサーバーから再ロードされます(doki kiwiの推奨に従って)。
- PHPDocとすべてが揃っているので、間違いを犯すのはより困難です。 いくつかの場所では、追加の説明があります(レーキの場所)。
- ステータスは復号化されます(コード->テキスト)。
- packagistがいます。接続には2分かかります。
- オートローダーで正常に動作します。
もちろん、短所もあります。
ある種の愚かなタイプは、彼のライブラリーを通して小切手を書くことを提供します。- PHP 5.3 クロージャー+名前空間。 これがあなたに合わないなら、新しいものを切ることは難しくありません。
リンク:
プロトコルの説明 、
サンプルコード 、
リポジトリシステムがねじ込まれた後、ユーザー
JekaRuからkiwiを操作するための
既製のライブラリについて学び
ました 。 したがって、より多くの選択肢があります。 :)
ご清聴ありがとうございました。 コードの清潔さについてコメントがある場合は、お気軽にお問い合わせください。
UPD:Readme.mdに説明を追加し、ライブラリをPSR-2に転送しました
UPD2:lib、nick4fake / ishop-> werkint / qiwiを移動しました。 互換性のために、古いコードは古いアドレスのままにしました。