微信支付的实现

public void report(String domain, long elapsedTimeMillis, Exception ex) {

}

public DomainInfo getDomain(WXPayConfig config) {

}

}

}

添加依赖

org.springframework.boot

spring-boot-starter-web

org.slf4j

slf4j-log4j12

org.springframework.boot

spring-boot-starter-web

ch.qos.logback

logback-classic

org.apache.httpcomponents

httpclient

4.5.3

org.slf4j

slf4j-api

1.7.21

org.slf4j

slf4j-simple

1.7.21

com.google.zxing

core

3.3.3

com.google.zxing

javase

3.3.3

org.springframework.boot

spring-boot-starter-thymeleaf

下单、生成二维码

/**

*/

@Service

public class PayService {

/**

    下单 @param goodsId 商品id @param price 价格 @return 二维码的URL

*/

public Map<String, String> makeOrder(String goodsId, Long price) throws Exception {

//创建支付对象

MyWXPayConfig config = new MyWXPayConfig();

WXPay wxPay = new WXPay(config);

Map<String,String> map = new HashMap<>();

map.put(“appid”,config.getAppID());

map.put(“mch_id”,config.getMchID());

map.put(“device_info”,“WEB”);

map.put(“nonce_str”, UUID.randomUUID().toString().replace(“-”,“”));

map.put(“body”,“商城购物”);

String tradeNo = UUID.randomUUID().toString().replace(“-”, “”);

map.put(“out_trade_no”, tradeNo);

map.put(“fee_type”,“CNY”);

map.put(“total_fee”,String.valueOf(price));

map.put(“trade_type”,“NATIVE”);

map.put(“product_id”,goodsId);

//执行统一下单

Map<String, String> result = wxPay.unifiedOrder(map);

System.out.println(“result:”+result);

//保存订单号

result.put(“trade_no”,tradeNo);

return result;

}

/**

    生成二维码 @param url @param response

*/

public void makeQRCode(String url, HttpServletResponse response){

//通过支付链接生成二维码

HashMap<EncodeHintType, Object> hints = new HashMap<>();

hints.put(EncodeHintType.CHARACTER_SET, “UTF-8”);

hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);

hints.put(EncodeHintType.MARGIN, 2);

try {

MatrixToImageWriter.writeToStream(bitMatrix, “PNG”, response.getOutputStream());

System.out.println(“创建二维码完成”);

} catch (Exception e) {

e.printStackTrace();

}

}

/**

    检查订单状态 @param tradeNo @return @throws Exception

*/

public String checkOrder(String tradeNo) throws Exception {

MyWXPayConfig config = new MyWXPayConfig();

String str =

“”+

“”+config.getAppID()+“”+

“<mch_id>”+config.getMchID()+“</mch_id>”+

“<nonce_str>”+UUID.randomUUID().toString().replace(“-”,“”)+“</nonce_str>”+

“<out_trade_no>”+tradeNo+“</out_trade_no>”+

“5E00F9F72173C9449F802411E36208734B8138870ED3F66D8E2821D55B317078”+

“”;

WXPay pay = new WXPay(config);

Map<String,String> map = WXPayUtil.xmlToMap(str);

Map<String, String> map2 = pay.orderQuery(map);

String state = map2.get(“trade_state”);

System.out.println(“订单”+tradeNo+“,状态”+state);

return state;

}

}

订单控制器

@RestController

@RequestMapping(“/order”)

public class OrderController {

@Autowired

private PayService payService;

private String tradeNo;

//二维码生成

@GetMapping(“/code”)

public void qrcode(@RequestParam(“goodsId”)String goodsId,

@RequestParam(“price”)Long price,

HttpServletResponse response){

try {

Map<String,String> map = payService.makeOrder(goodsId, price);

payService.makeQRCode(map.get(“code_url”),response);

System.out.println(“生成订单号:” + map.get(“trade_no”));

tradeNo = map.get(“trade_no”);

} catch (Exception e) {

e.printStackTrace();

}

}

//支付后通知

@PostMapping(“/notify”)

public void notify(HttpServletRequest request,HttpServletResponse response) throws Exception {

String str = Streams.asString(request.getInputStream());

//将字符串xml转换为Map

Map<String, String> map = WXPayUtil.xmlToMap(str);

//读取订单号

String no = map.get(“out_trade_no”);

//模拟修改商户后台数据库订单状态

System.out.println(“更新订单状态:”+no);

response.getWriter().println(“ ” +

" <return_code><![CDATA[SUCCESS]]></return_code> " +

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