1.通过微信平台为商家提供代收款服务
微信⽀付业务—商户注册微信⽀付业务
申请appid和key
2.申请⽀付订单—商户向⽀付平台申请⽀付链接
⽀付订单,并不是⽤户提交的商品订单,⽽是商户向微信⽀付平台申请的⽀付链接
2.1导入依赖
wxpay的maven依赖
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
2.2 创建微信⽀付配置类,配置商户信息
创建⼀类,实现WxPayConfig接⼝
重写三分⽅法,分别设置商户AppID\商户ID\商户密钥
package com.qfedu.fmmall.config;
import com.github.wxpay.sdk.WXPayConfig;
import java.io.InputStream;
public class MyPayConfig implements WXPayConfig {
@Override
public String getAppID() {
return "wx632c8f211f8122c6";
}
@Override
public String getMchID() {
return "1497984412";
}
@Override
public String getKey() {
return "sbNCm1JnevqI36LrEaxFwcaT0hkGxFnC";
}
@Override
public InputStream getCertStream() {
return null;
}
@Override
public int getHttpConnectTimeoutMs() {
return 0;
}
@Override
public int getHttpReadTimeoutMs() {
return 0;
}
}
2.3 设置⽀付订单的参数
HashMap<String,String> data = new HashMap<>();
data.put("body","咪咪萧条"); //商品描述
data.put("out_trade_no",orderId); //使⽤当前⽤户订单的编号作为当前⽀付交易的
交易号
data.put("fee_type","CNY"); //⽀付币种
data.put("total_fee","1"); //⽀付⾦额
data.put("trade_type","NATIVE"); //交易类型
data.put("notify_url","/pay/success"); //设置⽀付完成时的回调⽅法
接⼝
2.4 申请⽀付链接
WXPay wxPay = new WXPay(new MyPayConfig());
Map<String, String> resp = wxPay.unifiedOrder(data); //发送请求
orderInfo.put("payUrl",resp.get("code_url"));
全部代码
@PostMapping("/add")
public ResultVO add(String cids, @RequestBody Orders order){
ResultVO resultVO = null;
try {
Map<String, String> orderInfo = orderService.addOrder(cids, order);
if(orderInfo!=null){
String orderId = orderInfo.get("orderId");
//设置当前订单信息
HashMap<String,String> data = new HashMap<>();
data.put("body",orderInfo.get("productNames")); //商品描述
data.put("out_trade_no",orderId); //使用当前用户订单的编号作为当前支付交易的交易号
data.put("fee_type","CNY"); //支付币种
//data.put("total_fee",order.getActualAmount()*100+""); //支付金额
data.put("total_fee","1");
data.put("trade_type","NATIVE"); //交易类型
data.put("notify_url","http://47.118.45.73:8080/pay/callback"); //设置支付完成时的回调方法接口
//发送请求,获取响应
//微信支付:申请支付连接
WXPay wxPay = new WXPay(new MyPayConfig());
Map<String, String> resp = wxPay.unifiedOrder(data);
orderInfo.put("payUrl",resp.get("code_url"));
//orderInfo中包含:订单编号,购买的商品名称,支付链接
resultVO = new ResultVO(ResStatus.OK,"提交订单成功!",orderInfo);
}else{
resultVO = new ResultVO(ResStatus.NO,"提交订单失败!",null);
}
} catch (SQLException e) {
resultVO = new ResultVO(ResStatus.NO,"提交订单失败!",null);
} catch (Exception e) {
e.printStackTrace();
}
return resultVO;
}
2.5支付回调,修改订单状态。
package com.qfedu.fmmall.controller;
import com.github.wxpay.sdk.WXPayUtil;
import com.qfedu.fmmall.service.OrderService;
import com.qfedu.fmmall.websocket.WebSocketServer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.websocket.Session;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/pay")
public class PayController {
@Autowired
private OrderService orderService;
/**
* 回调接口:当用户支付成功之后,微信支付平台就会请求这个接口,将支付状态的数据传递过来
*/
@RequestMapping("/callback")
public String paySuccess(HttpServletRequest request) throws Exception {
System.out.println("--------------------callback");
// 1.接收微信支付平台传递的数据(使用request的输入流接收)
ServletInputStream is = request.getInputStream();
byte[] bs = new byte[1024];
int len = -1;
StringBuilder builder = new StringBuilder();
while((len = is.read(bs))!=-1){
builder.append(new String(bs,0,len));
}
String s = builder.toString();
//使用帮助类将xml接口的字符串装换成map
Map<String, String> map = WXPayUtil.xmlToMap(s);
if(map!=null && "success".equalsIgnoreCase(map.get("result_code"))){
//支付成功
//2.修改订单状态为“待发货/已支付”
String orderId = map.get("out_trade_no");
int i = orderService.updateOrderStatus(orderId, "2");
System.out.println("--orderId:"+orderId);
//3.通过websocket连接,向前端推送消息
WebSocketServer.sendMsg(orderId,"1");
//4.响应微信支付平台
if(i>0){
HashMap<String,String> resp = new HashMap<>();
resp.put("return_code","success");
resp.put("return_msg","OK");
resp.put("appid",map.get("appid"));
resp.put("result_code","success");
return WXPayUtil.mapToXml(resp);
}
}
return null;
}
}