Overslaan naar inhoud
Odoo Menu
  • Aanmelden
  • Probeer het gratis
  • Apps
    Financiën
    • Boekhouding
    • Facturatie
    • Onkosten
    • Spreadsheet (BI)
    • Documenten
    • Ondertekenen
    Verkoop
    • CRM
    • Verkoop
    • Kassasysteem winkel
    • Kassasysteem Restaurant
    • Abonnementen
    • Verhuur
    Websites
    • Websitebouwer
    • E-commerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Bevoorradingsketen
    • Voorraad
    • Productie
    • PLM
    • Inkoop
    • Onderhoud
    • Kwaliteit
    Personeelsbeheer
    • Werknemers
    • Werving & Selectie
    • Verlof
    • Evaluaties
    • Aanbevelingen
    • Wagenpark
    Marketing
    • Social media Marketing
    • E-mailmarketing
    • SMS Marketing
    • Evenementen
    • Marketingautomatisering
    • Enquêtes
    Diensten
    • Project
    • Urenstaten
    • Buitendienst
    • Helpdesk
    • Planning
    • Afspraken
    Productiviteit
    • Chat
    • Goedkeuringen
    • IoT
    • VoIP
    • Kennis
    • WhatsApp
    Apps van derden Odoo Studio Odoo Cloud Platform
  • Bedrijfstakken
    Detailhandel
    • Boekhandel
    • kledingwinkel
    • Meubelzaak
    • Supermarkt
    • Bouwmarkt
    • Speelgoedwinkel
    Food & Hospitality
    • Bar en Pub
    • Restaurant
    • Fastfood
    • Gastenverblijf
    • Drankenhandelaar
    • Hotel
    Vastgoed
    • Makelaarskantoor
    • Architectenbureau
    • Bouw
    • Vastgoedbeheer
    • Tuinieren
    • Vereniging van eigenaren
    Consulting
    • Accountantskantoor
    • Odoo Partner
    • Marketingbureau
    • Advocatenkantoor
    • Talentenwerving
    • Audit & Certificering
    Productie
    • Textiel
    • Metaal
    • Meubels
    • Eten
    • Brewery
    • Relatiegeschenken
    Gezondheid & Fitness
    • Sportclub
    • Opticien
    • Fitnesscentrum
    • Wellness-medewerkers
    • Apotheek
    • Kapper
    Trades
    • Klusjesman
    • IT-hardware & support
    • Zonne-energiesystemen
    • Schoenmaker
    • Schoonmaakdiensten
    • HVAC-diensten
    Andere
    • Non-profitorganisatie
    • Milieuagentschap
    • Verhuur van Billboards
    • Fotograaf
    • Fietsleasing
    • Softwareverkoper
    Browse all Industries
  • Community
    Leren
    • Tutorials
    • Documentatie
    • Certificeringen
    • Training
    • Blog
    • Podcast
    Versterk het onderwijs
    • Onderwijs- programma
    • Scale Up! Business Game
    • Bezoek Odoo
    Download de Software
    • Downloaden
    • Vergelijk edities
    • Releases
    Werk samen
    • Github
    • Forum
    • Evenementen
    • Vertalingen
    • Word een Partner
    • Services for Partners
    • Registreer je accountantskantoor
    Diensten
    • Vind een partner
    • Vind een boekhouder
    • Een adviseur ontmoeten
    • Implementatiediensten
    • Klantreferenties
    • Ondersteuning
    • Upgrades
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Vraag een demo aan
  • Prijzen
  • Help

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Boekhouding
  • Voorraad
  • PoS
  • Project
  • MRP
All apps
Je moet geregistreerd zijn om te kunnen communiceren met de community.
Alle posts Personen Badges
Labels (Bekijk alle)
odoo accounting v14 pos v15
Over dit forum
Je moet geregistreerd zijn om te kunnen communiceren met de community.
Alle posts Personen Badges
Labels (Bekijk alle)
odoo accounting v14 pos v15
Over dit forum
Help

Assertion Error Template is required when i click the pay button(odoo 18)

Inschrijven

Ontvang een bericht wanneer er activiteit is op deze post

Deze vraag is gerapporteerd
paymenttemplateOdoo 18
1 Beantwoorden
1998 Weergaven
Avatar
Madhav

Hello!
I have tried to implement Echelon Payment Gateway into odoo.
I would like to implement the inline payment.
I have created the method and provider and when comes to the payment page, when pay is clicked, it says template is required. But in sandbox, the call has been captured. So basically i need the payment success page of odoo

 line 804, in _get_template

    assert template not in (False, None, ""), "template is required"

AssertionError: template is required


this is my controller. I dont actually want to redirect but i think the error is about redirecting.







"""echelon"""

# -*- coding: utf-8 -*-
import hmac
import logging
import pprint

import requests
from werkzeug.exceptions import Forbidden
from werkzeug.utils import redirect

from odoo import http, _
from odoo.exceptions import AccessError, MissingError, ValidationError, UserError
from odoo.http import request, route
from odoo.addons.payment import utils as payment_utils
from odoo.addons.payment.controllers import portal as payment_portal

_logger = logging.getLogger(__name__)


class PaymentPortal(payment_portal.PaymentPortal):

@route('/invoice/transaction/<int:invoice_id>', type='json', auth='public')
def invoice_transaction(self, invoice_id, access_token, **kwargs):
""" Create a draft transaction and return its processing values.

:param int invoice_id: The invoice to pay, as an `account.move` id
:param str access_token: The access token used to authenticate the request
:param dict kwargs: Locally unused data passed to `_create_transaction`
:return: The mandatory values for the processing of the transaction
:rtype: dict
:raise: ValidationError if the invoice id or the access token is invalid
"""
# Check the invoice id and the access token
try:
invoice_sudo = self._document_check_access('account.move', invoice_id, access_token)
except MissingError as error:
raise error
except AccessError:
raise ValidationError(_("The access token is invalid."))

logged_in = not request.env.user._is_public()
partner_sudo = request.env.user.partner_id if logged_in else invoice_sudo.partner_id
self._validate_transaction_kwargs(kwargs, additional_allowed_keys={
'name_next_installment',
'partner_id',
'card_number',
'expiry_month',
'expiry_year',
'cvv_number',
})
return self._process_transaction(partner_sudo.id, invoice_sudo.currency_id.id, [invoice_id], False, **kwargs)




class EchelonController(http.Controller):

@http.route('/payment/echelon', type='json', auth='public')
def echelon_payment(self, **post):
card_number = post.get('card_number')
expiry_month = post.get('expiry_month')
cvv_number = post.get('cvv_number')
expiry_year = post.get('expiry_year')
amount = post.get('amount')
partner_id = request.env['res.partner'].browse(int(post.get('partner_id')))
invoice_id = request.env['account.move'].browse(int(post.get('invoice_id')))
provider_id = request.env['payment.provider'].browse(int(post.get('provider_id')))
landing_route = post.get('landing_route')

payloads = {
"expiry_month": int(expiry_month),
"expiry_year": int(expiry_year),
"name": partner_id.name,
"card": card_number,
"amount": amount,
"transaction_details": {
"description": invoice_id.name,
"invoice_number": invoice_id.name,
"order_number": "123"
},
"capture": True,
"save_card": False
}
headers = {
"Content-Type": "application/json",
"Authorization": "Basic "
}
url = 'https://api.sandbox.echelonsecure.app/api/v2/transactions/charge'
response = requests.post(url, json=payloads, headers=headers, auth=(provider_id.api_key, provider_id.pin))
response_json = response.json()
_logger.info("Echelon charge API response: %s", pprint.pformat(response_json))
print('Echelon response:', response_json)

flow = post.get('flow')
is_validation = post.get('is_validation')
token_id = post.get('token_id')
tokenize = False

# Always create transaction record regardless of success/failure
tx_sudo = request.env['payment.transaction'].sudo().create({
'provider_id': provider_id.id,
'payment_method_id': provider_id.payment_method_ids.id,
'reference': invoice_id.name,
'amount': amount,
'currency_id': invoice_id.currency_id.id,
'partner_id': partner_id.id,
'token_id': token_id,
'operation': f'online_{flow}' if not is_validation else 'validation',
'tokenize': tokenize,
'landing_route': landing_route,
'invoice_ids': [(6, 0, [invoice_id.id])],
'state': 'pending'
})

if response.status_code == 200 and response_json.get('status') == 'Approved':
# Payment was approved
payment = request.env['account.payment'].sudo().create({
'payment_type': 'inbound',
'partner_type': 'customer',
'partner_id': partner_id.id,
'amount': amount,
'state': 'in_process',
'invoice_ids': [(6, 0, [invoice_id.id])],
'payment_transaction_id': tx_sudo.id,
'currency_id': invoice_id.currency_id.id,
'journal_id': provider_id.journal_id.id,
})
tx_sudo.write({'state': 'done'})

else:
# Log error and keep transaction pending or mark as error
_logger.error("Echelon charge failed: %s", pprint.pformat(response_json))
tx_sudo.write({'state': 'error'})

# Common rendering values
processing_values = {
'provider_id': provider_id.id,
'provider_code': provider_id.code,
'reference': invoice_id.name,
'amount': amount,
'currency_id': invoice_id.currency_id.id,
'partner_id': partner_id.id,
}
rendering_values = dict()
redirect_form_view = provider_id._get_redirect_form_view()
redirect_form_html = request.env['ir.qweb']._render(redirect_form_view.id, rendering_values)
processing_values.update(redirect_form_html=redirect_form_html)

return processing_values

0
Avatar
Annuleer
Avatar
D Enterprise
Beste antwoord

Hii,

Here is updated code 
import hmac

import logging

import pprint

import requests


from odoo import http, _

from odoo.exceptions import AccessError, MissingError, ValidationError

from odoo.http import request, route

from odoo.addons.payment.controllers import portal as payment_portal


_logger = logging.getLogger(__name__)



class PaymentPortal(payment_portal.PaymentPortal):


    @route('/invoice/transaction/<int:invoice_id>', type='json', auth='public')

    def invoice_transaction(self, invoice_id, access_token, **kwargs):

        """Create a draft transaction and return its processing values."""

        try:

            invoice_sudo = self._document_check_access('account.move', invoice_id, access_token)

        except MissingError as error:

            raise error

        except AccessError:

            raise ValidationError(_("The access token is invalid."))


        logged_in = not request.env.user._is_public()

        partner_sudo = request.env.user.partner_id if logged_in else invoice_sudo.partner_id


        self._validate_transaction_kwargs(kwargs, additional_allowed_keys={

            'name_next_installment',

            'partner_id',

            'card_number',

            'expiry_month',

            'expiry_year',

            'cvv_number',

        })


        return self._process_transaction(

            tx_sudo.id,

    'redirect_url': landing_route,  # if you want to redirect the user client-side

}



Instead, return a meaningful JSON response — e.g.:i hope it is use full

0
Avatar
Annuleer
Geniet je van het gesprek? Blijf niet alleen lezen, doe ook mee!

Maak vandaag nog een account aan om te profiteren van exclusieve functies en deel uit te maken van onze geweldige community!

Aanmelden
Gerelateerde posts Antwoorden Weergaven Activiteit
Payment Acquirer Templet render Error
payment template Acquirer v15
Avatar
0
nov. 21
3928
How to Delete a Stale Project Folder?
Odoo 18
Avatar
Avatar
2
okt. 25
710
Override qweb template without an id Opgelost
restaurant inherit template appointment Odoo 18
Avatar
Avatar
1
sep. 25
1576
Custom code: Value is empty in the list view when it is equal to 0
Odoo 18
Avatar
Avatar
1
jun. 25
1853
Help using Cloudflare as CDN for Odoo SaaS Opgelost
Odoo 18
Avatar
Avatar
1
jun. 25
3637
Community
  • Tutorials
  • Documentatie
  • Forum
Open Source
  • Downloaden
  • Github
  • Runbot
  • Vertalingen
Diensten
  • Odoo.sh Hosting
  • Ondersteuning
  • Upgrade
  • Gepersonaliseerde ontwikkelingen
  • Onderwijs
  • Vind een boekhouder
  • Vind een partner
  • Word een Partner
Over ons
  • Ons bedrijf
  • Merkelementen
  • Neem contact met ons op
  • Vacatures
  • Evenementen
  • Podcast
  • Blog
  • Klanten
  • Juridisch • Privacy
  • Beveiliging
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo is een suite van open source zakelijke apps die aan al je bedrijfsbehoeften voldoet: CRM, E-commerce, boekhouding, inventaris, kassasysteem, projectbeheer, enz.

Odoo's unieke waardepropositie is om tegelijkertijd zeer gebruiksvriendelijk en volledig geïntegreerd te zijn.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now