82 lines
2.7 KiB
PHP
82 lines
2.7 KiB
PHP
<?
|
|
|
|
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 '';
|
|
}
|
|
|
|
|
|
|
|
}
|