Версия документа от 25.01.2021
🎓 Внимание! Если вы читаете этот документ после получения рассылки о необходимости обновления ключа, и вам, как техническому специалисту не достаточно информации для понимания "какой ключ надо обновить", то перейдите к "Шагу 3" ниже. Если требуется дополнительная информация, ответьте на полученную рассылку или напишите нам на адрес [email protected].
Если НЕ выполнить обновление ключа, то перестанут работать ваши выплаты, зачисление на кошелек или процесс идентификации.
- Найти в вашей системе где размещен старый ключ. Вот копия этого файла https://yadi.sk/d/crccbNzRy933MQ, она поможет вам найти этот файл в вашей системе.
- Взять файл new_key_cer_YooMoney_deposit_response_verify_with_all_chain по ссылке https://yadi.sk/d/MOfnA1IlB1F2Yg и во вторник, 09.02.2021 в 12:00 (время московское) замените в своей системе старый ключ на новый.
- Также мы рекомендуем в первом полугодии 2021 выполнить обновление хоста для передачи запросов по используемому у вас протоколу.
- old_key_cer_payouts_response_verify_until_12_02_21 - текущий ключ, которым вы проверяете нашу подпись;
- new_key_cer_YooMoney_deposit_response_verify_with_all_chain - новый ключ, которым надо заменить старый ключ в вашей системе, 9 февраля 2021 года в 12:00;
- new_key_p7b_YooMoney_deposit_response_verify_with_all_chain - этот же ключ, что в п.2, но в формате p7b (некоторым системам нужен ключ не в формате cer, а в формате p7b);
- yoomoney-all-chain - все наши цепочки сертификации (на случай, если у вас в системе они требуются); эти цепочки добавлены в файл new_key_cer_YooMoney_deposit_response_verify_with_all_chain.
Напоминаем, что до декабря 2020 использовался хост calypso.yamoney.ru и этот хост будет работать весь 2021 год, но мы рекомендуем перейти на новый хост согласно используемому у вас протоколу.
Протокол | Старый хост | Новый хост |
---|---|---|
Протокол выплат | calypso.yamoney.ru | payouts.yookassa.ru |
Протокол зачислений | calypso.yamoney.ru | deposit.yoomoney.ru |
Протокол идентификации кошелька * (makeIdentificationDeposition ) |
calypso.yamoney.ru | deposit.yoomoney.ru |
- Протокол выплат. Для контрагентов, кто выполняет зачисления на кошельки, карты, р/с или мобильные телефоны.
- Протокол зачислений. Для контрагентов банков-партнёров.
*
Протокол идентификации кошелька направляется контрагентам по запросу (в открытом доступе документации нет).
Для интеграции протокола выплат, зачислений или идентификации, нужно:
- Зарегистрироваться в ЮKassa как юридическое лицо (или ИП).
- Сгенерировать CSR запрос по инструкции https://yookassa.ru/docs/payouts/api/using-api/security#creating-csr (см. Получение SSL-сертификата для взаимодействия с серверами Яндекс.Денег) шаги 1-5.
- Сообщить IP, с которых вы будете выполнять запросы в нашу систему (это должны быть статические IPv4, не более 5 IP).
- Получить идентификатор для выплатного шлюза (AgentID).
Если у вас нет все этого, то мы надеемся, что прочтение примеров объяснит вам как работают эти протоколы.
- req.xml - тело запроса makeDeposition до упаковки в PKCS7 (см. пример ниже);
- req_signed.txt - упакованный в PKCS7 запрос req.xml;
- you.cer - сертификат, который выдан контрагенту (см. п.2 выше);
- private.key - ваш файл секретного ключа, на основе которого вы сделали CSR-запрос, и мы (ЮKassa) на основе него сделали you.cer;
- deposit.cer - ключ для дешифровки из PKCS7 формата ответов от ЮKassa на запросы makeDeposition или makeIdentificationDeposition;
- -passin
Использование пароля в private.key. Модификация
-passin pass:HIDDEN
в запросах: если вы создавали в п.2 (см. выше) приватный ключ (private.key) с паролем, то вместо HIDDEN напишите свой пароль, например,-passin pass:coolpassword
; если без пароля, то передавайте-passin pass:
, без HIDDEN. - req_signed.txt В lunix|unix указываем файл так: "-F file=@req_signed.txt". В Windows "--data-ascii @req_signed.txt".
- Ниже представлены примеры запросов makeDeposition или makeIdentificationDeposition с помощью утилиты curl и дешифровка полученного ответа c помощью утилиты openssl.
- Раскрытые в документе примеры не заменяют документацию. Они необходимы для случаев, когда программисту контрагента необходимо быстро вспомнить как организован процесс протокольного взамодействия с ЮKassa. Конечно вы можете работать без утилиты curl и openssl, используя свои инструменты, в данных примерах они используются как наиболее простые для понимания схемы работы.
Сформируйте содержимое запроса и упакуйте его в PKCS7
openssl smime -sign -in req.xml -nointern -nodetach -nocerts -nochain -outform PEM -out req_signed.txt -signer you.cer -inkey private.key -passin pass:HIDDEN
Отправьте запрос makeDeposition или makeIdentificationDeposition на сервер payouts.yookassa.ru:
curl -X POST --insecure -F file=@req_signed.txt --header "Content-type:application/pkcs7-mime" --cert you.cer --key private.key --pass HIDDEN --url https://payouts.yookassa.ru:9094/webservice/deposition/api/makeDeposition
<?xml version="1.0" encoding="UTF-8"?>
<makeDepositionRequest agentId="200807" dstAccount="257003392579" requestDT="2020-11-26T12:09:36.000Z" amount="200.00" clientOrderId="7093BCF45E8046ECB675" currency="10643" contract="Договор средств N 123 от 22.08.2020">
<paymentParams>
<skr_destinationCardSynonim>dN3VdS7WchWKmWIUfPmcMUUQpikZ.SC.201511</skr_destinationCardSynonim>
<pdr_birthDate>01.01.2000</pdr_birthDate>
<pdr_birthPlace>поселок Забайкальского края</pdr_birthPlace>
<pdr_lastName>Петров</pdr_lastName>
<pdr_firstName>Андрей</pdr_firstName>
<pdr_middleName>Александрович</pdr_middleName>
<pdr_docNumber>123123123</pdr_docNumber>
<pdr_docIssueYear>2015</pdr_docIssueYear>
<pdr_docIssueMonth>8</pdr_docIssueMonth>
<pdr_docIssueDay>12</pdr_docIssueDay>
<pdr_docIssuedBy>УВД РОВД, город Саратов</pdr_docIssuedBy>
<pdr_city>Новосибирск</pdr_city>
<pdr_postcode>630092</pdr_postcode>
<pdr_address>Новосибирская обл, Новосибирск, ул. Ольги Ивановны, дом N 4, кв. 5</pdr_address>
<smsPhoneNumber>79529234933</smsPhoneNumber>
<pof_offerAccepted>1</pof_offerAccepted>
<pdr_country>643</pdr_country>
</paymentParams>
</makeDepositionRequest>
- Используйте в качестве номера знак N (не используйте спецсимвол №).
<paymentParams></paymentParams>
: не забывайте, что все дополнительные параметры (pdr_birthDate
,pof_offerAccepted
и т.д.) должны быть внутри paymentParams.
Если вы пришли к этому пункту после рассылки про обновление ключа 09.02.2021, то вам потребуется данный "Шаг 3" и возможно "Шаг 1" и "Шаг 2".
Задача "Шага 3" - это дешифровка полученного ответа от payouts.yookassa.ru на ваш запрос makeDeposition или makeIdentificationDeposition (см. "Шаг 2" выше) и проверка подписи ответа. Напоминаем, что до декабря 2020 использовался хост calypso.yamoney.ru и этот хост будет работать весь 2021 год, но мы рекомендуем перейти на новый хост -- payouts.yookassa.ru.
В документации об этом шаге: https://yookassa.ru/docs/payouts/api/using-api/format#response. Не смотря на то, что в документации процесс указан как "проверка подписи", по факту ЮKassa отдает ответ в PKCS7 формате (base64) и чтобы его прочесть вашей системе, требуется сконвертировать ответ из base64 и проверить подпись:
$ openssl smime -verify -noverify -inform PEM -nointern -certfile "deposit.cer" -CAfile "deposit.cer" < resp.txt
<?xml version="1.0" encoding="UTF-8"?>
<makeDepositionResponse clientOrderId="12345" status="0" error="30" processedDT="2021-01-21T13:23:07.197+03:00" balance="1000.00" />
Verification successful
В ответе "Verification successful" как раз указывает, что подпись корректна.
Если ключ для дешифровки не валидный, или он пришел не от нас и подписан поддельным ключем. При проверке вы получите что-то вида:
$ openssl smime -verify -noverify -inform PEM -nointern -certfile "deposit-incorrect.cer" -CAfile "deposit-incorrect.cer" < resp.txt
Verification failure
139971507589568:error:2107C080:PKCS7 routines:PKCS7_get0_signers:signer certificate not found:../crypto/pkcs7/pk7_smime.c:421:
- Отправьте запрос на сервер ("Шаг 2", см. выше) и сохраните полученный ответ в файл resp.txt
curl -X POST --insecure -F file=@req_signed.txt --header "Content-type:application/pkcs7-mime" --cert you.cer --key private.key --pass HIDDEN --url https://payouts.yookassa.ru:9094/webservice/deposition/api/makeDeposition > resp.txt
Обратите внимание, что в вашем случае содержимое запроса makeDeposition или makeIdentificationDeposition может быть другим, но это не отмяет того, что ответ ЮKassa на запрос makeDeposition или makeIdentificationDeposition будет в base64 и его необходимо дешифровать.
- Выполните дешифровку полученного ответа (в данном случае из файла resp.txt)
openssl smime -verify -noverify -inform PEM -nointern -certfile "deposit.cer" -CAfile "deposit.cer" < resp.txt
Как видно, в дешифровке используется deposit.cer. Это файл открытого ключа, с помощью которого нужно выполнить дефишровку ответа от ЮKassa. Актуальный ключ можно взять здесь https://yadi.sk/d/MOfnA1IlB1F2Yg.
P.S. Обратите внимание, что 09.02.2021 в 09:00 МСК ЮKassa выполнит обновление этого ключа и будет действовать new_key_cer_YooMoney_deposit_response_verify_with_all_chain.cer (см. ссылку выше); до этого времени расшифровка ответа должна выполняться с помощью ключа old_key_cer_payouts_responsverify_production_until_12_02_21 (см. https://yadi.sk/d/MOfnA1IlB1F2Yg).
-----BEGIN PKCS7-----
MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAaCA
JIAEgcU8ZXJyb3JEZXBvc2l0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBjbGllbnRP
cmRlcklkPSIyNTNhMzk1Ny0xNjA5LTQ3ODQtYjRlZC1iYjRhNmY2ODgzYzciIHJl
cXVlc3REVD0iMjAxNi0wNC0wNFQxMjowMzowMi43ODlaIiBkc3RBY2NvdW50PSIy
NTcwMDMzOTI1NzkiIGFtb3VudD0iMTM2LjYyIiBjdXJyZW5jeT0iMTA2NDMiIGVy
cm9yPSIzMSIvPgAAAAAAADGCAjcwggIzAgEBMIGEMHwxCzAJBgNVBAYTAlJVMQ8w
DQYDVQQIEwZSdXNzaWExGTAXBgNVBAcTEFNhaW50LVBldGVyc2J1cmcxGDAWBgNV
BAoTD1BTIFlhbmRleC5Nb25leTEQMA4GA1UECxMHVW5rbm93bjEVMBMGA1UEAxMM
WWFuZGV4Lk1vbmV5AgRND18oMAkGBSsOAwIaBQCggYgwGAYJKoZIhvcNAQkDMQsG
CSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTYwNDA0MTIwMzAyWjAjBgkqhkiG
9w0BCQQxFgQUBeVNe6OQrdPV0tgnIMRchvOeMSUwKQYJKoZIhvcNAQk0MRwwGjAJ
BgUrDgMCGgUAoQ0GCSqGSIb3DQEBAQUAMA0GCSqGSIb3DQEBAQUABIIBAJnDA4FJ
w9xd3aH+Q5Zvubrbaf9jci89coST+ySqXbyCI/htgEqHXlapsu256wF+bzTQJM/X
QXj14aP/X7v8JIE937GbldpeyUlWIhbyaw1odL8pnw60nNd9hG11Rav3OmF2l4Xe
jH9VelknKY/IXFWPUK25NkTSHtR28Ze9C1NIE87hmsgq2M6QOnoWITzYL2BM6KtG
1PZKDB0HpqRDw89SjdSeMI+dNet8VSyvmLtR/i8Dr7EWN7+G1tqCi7V4UveWlTKt
O7MZyy3xg64XeaDqG+eD6/3D9GN8Q7J3KDNK9SdjqbmQY6qFCNq1BGEb0zHOs7Ae
9iRii8sV+d9dLywAAAAAAAA=
-----END PKCS7-----
Есть вопросы? Пишите на [email protected]