springboot微信sdk方式进行微信支付
官方文档:https://pay.weixin.qq.com/wiki/doc/api/index.html
第三方SDK:https://github.com/Pay-Group/best-pay-sdk
首先说明一下,微信支付功能接口权限只有微信服务号才拥有。
支付开发中,一般在第10步异步通知成功了,就基本上可以百分百说明支付成功了,可以修改支付状态为已支付。
开发步骤:
1.pom.xml中添加Maven依赖
<dependency> <groupId>cn.springboot</groupId> <artifactId>best-pay-sdk</artifactId> <version>1.1.0</version>
</dependency>
3.调用方法发起支付
controller
service:
JsonUtil格式转换工具类:
/** * 把对象转换成json格式,便于观看 */ public class JsonUtil { public static String toJson(Object object) { GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setPrettyPrinting(); Gson gson = gsonBuilder.create(); return gson.toJson(object); } }4.在static文件夹下编写微信内H5调起支付的前端代码pay.html(可以从微信支付官方文档中拷贝代码),检测是否可以支付, 此步骤可省略。
ps:为什么把支付的前端代码写在后台中?
如果放在前端的话,加入几个地方或几个模块都可以发起微信支付,每次发起都要调用这个前端代码,
这个前端代码就要写好几次。如果放在后端的话,只要给个请求,就可以直接调用这段代码。
5.对支付的前端代码动态注入参数以发起支付。 这里我们用到模板技术。
(1)在pom.xml中引入freemarker依赖
<!-- freemarker模板技术 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
(2)把controller中发起支付的方法返回类型改为ModelAndView,return new ModelAndView("path",model);//path为模板存放的路径,不包括模板后缀名。这里model我们采用Map类型,把payResponse和returnUrl携带过去。 (3)在相应的地方,创建模板文件xx.ftl。如我上述步骤的path为pay/create,则我在resources/templates目录下创建文件夹pay,在pay目录下再创建create.ftl文件。 (4)修改pay.html成模板,参数动态注入。${xxxx}
(5)模板中,支付后进行跳转到returnUrl。
create.ftl模板:
6.填写微信支付的支付授权目录。比如我的前端支付代码访问路径是http://xxxxx(网站根路径)/sell/pay.html。
支付授权目录就写http://xxxxx(网站根路径)/sell/
service:
controller:
success.ftl异步通知成功模板:
<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> </xml>
8.微信退款
(1)设置退款人,退款金额,退款方式
(2)退款
service: