diff --git a/Merchant.php b/Merchant.php index a63e267..ad89ca3 100644 --- a/Merchant.php +++ b/Merchant.php @@ -39,7 +39,7 @@ public function payment($nOutSum, $nInvId, $sInvDesc = null, $sIncCurrLabel = nu { $url = $this->baseUrl; - $sSignatureValue = $this->generateSignature($nOutSum, $nInvId); + $sSignatureValue = $this->generateSignature($nOutSum, $nInvId, $shp); $url .= '?' . http_build_query([ 'MrchLogin' => $this->sMerchantLogin, @@ -80,7 +80,7 @@ private function implodeShp($shp) return implode(':', $shp); } - private function generateSignature($nOutSum, $nInvId) + private function generateSignature($nOutSum, $nInvId, $shp = []) { if ($nInvId === null) { // MerchantLogin:OutSum:Пароль#1 @@ -90,6 +90,10 @@ private function generateSignature($nOutSum, $nInvId) $signature = "{$this->sMerchantLogin}:{$nOutSum}:{$nInvId}:{$this->sMerchantPass1}"; } + if (!empty($shp)) { + $signature .= ':' . $this->implodeShp($shp); + } + return strtolower($this->encryptSignature($signature)); } diff --git a/tests/unit/MerchantTest.php b/tests/unit/MerchantTest.php index 0eb0615..45725d2 100644 --- a/tests/unit/MerchantTest.php +++ b/tests/unit/MerchantTest.php @@ -67,9 +67,11 @@ public function testRedirectUrlUserParams() 'shp_login' => 'user1', ]; + $signatureHash = md5('demo:100:1:password_1:shp_id=1:shp_login=user1'); + $returnUrl = $merchant->payment(100, 1, 'Description', null, null, 'en', $userParams, true); - $this->assertEquals("https://auth.robokassa.ru/Merchant/Index.aspx?MrchLogin=demo&OutSum=100&InvId=1&Desc=Description&SignatureValue=8a50b8d86ed28921edfc371cff6e156f&Culture=en&IsTest=1&shp_id=1&shp_login=user1", $returnUrl); + $this->assertEquals("https://auth.robokassa.ru/Merchant/Index.aspx?MrchLogin=demo&OutSum=100&InvId=1&Desc=Description&SignatureValue={$signatureHash}&Culture=en&IsTest=1&shp_id=1&shp_login=user1", $returnUrl); } public function testResponseRedirect()