login = $login; $this->pass1 = $pass1; $this->pass2 = $pass2; $this->isTest = $isTest; $this->isRecurrent = $isRecurrent; } public function getLink($sum,$invId,$invDesc='',$receipt=null,$email=null){ $sum = floatval(number_format($sum,"2",".","")); /* $receipt = [ "sno" => "usn_income", "items" => [ [ "name" =>"Сервисы mstome", "quantity" => 1, "sum" => floatval($price), "payment_method" => "full_payment", "payment_object" => "service", "tax" => "none" ] ], ]; /**/ //$r_json = json_encode_($receipt); //$r_url = urlencode($r_json); $receiptJson = urlencode(json_encode($receipt, 256)); $crc = self::getSignature( self::getSignatureString( $sum, $invId, $receiptJson ) ); $action_url = 'https://auth.robokassa.ru/Merchant/Index.aspx'; if($this->previousInvoiceID){ $action_url = 'https://auth.robokassa.ru/Merchant/Recurring'; } $url = $action_url."?MrchLogin=".$this->login."&OutSum=".$sum. "&InvId=$invId&SignatureValue=$crc&Encoding=utf-8". ($email?'&Email='.$email:''). ($receiptJson?'&Receipt='.urlencode($receiptJson):''). ($invDesc?'&Description='.urlencode(substr1251($invDesc,0,100)):''). ($this->previousInvoiceID?'&PreviousInvoiceID='.$this->previousInvoiceID:''). ($this->isTest?'&isTest=1':''). ($this->isRecurrent?'&isRecurrent=true':'') ; return $url; } private function getSignatureString($sum, $invId, $receiptJson) { return implode( ':', array_diff( array( $this->login, $sum, $invId, $receiptJson, $this->pass1, ), array( false, '', null ) ) ); } public function getSignature($string, $method = 'md5') { if (in_array($method, array('md5', 'ripemd160', 'sha1', 'sha256', 'sha384', 'sha512'))) { return strtoupper(hash($method, $string)); } //throw new \Exception('Wrong Signature Method'); return ''; } }