|
一、简介
微信支付提供了两种使用方式,一种是配置固定回调响应地址, 一种动态设置回调响应地址。无论哪种方式,都需要提供一个备案审核通过的外网域名,因为扫码支付最终走的是微信客户端,没有通过浏览器跳转到微信页面,所以微信支付的回调之后服务器之间 点对点通信,没有 url 重定向通知
其中动态 URL 的方式开发相对简单,本文档中使用的就是动态 URL 方式
二、微信支付申请
申请请参考官方的申请流程,此处不做说明
三、开发流程
此方式的流程是:
用户提交购买的商品或者是选择要支付的订单,然后传递到服务器
如果是新购买,则生成订单等信息,如果是付款则获取订单信息
将订单信息和商户的信息,如回调地址等作为参数,按照要求排序签名后发送到腾讯服务器
腾讯服务器会返回一个微信支付二维码的短连接,两小时有效
后台将短连接生成图片,跳转到支付页面,让用户扫码
用户扫码支付成功后,微信会在他们后台访问我们指定的回调接口地址,将结果传递过来,不会重定向
在回调服务内,判断支付状态等,更新数据
演示地址:http://ceshi.qfjava.cn/payment
四、微信配置
使用超级管理员账号(注册时候绑定的实名认证联系人的微信),安装证书,设置 API 密钥,下载证书(备用)
五、POM中的依赖文件
六、开发需要内容
1. 微信APP_ID, 可在微信公众平台查看对应微信号的 ID
2. 商户 ID, 可在微信商户平台查看,上图列表中的商户信息中会有
3. API_KEY 上图中设置的 API 密钥
4. 微信统一下单 URL:https://api.mch.weixin.qq.com/pay/unifiedorder 可以在开发者文档中查看
5. 回调 URL, 用于用户支付成功后 微信后台点对点通知支付结果,非重定向,需要一个公网地址
6. 发起支付的 ip, 创建 ip 地址, 可以填写服务器ip
以下代码开发未使用实际商品和数据库,才用虚假数据支付
实际开发中,只需要更改页面 和 Servlet 中的业务逻辑,以及配置文件中的相关信息
其中 ResultServlet 中需要处理的是支付成功和失败后需要做的事情
6.1 index.jsp
此页面用于用户输入一个想要购买的商品的名称,模拟购买,不需要输入价格,服务器后台写死1分钱,实际开发请按照购物流程
6.2 TestServlet
用于获取用户输入的商品名称,生成订单
6.3 payment.jsp
6.4 ImageServlet
用于获取二维码图片显示到页面上面
6.5 PayConfigUtil
用于配置上述需要的信息
6.6 XMLUtil
用于解析微信返回的 xml 数据
6.7 MD5Util
用于生成微信需要的校验数据
6.8 HttpUtil
用于发起网络请求
6.9 PayCommonUtil
用于校验支付相关的内容, 以及发起微信支付获取支付二维码的字符串
6.10 ZxingUtil
生成二维码的工具类
6.11 ResultServlet
处理支付结果的 Servlet
七、测试
提交购买
支付页面扫码
查看支付结果
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|