Posted by & filed under python.

Или можно было озаглавить так: 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

Вот пример как они должны выглядеть:

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=»&lt;tpv&gt;&lt;oppago&gt;
&lt;idterminal&gt;$cheet.BBVA_ID_TERMINAL&lt;/idterminal&gt;
&lt;idcomercio&gt;$cheet.BBVA_ID_COMERCIO&lt;/idcomercio&gt;
&lt;idtransaccion&gt;$cheet.id_transaction&lt;/idtransaccion&gt;
&lt;moneda&gt;$cheet.BBVA_CURRENCY&lt;/moneda&gt;
&lt;importe&gt;$cheet.amount&lt;/importe&gt;
&lt;urlcomercio&gt;$cheet.bbva_notification&lt;/urlcomercio&gt;
&lt;idioma&gt;en&lt;/idioma&gt;
&lt;pais&gt;GB&lt;/pais&gt;
&lt;urlredir&gt;$cheet.bbva_gratitude&lt;/urlredir&gt;
&lt;firma&gt;$cheet.signature&lt;/firma&gt;
&lt;/oppago&gt;
&lt;/tpv&gt;»/>
</form>

xml передается в поле  «peticion», action=’https://w3.grupobbva.com/TLPV/tlpv/TLPV_pub_RecepOpModeloServidor’
После того как пользователь начал на кнопку он переходит на эту страницу: https://w3.grupobbva.com/TLPV/tlpv/TLPV_pub_RecepOpModeloServidor, где ему показывается следующая форма:

bbva1_1

Где он может ввести номер свой карточки и срок её действия (номер карточки на скрине является тестовым, в мане указано 3 номера на которых можно тестировать, это один из них)

Если наша покупка прошла удачно то получаем такое:

bbva2_2

Хотя можно получить и ошибку, в мане описано около сотни ошибок и их номера.

Замечание: Ошибку можно получить если не включен режим интеграции. Режим интеграции включается после звонка в банк, на срок от 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/

Опубликовать в Facebook
Опубликовать в Google Plus

Leave a Reply

You must be logged in to post a comment.