调用支付jsapi缺少参数:total_fee_微信支付业务的开发流程

314bba0e6b77397434f8506206636de8.png

本文主要讲述微信支付JSAPI支付的开发。

首先先看一下微信官方文档的业务开发流程:

【微信支付】JSAPI支付开发者文档​pay.weixin.qq.com
fee4e4e30e4c626ff596a4f964f2a196.png

总结起来可以概括为以下几步:

(1)商家后台系统生成客户订单

(2)商家系统调用微信提供的统一下单API

(3)微信支付系统会返回给商家预支付信息(prepay_id)

(4)商家系统返回给前端调用JSAPI页面唤醒支付(其中包括生成参数,签名等)

(5)用户支付完成后,微信端会传来异步通知结果

(6)商家后台需要将订单状态改为“已支付”

(7)后台返回给微信端,通知处理结果

项目中主要应用“统一下单”和“支付结果通知”这两个API。

为了避免重复造轮子,采用支付SDK完成:

https://github.com/Pay-Group/best-pay-sdk/blob/develop/doc/use.md​github.com

项目支付订单的API设定:

1dd08c0a7c3ec9e83c8421f0978f4110.png

开始开发:

先写一个支付的controller:

支付过程可以理解为先通过orderId查取订单,然后发起支付这两部分

@Controller

前期工作:

引入SDK依赖,根据SDK的要求需要先配置

https://github.com/Pay-Group/best-pay-sdk/blob/develop/doc/use.md​github.com

微信支付配置格式如下:

//微信支付配置

理解清楚这个SDK的配置要求之后,在本地项目中开始配置如下:

首先建一个配置类(用于存储account信息):

@Data

然后在application.ym文件相应位置配置自己的各个字段名称,Spring在扫描component时会自动注入。

再配置bestPayService(SDK中要求):

@Component

接着,支付部分的实现:先看SDK中的调用方法

PayRequest 

可以看出SDK中的支付方法是在payRequest对象中传入OrderId,OrderAmount等信息,然后利用bestPayService的pay方法即可。

所以,按照规则书写支付部分的逻辑:

@Service

经过测试,上面程序response即为微信返回的信息,其中比较重要的是prepay_id。

以上部分即完成了调用微信下单API和返回prepay_id。

接着开始完成网页支付,先按照惯例阅读“微信H5调起支付”

【微信支付】JSAPI支付开发者文档​pay.weixin.qq.com

官方文档给了一段前端代码:

function 

先在本地项目中测试一下,将文件<script></script>粘贴到resource的static目录下,用浏览器访问(注意:在访问之前需要传入appId,timeStamp等等,可以看上面JavaScript代码中的相应字段)。这些字段怎么获得呢?

显然根据支付流程,这些参数应该通过统一下单接口得到(也就是前一个步骤得到的参数,作为H5支付唤起的参数),所以测试时先请求一下预支付部分(上面的程序),然后将获得的参数注入JavaScript中即可实现。

但每次都这样注入,十分繁琐,所以改为采用freemarker模板技术来动态注入参数。

首先引入freemarker的依赖,在resources目录下的templates目录新建pay.ftl文件(ftl为freemarker默认的后缀),修改控制器的类returnType为ModelAndView,最后返回freemarker的ModelAndView即可。

前端代码如下:

<

其中的语句:

location.href = "${returnUrl}";

用于前端生成签名等信息之后返回的地址(需要设置)

后端控制器:

写法解释:由于经过测试,create.ftl文件需要orderId的传入,所以利用hashMap来存储,最终重定向到ftl文件的同时注入给模板的参数。

@Controller

接下来,开始写接收微信端发来的异步通知,并将后台订单状态变为已支付部分的逻辑:

同样,先看SDK的规则:

微信异步回调函数为

bestPayService

于是,继续在service中添加逻辑

@Override
    

注意:异步通知需要验证以下几点:

(1)验证微信发来异步通知中的签名

(2)验证微信发来异步通知中的支付状态(是否支付成功等)

(3)验证微信发来异步通知中的金额(是否与后台订单金额相同)

(4)验证微信发来异步通知中的支付人是否等于下单人

控制器中添加相应的逻辑代码:

//此函数用于接收微信发过来的异步通知(用于后端修改所下订单的支付状态)

写完商家后台订单支付状态变更模块后,微信一直不停的回调(因为没有返回微信商户处理的结果),所以需要进行最后一步操作。

微信文档:

【微信支付】JSAPI支付开发者文档​pay.weixin.qq.com

返回给微信的xml文件:

<xml>

  

写至freemarker中即可。

以上即为微信支付的开发过程和实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值