Odoo17商城微信支付模块,快速一个实现可在线支付的商城

Odoo17商城微信支付模块,快速一个实现可在线支付的商城

随着数字化时代的快速发展,支付方式的便捷性和安全性成为了商家和消费者共同关注的焦点。微信支付作为国内领先的支付平台,其APIv3的推出为商家提供了更加高效、安全的支付解决方案。本文将介绍如何在Odoo系统中集成微信支付APIv3,实现Native扫码支付、Jsapi微信浏览器内直接拉起支付,并发送下单及支付消息给管理员等功能。

在这里插入图片描述

模块特性

  • 采用微信支付最新 API
  • Native 扫码支付,商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。适用于PC网站、实体店单品或订单、媒体广告支付等场景。
  • Jsapi 支付,在微信内打开网页时,可以调用微信支付完成下单支付的流程。
  • 对接服务号,发送下单及支付消息给管理员(服务号需开通微信消息模板)

开通微信支付

  1. 注册微信支付商户号,获得 mchid
  2. 申请服务号或小程序并认证,获得 appid,由于微信支付的产品体系全部搭载于微信的社交体系之上,所以普通商户或服务商商户接入微信支付之前,都需要有一个微信社交载体,该载体(公众号、小程序)对应的 ID 即为 AppID。
  3. 绑定AppID 及 mchid, 登录微信商户平台,进入【产品中心 > AppID账号管理 】目录进行关联。
  4. 登录微信商户平台,进入【账户中心 > API安全 】目录,设置APIv3密钥,申请证书,获得证书序号。

在这里插入图片描述

微信支付流程

在这里插入图片描述

模块功能说明

安装、启用并测试微信支付模块 odooer_wechatpay

PC 浏览器中扫码支付

  1. 安装 odooer_wechatpay 模块 (需先安装相关 python 依赖包),并启用支付供应商

在这里插入图片描述

  1. 设置微信支付授权参数
    在这里插入图片描述

  2. 商城中选择商品,确认订单并点击支付按钮
    在这里插入图片描述

  3. 生成微信支付二维码
    在这里插入图片描述

  4. 使用手机微信扫码支付,支付成功后自动跳转到支付成功页面
    在这里插入图片描述

Jsapi 支付

  1. 在微信中打开商城链接,点击支付时,自动使用 jsapi 拉起微信支付控件,直接支付。
    在这里插入图片描述

  2. 支付成功后自动跳转到支付成功页面

模块开发说明

在这里插入图片描述

确认订单创建交易

  1. 扩展支付供应商模块(payment.provider), 添加支付供应商的相关字段,包括商户号、API密钥等。这些信息将用于与微信支付平台进行通信。
  2. 打开付款页面 通过 _get_shop_payment_values()获得数据渲染支付页面 /shop/payment
  3. 根据选择的支付选项(微信支付),默认采用 redirect 支付流程, 点击提交按钮时前端 js 在 _initiatePaymentFlow 中执行 this.rpc('transaction_route': f'/shop/payment/transaction/{order.id}') 创建支付交易(payment.transaction), 并通过 _get_specific_rendering_values() 的数据填充渲染 redirect_form 返回到前端, 然后前端通过 _processRedirectFlow() 挂载并提交表单。
  4. 这里使用了一个模板 <template id="redirect_form">, 提交表单到自定义的 /payment/wechatpay 路由,判断浏览器类型进一步选择 Native 或 Jsapi 支付。
  5. 若为微信浏览器则使用 Jsapi 支付,需用户授权获得 openid (使用 wechatpy 模块),否则使用 Native 支付。
  6. 支付交易(payment.transaction) 的订单号 tx.reference 作为 out_trade_no, 并获得订单金额 tx.amount, 通过 to_minor_currency_units 并转换金额为为分。
  7. 通过 order = request.website.sale_get_order() 获得订单商品信息。
  8. 使用 wechatpayv3 模块调用微信支付相关 API 下单生成支付数据(二维码、或 jsapi 参数)返回前端。

支付状态查询

  1. Native 扫码支付时:在二维码页面前端每隔5s刷新一次 /payment/wechatpay/status, 主动通过微信订单查询接口查询状态是否为已支付,如果已支付则更新交易状态(payment.transaction),跳转到 /payment/status 页面。
  2. Jsapi 支付时:前端通过 WeixinJSBridge 发起微信支付,返回支付成功则跳转到 /payment/status 页面。通过微信支付回调更新交易状态。
  3. /payment/status 页面通过 this.rpc('/payment/status/poll') 轮询交易(payment.transaction)状态
  4. 如果已完成支付则调用 _finalize_post_processing 完成支付成功的后续处理, 跳转到支付成功页面。
  5. 支付回调处理,在 payment.transaction 中扩展下面俩个方法,并在回调 controller 中使用:
    # 根据微信支付回调数据,查找 payment.transaction
    def _get_tx_from_notification_data(self, provider_code, notification_data)
    # 处理回调数据,支付成功或失败的处理, 通过 _handle_notification_data 调用
    def _process_notification_data(self, notification_data)

订单信息推送

通过 wechatpy 模块集成微信服务号, 通过消息模板实现订单信息推送。

  1. 用户点击支付按钮时会发送订单信息给管理员。
  2. 用户支付成功后会发送支付信息给下单用户,可点击消息列链接看订单列表。

遇到的问题

  1. 安装 wechatpayv3 模块时,启动时报错: has no attribute 'X509_V_FLAG_NOTIFY_POLICY

    • cryptographypyopenssl 两个模块不兼容导致
    • 解决方案:pip install cryptography==38.0.4 pyopenssl==21.0.0
  2. wechatpy 模块默认使用内存缓存,修改为使用 cachetools 实现自定义多线程安全的缓存。

  3. wechatpy 模块客户端中 api 接口实例化方式:
    在这里插入图片描述

总结

通过集成微信支付APIv3,Odoo 系统实现了高效、安全的支付流程。Native扫码支付和Jsapi微信浏览器内直接拉起支付为用户提供了更加便捷的支付方式。同时,通过发送下单及支付消息给管理员,商家可以实时了解订单状态并进行相应处理。通过集成微信支付 结合 Odoo 系统内置的商城模块,可以为商家快速实现功能完善、高效的电商解决方案。

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个简单的示例,帮助你开始构建一个新的Odoo模块: 1. 首先,创建一个新的文件夹来存放你的模块。我们将其命名为“my_module”。 2. 在“my_module”文件夹中创建一个新的文件夹,命名为“models”。 3. 在“models”文件夹中,创建一个新的Python文件,命名为“my_model.py”。在该文件中,定义一个名为“my_model”的新模型,它将继承Odoo的“Model”类。例如: ```python from odoo import fields, models class MyModel(models.Model): _name = 'my_module.my_model' _description = 'My Model' name = fields.Char(string='Name') description = fields.Text(string='Description') ``` 在这个例子中,我们定义了一个名为“my_module.my_model”的新模型,它有两个字段:“name”和“description”。 4. 在“my_module”文件夹中,创建一个新的文件夹,命名为“views”。 5. 在“views”文件夹中,创建一个新的XML文件,命名为“my_model_view.xml”。在该文件中,定义一个名为“my_model_form”的新视图,它将显示“my_model”模型的数据。例如: ```xml <odoo> <data> <record id="my_model_form" model="ir.ui.view"> <field name="name">my_module.my_model.form</field> <field name="model">my_module.my_model</field> <field name="arch" type="xml"> <form> <sheet> <group> <field name="name"/> <field name="description"/> </group> </sheet> </form> </field> </record> </data> </odoo> ``` 在这个例子中,我们定义了一个名为“my_module.my_model.form”的新视图,它包含了“my_model”模型的两个字段:“name”和“description”。 6. 在“my_module”文件夹中,创建一个新的Python文件,命名为“__init__.py”。这个文件是必须的,即使它是空的。 7. 最后,在Odoo中安装你的新模块。在Odoo的主菜单中,点击“设置”-“应用程序”-“应用商店”,然后在搜索框中输入你的模块名称:“My Module”。点击“安装”按钮来安装你的新模块。 现在,你已经成功地构建了一个简单的Odoo模块

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AaronZZH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值