我正在尝试将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集成吗?
答案 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>