顧客は、特定のサービスをQIWI支払いシステムに統合することを望んでいました。
このサービスは端末にボタンを追加するには明らかに不十分であるため、パーソナライズされた
QIWIウォレット (携帯電話番号に関連付けられていない)を使用することにしました。
その時、私はYiiフレームワークを勉強していたので、最初に決めたのは完成した拡張機能を探すことでした。 さて、検索で結果が得られなかったため、独自に作成することにしました。
HTTPプロトコル、XMLプロトコル、SOAPプロトコル(QIWIサービス用語)など、サービスによって提供される相互作用のすべての可能性を研究した結果、SOAPが最も便利なものとして選ばれました。
このドキュメントでQIWI SOAPサービスの詳細を読むことができます。
Yiiの拡張機能を作成したのはこれが初めての経験であることに注意してください。
カットの下に、モジュール自体のソースコードがあります(QIWIのスペアパーツなし、記事の下部にあるリンクを参照)。
ext.ishop.Ishop.php<?php class IShop extends CApplicationComponent { public $login; public $password; public $wsdlPath; public $options = array(); protected $validOptions = array( 'login' => array('type' => 'integer'), 'password' => array('type' => 'string'), 'wsdlPath' => array('type' => 'string'), ); protected static function checkOptions($value, $validOptions) { if (!empty($validOptions)) { foreach ($value as $key=>$val) { if (!array_key_exists($key, $validOptions)) { throw new CException(Yii::t('IShop', '{k} is not a valid option', array('{k}'=>$key))); } $type = gettype($val); if ((!is_array($validOptions[$key]['type']) && ($type != $validOptions[$key]['type'])) || (is_array($validOptions[$key]['type']) && !in_array($type, $validOptions[$key]['type']))) { throw new CException(Yii::t('IShop', '{k} must be of type {t}', array('{k}'=>$key,'{t}'=>$validOptions[$key]['type']))); } if (($type == 'array') && array_key_exists('elements', $validOptions[$key])) { self::checkOptions($val, $validOptions[$key]['elements']); } } } } protected function defaults() { !isset($this->options['login']) ? $this->login = '' : $this->login = $this->options['login']; !isset($this->options['password']) ? $this->password = '' : $this->password = $this->options['password']; !isset($this->options['wsdlPath']) ? $this->wsdlPath = Yii::getPathOfAlias('ext.ishop.vendor') : $this->wsdlPath = $this->options['wsdlPath']; } public function init() { if (!extension_loaded('soap')) { throw new CException( Yii::t('Soap', 'You must have SOAP enabled in order to use this extension.') ); } else { self::checkOptions($this->options, $this->validOptions); $this->defaults(); } } public function createBill( $user, $amount, $comment, $txn, $create = true ) { if (strlen($txn) > 30) { throw new CException(Yii::t('IShop', 'Row size can not exceed 30 bytes.')); }
ユーザーへの請求の例: $user = 9181234567; $amount = 100; $coment = 'Test pay'; $txn = 123; $return = Yii::app()->ishop->createBill($user, $amount, $comment, $txn); echo $return;
QIWI SOAPサービスのドキュメントPHPでの使用例 (それに基づいて、拡張機能が実際に作成されます)
QIWIサービスを使用するためのYii拡張機能 (wsdlファイルを含む完全な作業キット)