专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

JAVA PC端扫码支付(一)微信支付 java微信二维码支付

ins518 2024-10-07 13:32:55 技术文章 10 ℃ 0 评论

微信支付从配置到开发

一、配置

1、开通公众平台支付功能

商户号

微信支付功能先要申请微信(企业)公众平台,然后开通企业公众平台付功能。下图为微信(企业)公众平台页面,可以看到商户号等信息

微信公众号APPID

从开发-基本配置中获取APPID

2、微信商户平台相关配置

微信商户平台相关配置

因为微信公众平台调整,公众平台微信支付公众号支付授权目录、扫码支付回调URL配置入口于2017年8月1日迁移至商户平台(pay.weixin.qq.com),所以微信支付配置和相关信息要登录商户平台才能拿到。(估计是微信想要把公众号的管理功能和开发功能分离)

回调链接

从微信商户平台的产品中心-开发配置-支付配置配置扫码回调链接(扫码回调链接就是你项目中微信支付回调函数名称,这里需要的是加了项目域名的函数全称,必须保证能从公网访问。为什么需要一个回调函数呢?这属于微信支付的回调机制:当用户使用微信支付完成后,你从本地是无法得知是否支付成功的,而微信这边在获取到支付完成的状态后,主动去访问你所设置的回调函数地址,将支付状态等相关信息返回,我们只要在回调函数中判断支付状态,就能够便捷的进行下一步操作!)

设置API密钥

下载微信sdk

微信sdk是微信官方给出的微信支付demo,其中有很多好用的工具类,demo本身也可以为我们的支付接口开发提供参考(https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1)

把sdk导入到项目中

二、开发

主要业务流程

  • 主要业务流程

    (1)商户后台系统根据用户选购的商品生成订单。

    (2)用户确认支付后调用微信支付【统一下单API】生成预支付交易;

    (3)微信支付系统收到请求后生成预支付交易单,并返回交易会话的二维码链接code_url(code_url就是微信支付地址)。

    (4)商户后台系统根据返回的code_url生成二维码(用第三方插件生成二维码)。

    (5)用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。

    (6)微信支付系统收到客户端请求,验证链接有效性后发起用户支付,要求用户授权。

    (7)用户在微信客户端输入密码,确认支付后,微信客户端提交授权。

    (8)微信支付系统根据用户授权完成支付交易。

    (9)微信支付系统完成支付交易后给微信客户端返回交易结果,并将交易结果通过短信、微信消息提示用户。微信客户端展示支付交易结果页面。

    (10)微信支付系统通过发送异步消息通知商户后台系统支付结果。商户后台系统需回复接收情况,通知微信后台系统不再发送该单的支付通知。

这是官方给出的文档,这里再梳理一下。单纯做PC端扫一扫开发很简单,主要是向微信支付的【统一下单API】请求,发送订单信息和签名(签名比较麻烦,可能前期测试会报多次签名错误,不过官方SDK中有生成签名的方法,当然,自己也可以写),请求成功微信支付返回二维码链接code_url,注意这是微信支付的链接,不是二维码!不是二维码!不是二维码!二维码需要自己生成,不要直接就把code_url挂在页面上~

请求【统一下单API】的参数列表

好了,上代码~

与支付无关的业务逻辑

  • 与支付无关的业务逻辑

    这里我单独创建一个类PayController来写自己的业务逻辑,生成业务订单啊,业务订单保存在数据库啊,查询订单信息啊,验证是否支付完成啊等等,我的业务逻辑比较简单,仅供参考~

微信支付逻辑

  • 微信支付逻辑

    1、生成签名,然后打包成【统一下单API】要求格式的订单(参数列表),微信支付要求为XMl格式

    2、调用【统一下单API】微信接口,将我们打包好XMl格式的参数列表发送给【统一下单接口】,调用成功会接收到XMl格式的返回值,解析成我们需要的格式,判断是否请求 成功,成功的话是会返回code_url的

    3、然后我们把code_url生成二维码展现给用户就OK了!

    4、用户支付完成后,微信会访问我们的回调接口,根据返回的结果修改数据库支付状态

请求【统一下单API】返回参数列表

将微信支付所需要的固定参数封装到类WXpayConfig中

封装固定参数

WXPayController,主控制器

如果请求【统一下单接口】的参数正确,签名也没有报错,那我们就能成功获取到code_url,从而生成二维码,让用户扫码支付了。

生成二维码工具类QRCodeUtil

使用了第三方工具类zxing,这里用到的zxing依赖包请自行下载

前端轮询

当用户支付完成后,微信成功调用了我们的回调方法,数据库订单状态修改为“已支付”,Java后端的工作就基本完成了,那前端怎么知道用户完成了支付呢?现在普遍的办法是,前端写方法轮询支付状态,限定时间内查询到支付状态为“已支付”就进行下一步操作,限定时间后未支付就做支付超时的操作。本项目用户查询支付状态的代码已经写在了之前“与支付无关的业务逻辑”中了~

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表