QIWI рднреБрдЧрддрд╛рди рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Yii рдПрдХреНрд╕рдЯреЗрдВрд╢рди

рдЧреНрд░рд╛рд╣рдХ QIWI рднреБрдЧрддрд╛рди рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрд╡рд╛ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
рдЪреВрдВрдХрд┐ рд╕реЗрд╡рд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдмрдЯрди рдХреЛ рдЕрдкрдиреЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдереА, рдЗрд╕рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВрдЖрдИ рд╡реЙрд▓реЗрдЯ (рдЬреЛ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдлреЛрди рдирдВрдмрд░ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЪреВрдБрдХрд┐ рдЙрд╕ рд╕рдордп рдореИрдВ Yii рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдВрдиреЗ рдЬреЛ рдкрд╣рд▓реА рдЪреАрдЬрд╝ рддрдп рдХреА рдереА, рд╡рд╣ рдПрдХ рд╕рдорд╛рдкреНрдд рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рддрд▓рд╛рд╢ рдереАред рдЦреИрд░, рдЪреВрдВрдХрд┐ рдЦреЛрдЬреЛрдВ рдХрд╛ рдХреЛрдИ рдирддреАрдЬрд╛ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рд▓рд┐рдЦрдирд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рд╕реЗрд╡рд╛ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреА рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН: HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓, XML рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ SOAP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (QIWI рд╕реЗрд╡рд╛ рд╢рд░реНрддреЗрдВ), SOAP рдХреЛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ред
рдЖрдк рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ QIWI SOAP рд╕реЗрд╡рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ Yii рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рдкрд╣рд▓рд╛ рдЕрдиреБрднрд╡ рд▓реЗрдЦрди рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИред

рдХрдЯ рдХреЗ рдиреАрдЪреЗ рдЖрдкрдХреЛ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдЦреБрдж рдорд┐рд▓реЗрдЧрд╛ (QIWI рд╕реЗ рд╕реНрдкреЗрдпрд░ рдкрд╛рд░реНрдЯреНрд╕ рдХреЗ рдмрд┐рдирд╛, рд▓реЗрдЦ рдХреЗ рдиреАрдЪреЗ рд▓рд┐рдВрдХ рджреЗрдЦреЗрдВ)ред

ext.ishop.Ishop.php
<?php /** * Yii Extension to work with a payment system QIWI. * This extension allows you to interact with the service QIWI over SOAP. * * <p>The following functions:</p> * <ul> * <li>Creating an account.</li> * <li>Cancel the account.</li> * <li>Checking account status.</li> * </ul> * * CONFIGRATION * <code> * 'components' => array( * 'ishop' => array( * 'class' => 'ext.ishop.IShop', * 'options' => array( * 'login' => LOGIN, * 'password' => PASSWORD * ) * ) * ), * <code> * * <p>TERMINATION CODES</p> * <ul> * <li>0 Success</li> * <li>13 Server is busy, please repeat your request later</li> * <li>150 Authorization error (wrong login/password)</li> * <li>215 Bill with this txn-id already exists</li> * <li>278 Bill list maximum time range exceeded</li> * <li>298 No such agent in the system</li> * <li>300 Unknown error</li> * <li>330 Encryption error</li> * <li>370 Maximum allowed concurrent requests overlimit</li> * </ul> * * <p>STATUSES REFERENCE</p> * <ul> * <li>50 Made</li> * <li>52 Processing</li> * <li>60 Payed</li> * <li>150 Cancelled (Machine error)</li> * <li>160 Cancelled</li> * <li>161 Cancelled (Timeout)</li> * </ul> * * * @author nek * @package IShop * @example example/example.php * @see http://ishop.qiwi.ru * @see https://ishop.qiwi.ru/docs/OnlineStoresProtocols_SOAP_EN.pdf */ class IShop extends CApplicationComponent { /** * Shop login (ID) * @var integer */ public $login; /** * Shop password * @var string */ public $password; /** * Path to the wsdl document * @var string */ 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(); } } /** * Creating a bill * * @param string $user тАУ user ID (MSISDN) * @param float $amount тАУ amount of bill * @param string $comment тАУ comment to the bill displayed to the user * @param string $txn тАУ unique bill ID * @param boolean $create тАУ flag to create a new user (if he's not registered in the system yet) * @throws CException * @return number */ 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.')); } // $service = $this->setService(); $params = new createBill(); $params->login = $this->login; $params->password = $this->password; $params->user = $user; $params->amount = $amount; $params->comment = $comment; $params->lifetime = date('dmY H:i:s', strtotime('+1 day ago')); $params->txn = $txn; $res = $service->createBill($params); return (integer) $res; } /** * Cancel a bill * * @param string $txn тАУ unique bill ID * @throws CException * @return number */ public function cancelBill( $txn ) { if (strlen($txn) > 30) { throw new CException(Yii::t('IShop', 'Row size can not exceed 30 bytes.')); } $service = $this->setService(); $params = new cancelBill(); $params->login = $this->login; $params->password = $this->password; $params->txn = $txn; $res = $service->cancelBill($params); $return = $res->cancelBillResult; return (integer) $return; } /** * Check bill status * * @param string $txn тАУ unique bill ID * @throws CException * @return number */ public function checkBill( $txn ) { if (strlen($txn) > 30) { throw new CException(Yii::t('IShop', 'Row size can not exceed 30 bytes.')); } $service = $this->setService(); $params = new checkBill(); $params->login = $this->login; $params->password = $this->password; $params->txn = $txn; $res = $service->checkBill($params); $return = $res; return (integer) $return; } /** * Update bill status * * @param integer $status - bill status */ public function updateBill( $status = 0 ) { $server = $this->setServer(); $params = new IShopServer(); $params->updateBill($status); return; } private function setService() { Yii::import('ext.ishop.vendor.IShopServerWSService'); $service = new IShopServerWSService($this->wsdlPath.'/IShopServerWS.wsdl',array( 'location' => 'https://ishop.qiwi.ru/services/ishop', 'trace' => 1 )); return $service; } private function setServer() { Yii::import('ext.ishop.vendor.IShopServer'); $server = new SoapServer($this->wsdlPath.'/IShopClientWS.wsdl', array( 'classmap' => array( 'tns:updateBill' => 'Param', 'tns:updateBillResponse' => 'Response' ) )); $server->setClass('IShopServer'); $server->handle(); } } 


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмрд┐рд▓рд┐рдВрдЧ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
 $user = 9181234567; $amount = 100; $coment = 'Test pay'; $txn = 123; $return = Yii::app()->ishop->createBill($user, $amount, $comment, $txn); echo $return; 


QIWI рд╕реЛрдк рд╕реЗрд╡рд╛ рдкреНрд░рд▓реЗрдЦрди
Php рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг (рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)
QIWI рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Yii рдПрдХреНрд╕рдЯреЗрдВрд╢рди (wsdl рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрд┐рдЯ)

Source: https://habr.com/ru/post/In122760/


All Articles