快捷搜索: 王者荣耀 脱发

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:


经验分享 程序员 微信小程序 职场和发展