Или можно было озаглавить так: Merchant of BBVA, Spain
BBVA испанский банк поэтому не было манов даже на английском, только на испанском. эта инструкция должна сэкономить кучу времени.
Итак…
С начала как работает интеграция (самое основное):
Данные о товаре пересылается через POST на bbva, там пользователь вводит информацию о кредитной карте, если всё удачно то данные об операции пересылается на yourLink1.
Теперь поэтапно:
Данные должны пересылаться в xml формате.
<tpv> <oppago> <idterminal>$cheet.BBVA_ID_TERMINAL</idterminal> <idcomercio>$cheet.BBVA_ID_COMERCIO</idcomercio> <idtransaccion>$cheet.id_transaction</idtransaccion> <moneda>$cheet.BBVA_CURRENCY</moneda> <importe>$cheet.amount</importe> <urlcomercio>$cheet.bbva_notification</urlcomercio> <idioma>en</idioma> <pais>GB</pais> <urlredir>$cheet.bbva_gratitude</urlredir> <firma>$cheet.signature</firma> </oppago> </tpv>
Где:
idterminal — id терминала (выдается в админке банка)
idcomercio — id продавца (выдается в админке банка)
idtransaccion — id операции (уникальное число, я использовал id товара)
moneda — код валюты, согласно какому-то ISO стандарту (для евро это 978)
importe — сумма, в таком формате: 25.00
urlcomercio — url, куда банк отправит потверждение платежа (в XML формате)
idioma, pais — теги отвечающие на каком языке банк будет отображать форму
urlredir — путь, по которому будет отсылаться пользователь в случае успешной операции
firma — сигнатура, которая подтверждает, что вы это вы, а не какой либо мошенник.
Сейчас разберем поле firma:
сигнатура получается так:
signature=sha1(idterminal+idcomercio+idtransaccion+importe2+moneda+obfuscate(secret_word,secret_key))
где
importe2=importe.replace('.','')
(чтобы из 25.00 получилось 2500, требование банка);
secret_word и secret_key генерируется в админке банка:
Вот пример как они должны выглядеть:
secret_word = '69;45;4A;5F;46;45;43;5A;76;00;7B;8B;06;05;77;69;0B;1E;1F;69' secret_key='12345678'
а obfuscate — функция для запутывания. Вот её реализация на Python:
def obfuscate(self,pal_sec_ofuscada,clave_xor): trozos = pal_sec_ofuscada.split(';') res="" for (key,value) in enumerate(trozos): x1=ord(clave_xor[key]) x2=int(value,16) r=x1^x2 res+=chr(r) return res
После того как xml создан, можно его отсылать, я это делаю через форму:
<form action=»$cheet.BBVA_PAGE» method=»post» id=»payForm»>
<input type=»hidden» name=»peticion» value=»<tpv><oppago>
<idterminal>$cheet.BBVA_ID_TERMINAL</idterminal>
<idcomercio>$cheet.BBVA_ID_COMERCIO</idcomercio>
<idtransaccion>$cheet.id_transaction</idtransaccion>
<moneda>$cheet.BBVA_CURRENCY</moneda>
<importe>$cheet.amount</importe>
<urlcomercio>$cheet.bbva_notification</urlcomercio>
<idioma>en</idioma>
<pais>GB</pais>
<urlredir>$cheet.bbva_gratitude</urlredir>
<firma>$cheet.signature</firma>
</oppago>
</tpv>»/>
</form>
xml передается в поле «peticion», action=’https://w3.grupobbva.com/TLPV/tlpv/TLPV_pub_RecepOpModeloServidor’
После того как пользователь начал на кнопку он переходит на эту страницу: https://w3.grupobbva.com/TLPV/tlpv/TLPV_pub_RecepOpModeloServidor, где ему показывается следующая форма:
Где он может ввести номер свой карточки и срок её действия (номер карточки на скрине является тестовым, в мане указано 3 номера на которых можно тестировать, это один из них)
Если наша покупка прошла удачно то получаем такое:
Хотя можно получить и ошибку, в мане описано около сотни ошибок и их номера.
Замечание: Ошибку можно получить если не включен режим интеграции. Режим интеграции включается после звонка в банк, на срок от 8 часов до 5 дней.
Если покупку прошла удачно, то на адресс из тега urlcomercio приходят данные о платеже в формате xml.
Ссылки по теме:
BBVA — http://www.bbva.com/TLBB/tlbb/jsp/esp/home/index.jsp
Админка банка — https://tpvvirtual.bbva.es
Подробный мануал на испанском — здесь
Сайт который мне помог (на испанском) — http://blog.maeguaras.com.ar/2010/04/pasarela-de-pago-bbva-espana/
Свежие комментарии