meraproject/module/integration/robokassa/model.php

82 lines
2.7 KiB
PHP
Raw Normal View History

<?
namespace integration;
class Robokassa {
var $login = '';
var $pass1 = '';
var $pass2 = '';
var $isTest = false;
var $isRecurrent = false;
var $previousInvoiceID = null;
public function __construct($login,$pass1,$pass2,$isTest = false,$isRecurrent = false) {
$this->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 '';
}
}