diff --git a/src/Robokassa.spec.ts b/src/Robokassa.spec.ts index 5716ed1..3c0733b 100644 --- a/src/Robokassa.spec.ts +++ b/src/Robokassa.spec.ts @@ -47,6 +47,23 @@ describe('#Robokassa', () => { }); }); + it('should pass InvId=0 when invId is not specified', () => { + const result = robokassa.generatePaymentUrl({ + description: 'Товар 1', + outSum: '100.00', + + resultUrl2: 'https://result.robokassa.ru', + successUrl2: 'https://success.robokassa.ru', + successUrl2Method: 'GET', + failUrl2: 'https://fail.robokassa.ru', + failUrl2Method: 'GET', + }); + + expect(result).toEqual( + 'https://auth.robokassa.ru/Merchant/Index.aspx?MerchantLogin=my_merchant_login&Description=%D0%A2%D0%BE%D0%B2%D0%B0%D1%80%201&OutSum=100.00&ResultUrl2=https%3A%2F%2Fresult.robokassa.ru&SuccessUrl2=https%3A%2F%2Fsuccess.robokassa.ru&SuccessUrl2Method=GET&FailUrl2=https%3A%2F%2Ffail.robokassa.ru&FailUrl2Method=GET&InvId=0&SignatureValue=0fde8eb3057dabcdf1597ddcfcce35cd', + ); + }); + describe('#generatePaymentUrl', () => { it('should generate url with minimum parameters', () => { const result = robokassa.generatePaymentUrl({ diff --git a/src/internal/calculateSendingSignatureValue.spec.ts b/src/internal/calculateSendingSignatureValue.spec.ts index 2df867e..c0a4866 100644 --- a/src/internal/calculateSendingSignatureValue.spec.ts +++ b/src/internal/calculateSendingSignatureValue.spec.ts @@ -18,6 +18,26 @@ describe('#calculateSendingSignatureValue', () => { expect(result).toEqual('my_merchant_login:100.00:42:my_password1'); }); + it('should build string WITH additional parameters', () => { + const result = buildSendingSignatureString({ + password1: 'my_password1', + merchantLogin: 'my_merchant_login', + order: { + description: 'my_description', + outSum: '100.00', + resultUrl2: 'my_result_url2', + successUrl2: 'my_success_url2', + successUrl2Method: 'GET', + failUrl2: 'my_fail_url2', + failUrl2Method: 'GET', + }, + }); + + expect(result).toEqual( + 'my_merchant_login:100.00:my_result_url2:my_success_url2:GET:my_fail_url2:GET:my_password1', + ); + }); + it('should build string WITH sorted user parameters', () => { const result = buildSendingSignatureString({ password1: 'my_password1', diff --git a/src/internal/calculateSendingSignatureValue.ts b/src/internal/calculateSendingSignatureValue.ts index ff834ee..4dcef43 100644 --- a/src/internal/calculateSendingSignatureValue.ts +++ b/src/internal/calculateSendingSignatureValue.ts @@ -24,6 +24,11 @@ export const buildSendingSignatureString = ({ order.outSumCurrency, order.userIp, order.receipt ? JSON.stringify(order.receipt) : undefined, + order.resultUrl2, + order.successUrl2, + order.successUrl2Method, + order.failUrl2, + order.failUrl2Method, password1, ...signatureUserParams, ]; diff --git a/src/types/IRobokassaOrder.ts b/src/types/IRobokassaOrder.ts index f7473d9..c65a2b5 100644 --- a/src/types/IRobokassaOrder.ts +++ b/src/types/IRobokassaOrder.ts @@ -1,6 +1,8 @@ import { IRobokassaReceipt } from './IRobokassaReceipt'; import { RobokassaUserParameterKey } from './RobokassaUserParameterKey'; +type Method = 'GET' | 'POST'; + export interface IRobokassaOrder { /*** Описание покупки, можно использовать только символы английского или русского алфавита, цифры и знаки препинания. @@ -150,4 +152,28 @@ export interface IRobokassaOrder { */ previousInvoiceId?: number; + + /** + * Дополнительное оповещение об успешной оплате позволяет получить уведомление на альтернативный адрес, отличный от указанного в настройках магазина(Result URL). + * Для операций с холдами на этот адрес направляется уведомление об успешной предавторизации, и это единственный способ его получить. + * + * https://docs.robokassa.ru/pay-interface/#notification + */ + resultUrl2?: string; + + /** + * Дополнительная возможность переадресации покупателя после успешной оплаты на адрес отличный от Success URL указанный в настройках магазина. + * + * https://docs.robokassa.ru/pay-interface/#return + */ + successUrl2?: string; + successUrl2Method?: Method; + + /** + * Дополнительная возможность переадресации покупателя после неуспешной оплаты на адрес отличный от Fail URL указанный в настройках магазина. + * + * https://docs.robokassa.ru/pay-interface/#return + */ + failUrl2?: string; + failUrl2Method?: Method; }