java支付安全面试_Java微信支付【面试+工作】

本文详细介绍了Java实现微信支付的步骤,包括后台生成付款链接、时序图分析、业务流程及Java代码实现。重点讲解了如何在Controller中处理支付请求,通过WXPayExample和MyConfig类获取预付款信息,以及在前端页面如何调用支付接口完成支付。同时,此内容也涉及到了支付安全在面试中的重要性。
摘要由CSDN通过智能技术生成

d38518c5bb7b8b52966b2f0eca476ded.png

完成以上两步后,微信端的支付端口就能够被我们的网站调用了。

三、分析业务时序图

微信在官方文档中用时序图反映了其对应的业务流程。

0aabb5a7e88fb188713fa02616dc9a6c.png

根据此图,可以看出流程大致为:自己的java后台生成付款链接,用户点击链接,在java后台中生成商户订单,将此订单按照微信的格式发送给微信支付系统,微信支付系统生成一个预付单给java后台,然后在java后台中生成支付参数返回给用户,用户点击付款,会向微信支付系统检查支付参数的合法性,确认无误后即可完成付款操作。付款完成后异步通知商户付款结果,并会跳到指定的付款成功页面。

四、java实现

1、首先需要调用微信支付的包,加入到pom.xml中。

b3e914007ddfb1d5d257c66992aec6db.png

2、在页面中,需要点击支付按钮发生的事件如下,首先跳转到自己的后台,返回支付所需要的支付参数,并存进js的元素中,留给pay2()使用。其中'${redirect_uri}'这个值是自己之前填进去的域名。只不过这里我为了方便管理,讲其写入了配置文件,可以让其作为后台返回的一个值传进js中。

f795c7f9df2731f038ab71f750bbd956.png

3、通过"mobile/user/pay/"这个地址对应的java处理Controller如下代码所示,目的是返回支付所需要的参数值。其中openId这一参数是在用户使用微信登录时被我存入session中的。重点在于WXPayExample.yy(openId)这里,这个类是通过openId获取预付款信息的通道。

Controller.java

d4c97617275beb9b95230f88eb8f0666.png

在WXPayExample类中,第一步还是通过MyConfig()配置获取服务号APPID,商户号,和Key,并且加载支付证书。然后填写支付信息中的随机码,支付金额,付款方式,付款URL等。然后由WXPay将其添加签名,WxPayUtil将其转化为xml文件,通过wxpay.unifiedOrder(data)发送给微信支付平台,并获取返回值。其中这个三个包都可以需要导入

7f260dafad1e3eaf7590a6872c7f63cd.png

WXPayExample.java

207883980ea5f09564452a45f985a2e8.png

MyConfig.java

601860ccd44514ebd182173fb9f12986.png

4,这个时候,就已经可以拿到预付款信息了。里面有一个预付款prepay_id就是微信平台中的该条预付款信息的ID。将返回的nonceStr,prepay_id按照要求封装为package与其他的参数打包在一起。并添加一个签名。然后把签名和其他所有的标签放进map集合后,转成result1发送给页面。用户既可以选择支付了。

5、用户支付的java。回到cart.jsp中,第二步中的ajax获取到返回值之后,就可以进行下一步操作了。pay2()这一个function是用户支付指令的发送,当微信支付准备好了之后,通过onBridgeReady()这一方法进行付款,如果付款成功,调用success方法,失败后直接跳转到失败页面。至此,这个整个过程就宣告结束。

cart.jsp

821a110f049e8ff7e941807d9d8d1c88.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值