动态URL方式调用微信支付
一、简介微信支付提供了两种使用方式,一种是配置固定回调响应地址, 一种动态设置回调响应地址。无论哪种方式,都需要提供一个备案审核通过的外网域名,因为扫码支付最终走的是微信客户端,没有通过浏览器跳转到微信页面,所以微信支付的回调之后服务器之间 点对点通信,没有 url 重定向通知
其中动态 URL 的方式开发相对简单,本文档中使用的就是动态 URL 方式
二、微信支付申请
申请请参考官方的申请流程,此处不做说明
三、开发流程
此方式的流程是:
用户提交购买的商品或者是选择要支付的订单,然后传递到服务器
如果是新购买,则生成订单等信息,如果是付款则获取订单信息
将订单信息和商户的信息,如回调地址等作为参数,按照要求排序签名后发送到腾讯服务器
腾讯服务器会返回一个微信支付二维码的短连接,两小时有效
后台将短连接生成图片,跳转到支付页面,让用户扫码
用户扫码支付成功后,微信会在他们后台访问我们指定的回调接口地址,将结果传递过来,不会重定向
在回调服务内,判断支付状态等,更新数据
演示地址:http://ceshi.qfjava.cn/payment
四、微信配置
使用超级管理员账号(注册时候绑定的实名认证联系人的微信),安装证书,设置 API 密钥,下载证书(备用)
http://p3.pstatp.com/large/pgc-image/252aa82dd79e43b880ec5c7fc47777d3
五、POM中的依赖文件
http://p3.pstatp.com/large/pgc-image/c8567cf876dc48cf9badd8a1d710036f
http://p1.pstatp.com/large/pgc-image/9cf09fbdf2434eaa9cbe69ec2feb6986
六、开发需要内容
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分钱,实际开发请按照购物流程
http://p9.pstatp.com/large/pgc-image/7739dab149a449acbd494ef6a6e178b1
6.2 TestServlet
用于获取用户输入的商品名称,生成订单
http://p3.pstatp.com/large/pgc-image/44d760efd3774f8baa06281429977c26
6.3 payment.jsp
http://p1.pstatp.com/large/pgc-image/312b0ce767d04248943e0216d6e1773f
6.4 ImageServlet
用于获取二维码图片显示到页面上面
http://p9.pstatp.com/large/pgc-image/10d78351aa76437397093c60d2d135f1
6.5 PayConfigUtil
用于配置上述需要的信息
http://p1.pstatp.com/large/pgc-image/c35ca6bfa0e746c7a4e5f45b823e0aa3
6.6 XMLUtil
用于解析微信返回的 xml 数据
http://p1.pstatp.com/large/pgc-image/9f61efcb0cbe45fc880a4586c56b4494
http://p1.pstatp.com/large/pgc-image/510fcbcc5027446ebf153d32066666ef
6.7 MD5Util
用于生成微信需要的校验数据
http://p3.pstatp.com/large/pgc-image/2174f39090fe4135aa5b06115300b524
http://p9.pstatp.com/large/pgc-image/37ea2b93bdd041c5890e8344ab12fe43
6.8 HttpUtil
用于发起网络请求
http://p1.pstatp.com/large/pgc-image/b2835951906c44968c388832c01cd331
http://p1.pstatp.com/large/pgc-image/5685b65b04484790819f8fcc6a29000f
6.9 PayCommonUtil
用于校验支付相关的内容, 以及发起微信支付获取支付二维码的字符串
http://p3.pstatp.com/large/pgc-image/5b2d34e6985d45cf973aa45075f8add5
http://p3.pstatp.com/large/pgc-image/8062e179621c4213a1dcada11970e5db
http://p1.pstatp.com/large/pgc-image/cd5293fa698b4362a152a70f9a3d3bce
http://p1.pstatp.com/large/pgc-image/88c9af10cc6d46fbbcee8fff8515b42e
http://p1.pstatp.com/large/pgc-image/096d6e53f53a4de1a6ec1f204c4f2c7d
http://p1.pstatp.com/large/pgc-image/a994e363e8534c2eaa5bae3a105ac24c
6.10 ZxingUtil
生成二维码的工具类
http://p1.pstatp.com/large/pgc-image/6655305369a6493c95b775300b2ce922
http://p3.pstatp.com/large/pgc-image/478b6c976e4347e2a5be855cecc7a643
http://p3.pstatp.com/large/pgc-image/0c06a9c2abf44141a4747df13c4c8f55
6.11 ResultServlet
处理支付结果的 Servlet
http://p1.pstatp.com/large/pgc-image/167521a4617b4d8bbf7831bebe7074ab
http://p9.pstatp.com/large/pgc-image/8d9e16854dbc48de879f6fe4993c92c5
http://p1.pstatp.com/large/pgc-image/314b2e7ce824491d888aa9b23f43c66d
http://p3.pstatp.com/large/pgc-image/ece3fe4d5e1e4ea5ad325d1259b51a18
http://p9.pstatp.com/large/pgc-image/dbfeb14436de4634a8747ff5fdcbdede
七、测试
提交购买
http://p1.pstatp.com/large/pgc-image/94f98d7a409e4fc998a77aca11bfdec9
支付页面扫码
http://p9.pstatp.com/large/pgc-image/45d1bc3125d14c1586425cee1d2f5306
查看支付结果
http://p9.pstatp.com/large/pgc-image/940c37619852426a92292927c02ac27c
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]