SOAPを介してQIWIを操作するためのライブラリ

たまたまQIWIを通じて支払いの受け入れを有効にすることにしました。 すぐに言ってやった! しかし、開発プロセス中にのみ、qiwi開発者からのコード例の悲惨さに直面する必要がありました。

キーウィからのリクエストを受け入れるサーバーのコード
<?php /** *       QIWI . * SoapServer   SOAP-,    login, password, txn, status, *      Param    updateBill   TestServer. * *        updateBill. */ $s = new SoapServer('IShopClientWS.wsdl', array('classmap' => array('tns:updateBill' => 'Param', 'tns:updateBillResponse' => 'Response'))); // $s = new SoapServer('IShopClientWS.wsdl'); $s->setClass('TestServer'); $s->handle(); class Response { public $updateBillResult; } class Param { public $login; public $password; public $txn; public $status; } class TestServer { function updateBill($param) { //           $f = fopen('c:\\phpdump.txt', 'w'); fwrite($f, $param->login); fwrite($f, ', '); fwrite($f, $param->password); fwrite($f, ', '); fwrite($f, $param->txn); fwrite($f, ', '); fwrite($f, $param->status); fclose($f); //  password, login //      $param->status      if ($param->status == 60) { //   //      ($param->txn),    } else if ($param->status > 100) { //    ( ,      ..) //      ($param->txn),    } else if ($param->status >= 50 && $param->status < 60) { //     } else { //    } //     //           ,   0 // $temp->updateBillResult = 0 //     (,  ),    //    QIWI           0 //    24  $temp = new Response(); $temp->updateBillResult = 0; return $temp; } } ?>
      
      





もちろん、この例は網羅的であることを理解していますが、「もっと準備ができた」何かをレイアウトすることは可能だったのでしょうか? このシステムは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) { /** @var QiwiBill $bill */ $row = $myMegaService->findByKey( //      $bill->id ); if (!$row) { throw new \Exception('  '); } $myMegaService->process($row); // -    return $myMegaService->status(); //     QIWI. 0 -   }; //     $theQiwiObject->processRequest($callback); //    text/html, qiwi    (  ,   ) header('Content-Type: text/xml; charset=utf-8');
      
      





便利ですか? そう思う。 単純に代替パスと比較できます 。 したがって、ライブラリの利点:



もちろん、短所もあります。



リンク: プロトコルの説明サンプルコードリポジトリ

システムがねじ込まれた後、ユーザーJekaRuからkiwiを操作するための既製のライブラリについて学びました 。 したがって、より多くの選択肢があります。 :)

ご清聴ありがとうございました。 コードの清潔さについてコメントがある場合は、お気軽にお問い合わせください。



UPD:Readme.mdに説明を追加し、ライブラリをPSR-2に転送しました

UPD2:lib、nick4fake / ishop-> werkint / qiwiを移動しました。 互換性のために、古いコードは古いアドレスのままにしました。



All Articles