当前位置:首页 > 科技  > 软件

Vue3问题:如何实现微信扫码支付?全面!

来源: 责编: 时间:2023-12-18 17:37:38 360观看
导读本文主要内容分三部分,第一部分是需求分析,第二部分是实现步骤,第三部分是问题详解。如果您只需要解决问题,请阅读第一、二部分即可。如果您有更多时间,进一步学习问题相关知识点,请阅读至第三部分。1、需求分析点击微信扫

0QX28资讯网——每日最新资讯28at.com

本文主要内容分三部分,第一部分是需求分析,第二部分是实现步骤,第三部分是问题详解。0QX28资讯网——每日最新资讯28at.com

如果您只需要解决问题,请阅读第一、二部分即可。0QX28资讯网——每日最新资讯28at.com

如果您有更多时间,进一步学习问题相关知识点,请阅读至第三部分。0QX28资讯网——每日最新资讯28at.com

1、需求分析

点击微信扫码支付按钮,会弹出扫码支付弹框,在弹框中部显示一个微信支付的二维码。0QX28资讯网——每日最新资讯28at.com

用户打开微信扫码并支付成功后,就会关闭弹框,弹出成功消息提示,并刷新表格数据,更新对应订单的支付状态,置灰微信扫码支付按钮。0QX28资讯网——每日最新资讯28at.com

用户点击弹框内的取消按钮,就会隐藏弹框。0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

2、实现步骤

(1)准备工作(了解即可)

登录微信公众平台,获取微信公众号开发者ID(AppID)。0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

登录微信支付商户平台,申请Api证书、设置APIv3秘钥。当然,这里有一个前提,必须要有商家的营业证书,否则无法认证和申请。0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

获取微信支付商户号、获取商户证书序列号。0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

(2)编写后端接口(了解即可)

在pom.xml文件中,引入微信支付相关依赖。0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

在application.xml文件中,配置上面在准备工作中获取的微信支付相关配置信息。0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

新建一个微信支付配置类WechatConfig,映射配置文件中配置的参数。0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

编写一个微信支付下单请求参数WxOrderDTO类。具体参数详情见官方文档:https://pay.weixin.qq.com/docs/merchant/apis/native-payment/direct-jsons/native-prepay.html.0QX28资讯网——每日最新资讯28at.com

编写一个微信返回通知结果集WxResultDTO类。具体参数详情见官方文档:https://pay.weixin.qq.com/docs/merchant/apis/native-payment/payment-notice.html。0QX28资讯网——每日最新资讯28at.com

编写一个微信支付工具类WxPayUtils,在其中定义一个获取HttpClient实例的公共方法getClient,通过商户号和序列号,以及加载秘钥文件和证书文件,生成对应的HttpClient实例。0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

编写调用微信支付接口的WxPayService业务类,在其中编写一个Native支付的统一下单方法CreateNativeOrder。0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

编写一个微信支付的WxPayController类,在其中编写一个微信支付下单的方法nativeWxPay。值得注意的是,请求参数WxOrderDTO中的notify_url参数对应的地址,就是微信支付返回通知的回调地址。0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

编写一个带条件分页查询订单列表的接口,用来查询对应订单的支付状态。0QX28资讯网——每日最新资讯28at.com

这个比较简单,按个人业务需求编写,此处不再赘述。0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

编写一个微信支付返回通知回调方法wxCallBack,在这里对微信返回的通知信息进行了签名验证、参数解密,判断通知数据中交易状态为成功后,修改订单状态。0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

0QX28资讯网——每日最新资讯28at.com

扩展:申请微信退款功能实现详细,基本类同微信支付下单流程,此处不再赘述。退款参数详情见官方文档:https://pay.weixin.qq.com/docs/merchant/apis/native-payment/create.html。0QX28资讯网——每日最新资讯28at.com

(3)编写前端

在真实项目中,前端对于微信扫码支付所做的操作并不多。0QX28资讯网——每日最新资讯28at.com

无非就是调用后端微信扫码支付下单的接口,请求成功后在页面渲染微信支付二维码。0QX28资讯网——每日最新资讯28at.com

当用户完成支付操作后,利用定时器轮循查询订单支付状态,从而判断当用户支付成功时,刷新数据并重新渲染页面。0QX28资讯网——每日最新资讯28at.com

详细实现步骤如下:0QX28资讯网——每日最新资讯28at.com

编写扫码支付二维码弹框。0QX28资讯网——每日最新资讯28at.com

<template><!-- 扫码支付二维码弹框 --><div><div style="text-align: center;"><!-- 使用了Qrcode库来生成二维码,此处不再赘述 --><qrcode:text="form.urlCode":width="300":logo="require('@/assets/img/logo.png')"/></div><div><el-button @click="close">取消</el-button></div></div></template>

在API文件中定义2个接口。0QX28资讯网——每日最新资讯28at.com

// 查询订单支付状态export const getDetApi = ({ params }: PropsData): any => {return fetch({ url: `/pay/${params.id}`, method: 'get', params })}// 微信扫码支付下单接口export const nativeWxPayApi = ({ params }: PropsData): any => {return fetch({ url: `/pay/nativeWxPay/${params.id}`, method: 'get' })}编写微信扫码支付方法,在点击微信扫码支付按钮时调用。// 微信扫码支付async function getNativeWxPayOrder() {if (props.info) {// 当前订单的idconst id = (props.info as any).idtry {// 调用微信扫码支付下单接口const res = await nativeWxPayApi({params: {id: id}})if (res) {// 渲染后端返回的微信支付二维码form['urlCode'] = res.result.code_url// 刷新订单状态await getOrderStatus()}} catch (e) {console.log(e)}}

编写查询订单支付状态方法,在调用微信扫码支付接口完成后调用。0QX28资讯网——每日最新资讯28at.com

// 获取订单支付状态const getOrderStatus = async() => {const id = (props.info as any).idconst params = {params: {id: id}}// 使用定时器循环请求查询订单支付状态接口,直到返回支付成功为止const myStateInterval = setInterval(async () => {// 调用查询订单支付状态接口const res = await getDetApi(params)if (res.status === 200) {// 如果订单支付状态显示为已支付if (res.result['status'] === 1) {// 清除定时器clearInterval(myStateInterval)// 消息通知emit('success', '成功')// 关闭弹框,刷新数据close()}}}, 3000)}

3、问题详解

(1)后端接口代码编写细节

后端微信支付下单和申请退款接口详细,请参考视频教程:https://www.bilibili.com/video/BV1eb4y187Qy?p=18&spm_id_from=pageDriver&vd_source=2571ea6a1d02797fe7590325786e2e84。0QX28资讯网——每日最新资讯28at.com

一切版权归原作者所有,如有侵权请联系删除。0QX28资讯网——每日最新资讯28at.com

(2)用到文档地址整理

  • 微信支付API文档:https://pay.weixin.qq.com/docs/merchant/apis/native-payment/direct-jsons/native-prepay.html。
  • 微信商户平台:https://pay.weixin.qq.com/。
  • 微信公众平台:https://mp.weixin.qq.com。

本文链接:http://www.28at.com/showinfo-26-48757-0.htmlVue3问题:如何实现微信扫码支付?全面!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Golang清晰代码指南

下一篇: 想要快速开发一个系统?选 BuildAdmin 就对了!

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • Rust中的高吞吐量流处理

    作者 | Noz编译 | 王瑞平本篇文章主要介绍了Rust中流处理的概念、方法和优化。作者不仅介绍了流处理的基本概念以及Rust中常用的流处理库,还使用这些库实现了一个流处理程序
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的&ldquo;网红&rdquo;。7月5日至9日,为期5天的东方甄选&ldquo;甘肃行&rdquo;首次在自有App内直播,
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新业务到 2022 年底还是 0,希望 2023 年出来一个 1。&rdquo;这是2022年底,李彦宏
  • 世界人工智能大会国际日开幕式活动在世博展览馆开启

    30日上午,世界人工智能大会国际日开幕式活动在世博展览馆开启,聚集国际城市代表、重量级院士专家、国际创新企业代表,共同打造人工智能交流平台。上海市副市
  • 电博会与软博会实现"线下+云端"的双线融合

    在本次“电博会”与“软博会”双展会利好条件的加持下,既可以发挥展会拉动人流、信息流、资金流实现快速交互流动的作用,继而推动区域经济良性发展;又可以聚
Top