Odoo:使用付款获取者添加条带

时间:2015-03-17 16:25:33

标签: javascript python html stripe-payments odoo

我正在尝试将Stripe与Odoo集成。我想使用stripe.js,所以我的服务器不必存储信用卡号。

为了弄清楚我是如何做到这一点的,我查看了开源payment_paypal插件。我发现的是:

def _get_paypal_urls(self, cr, uid, environment, context=None):
        """ Paypal URLS """
        if environment == 'prod':
            return {
                'paypal_form_url': 'https://www.paypal.com/cgi-bin/webscr',
                'paypal_rest_url': 'https://api.paypal.com/v1/oauth2/token',
            }
        else:
            return {
                'paypal_form_url': 'https://www.sandbox.paypal.com/cgi-bin/webscr',
                'paypal_rest_url': 'https://api.sandbox.paypal.com/v1/oauth2/token',
            }

其中'paypal_form_url'键具有结帐页面上action标记的<form>属性中包含的网址。

stripe.js应该包含在网页上的方式实际上是这样的(来自Stripe's documentation):

<form action="/charge" method="POST">
  <script
    src="https://checkout.stripe.com/checkout.js" class="stripe-button"
    data-key="pk_test_6pRNASCoBOKtIshFeQd4XMUh"
    data-image="/img/documentation/checkout/marketplace.png"
    data-name="Stripe.com"
    data-description="2 widgets"
    data-amount="2000">
  </script>
</form>

显然在form标记的中间有任意JavaScript,因此仅设置action属性不足以使其正常工作。这是一个问题,因为Odoo的模板系统已经为您填写了HTML。

有没有办法可以让任意JavaScript与Odoo的内置支付系统配合使用?还有其他方法可以将Stripe与Odoo集成吗?

2 个答案:

答案 0 :(得分:1)

我自己对此感兴趣,昨天有人发布了这篇文章,这看起来是你想要的开始:implementing stripe checkout issues qweb for acquirer button 84467

据推测,t-att-前缀和模板中的包装可能有所帮助,但我还不够确定。

PayPal在这种情况下的工作方式是使用回调网址重定向到PayPal。它与Stripe Checkout的工作方式类似apples :: oranges

如果我冒了一个猜测,如果t-att eval +模板工作,你可以将它包装在一个模块with its own controller中,用它为你提供的令牌执行实际的Stripe API交易已验证。无论您使用Stripe.JS还是Stripe Checkout,您仍然需要处理令牌服务器端。

如果我弄清楚了,我会在这里发布一些内容。

答案 1 :(得分:1)

我有一个带条纹和checkout.js工作的网站。

它与其他网关略有不同,实际上只有一个返回URL。

我决定将关键字添加到payment_acquirer模型中,并将大部分繁重工作添加到继承payment_transaction模型的模型中。

无论如何,这里是js的表格和包含:

<template id="stripe_acquirer_button">
  <form id='stripe_form' action='/payment/stripe/return' method="post" target="_self">
            <input id='stripe_order_amount' type="hidden"  name='amount' t-att-value="tx_values['stripe_order_amount']"/>
            <input id='stripe_publishable_key' type="hidden" t-att-value="tx_values['stripe_publishable_key']"/>
            <input id='stripe_reference' type="hidden" name='reference' t-att-value="tx_values['stripe_reference']"/>
    <input type='hidden' name='add_returndata' t-att-value="tx_values.get('add_returndata')"/>
            <input id='stripe_token' type="hidden" name='token' value="xxx"/>
  </form>
  <button id='customButton' type="submit" width="100px"
                t-att-class="submit_class">
                <img t-if="not submit_txt" src="/payment_stripe/static/src/img/stripe_icon.png"/>
                <span t-if="submit_txt"><t t-esc="submit_txt"/> <span class="fa fa-long-arrow-right"/></span>
      </button>

</template>

<template id="assets_common" name="global assets" inherit_id="web.assets_common">
  <xpath expr="." position="inside">
    <script src="https://checkout.stripe.com/checkout.js"></script>
        <script src="/payment_stripe/static/src/js/payment_stripe.js"></script>
  </xpath>
</template>