# 微信支付Plus
本组件是对微信支付SDK的二次封装,代码中包含了微信支付SDK部分。使用本组件,可以极大减少微信支付对接的代码量。
本支付封装组件支持小程序支付和本地支付(扫码支付)两种方式。
## 组件集成
1.下载本代码,使用maven的install命令安装到本地仓库。
2.在你工程的pom文件中添加依赖。
```xml
<dependency>
<groupId>com.github</groupId>
<artifactId>wxpay_plus</artifactId>
<version>1.0.0</version>
</dependency>
```
3.在配置文件中,添加支付相关的配置,如以下格式:
```yaml
wxpay:
appId:
appSecret: app密钥
mchId: 商户号
partnerKey: 商户密钥
notifyUrl: 回调地址
```
4.修改springboot启动类@SpringBootApplication注解的scanBasePackages属性,添加com.github.wxpay包。
```java
@SpringBootApplication(scanBasePackages = {"com.lkd","com.github.wxpay"})
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
}
```
## 代码实例
### 下单支付
参考代码:
```java
@Autowired
private WxPayTemplate wxPayTemplate;
/**
* 微信小程序支付
* @param payVO
* @return
*/
@PostMapping("/weixinPay")
public Map<String, String> weixinPay(@RequestBody PayVO payVO){
var orderEntity = orderService.createOrder(payVO);//创建订单
//封装支付请求对象调用支付
var param=new WxPayParam();
param.setBody(orderEntity.getSkuName());//商品名称
param.setOutTradeNo(orderEntity.getOrderNo());// 订单号
param.setTotalFee(orderEntity.getAmount().intValue());//金额
param.setOpenid(orderEntity.getOpenId());//如果本地支付openid为""
return wxPayTemplate.requestPay(param);
}
```
如上代码,将requestPay方法返回的map给前端。
如果是本地支付(扫码支付),openid属性传空字符串即可。
### 支付回调
wxPayTemplate的validPay方法用于判断支付回调,可参考以下代码:
```java
/**
* 微信支付回调接口
* @param request
* @return
*/
@RequestMapping("/payNotify")
@ResponseBody
public void payNotify(HttpServletRequest request, HttpServletResponse response){
try {
Map<String, String> result = wxPayTemplate.validPay(request.getInputStream());
if("SUCCESS".equals( result.get("code") )){ //返回码成功
String orderSn= result.get("order_sn");//获取订单号
log.info("支付成功,修改订单状态和支付状态,订单号:{}",orderSn);
}
//给微信支付一个成功的响应
response.setContentType("text/xml");
response.getWriter().write(WXConfig.RESULT);
}catch (Exception e){
log.error("支付回调处理失败",e);
}
}
```