微信支付
开发准备
- 小程序的appid
- 小程序的appSecret
- 商户号
- 序列号
- 微信支付的apiv3秘钥
- 回调域名
熟悉微信的支付流程:
扫码支付的流程:
小程序的支付业务流程:
app支付的流程:
根据流程图我们可以大致熟悉对接流程:
1.在支付之前,需要在商户的后台进行下单,生成订单的信息,即订单金额,订单编号,商品;
2.根据对应的支付方式,封装需要的参数,调用微信支付的统一下单的api接口进行下单;
3.统一下单成功之后,微信后台会返回对应的一些数据,返回的类型如下:
a.扫码支付统一下单会生成对应的二维码图片的链接code_url;
b.app和小程序支付统一下单后会返回预支付的id
4.如果扫码支付,你要用code_url 生成一个二维码展示在前端页面供客户扫码付款;如果是app和小程序支付,后端只需将prepay_id及需要的参数传给app和小程序端。app会通过调用SDK、小程序会通过调用微信的JS发起支付。
5,客户付款成功后,客户的微信端会展示付款结果信息,同时微信后台会异步调用商户后台的回调接口(回调的api接口在统一下单作为下单参数),更新商户系统的支付单状态。
需要的sdk
<!--微信支付-->
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
继承swagger 方便后期测试
application.properties
# appid
wxpay.appid= xxxxx
# 商户号
wxpay.mch-id=xxxx
# 序列号
wxpay.mch-serial-no=xxxxx
# 私钥文件
wxpay.private-key-path=apiclient_key.pem
# v3密码
wxpay.api-v3-key=xxxxx
# 支付成功回调地址
wxpay.notify-domain=xxxxx
配置类
com.xxx.config
Swagger2Config
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.ApiSelectorBuilder;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
/**
* @author 小南蜀黍
*/
@Configuration
@EnableSwagger2
public class Swagger2Config {
@Bean
public Docket docket(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(new ApiInfoBuilder().title("微信支付接口").build());
}
}
** WxPayConfig **
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @author 小南蜀黍
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "wxpay")
public class WxPayConfig {
/**
* 商户号
*/
private String mchId;
/**
* 商户api序列号
*/
private String mchSerialNo;
/**
* 商户私钥文件
*/
private String privateKeyPath;
/**
* apiV3密钥
*/
private String apiV3Key;
/**
* appId
*/
private String appid;
/**
* 支付成功回调地址
*/
private String notifyDomain;
}