微信扫码支付(NATIVE) java
微信扫码支付功能(模式二)
模式二说明: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5
1. 该案列用的是微信官方提供的sdk,首先去微信官方下载sdk,SDK配置可参考
https://www.cnblogs.com/lccsdncnblogs/p/wxpay.html
直接上干货
/** * 微信扫码支付(NATIVE) * @return */ public String wxPayNATIVE(HttpServletRequest request) { try { String out_trade_no = System.currentTimeMillis( ) + ""; Map< String, String > maps = new HashMap<>( );//商品描述 maps.put("body", "xxxxx费用"); maps.put("out_trade_no", out_trade_no + ""); //设置支付金额(分) maps.put("total_fee", 1 + ""); maps.put("spbill_create_ip", getRealIp(request)); //回调函数 maps.put("notify_url", "http://xxxxxxxxxxxxxxxxxx/notifyUrl"); maps.put("trade_type", "NATIVE"); MyWxPayConfig myWxPayConfig = new MyWxPayConfig( ); WXPay wxPay = new WXPay(myWxPayConfig); Map< String, String > reqData = wxPay.fillRequestData(maps); Map< String, String > map = wxPay.unifiedOrder(reqData); System.err.println(map); return map.get("code_url"); } catch (Exception e) { e.printStackTrace( ); } return "二维码生成失败!"; }
获取ip
public String getRealIp(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }
支付回调函数 notifyUrl
/** * 微信支付 回调函数 */ public void notifyUrl(HttpServletRequest request) throws Exception {//读取参数 BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream( ))); String line; StringBuilder sb = new StringBuilder( ); while ((line = br.readLine( )) != null) { sb.append(line); } if (StringUtils.isBlank(sb)) { return; } //支付结果通知的xml格式数据 String notifyData = sb.toString( ); MyWxPayConfig myWxPayConfig = new MyWxPayConfig( ); WXPay wxpay = new WXPay(myWxPayConfig); Map< String, String > notifyMap = WXPayUtil.xmlToMap(notifyData); //验证签名是否正确 if (wxpay.isPayResultNotifySignatureValid(notifyMap)) { //支付成功 if ("SUCCESS".equals(notifyMap.get("result_code"))) { //商户订单号 String out_trade_no = notifyMap.get("out_trade_no"); Student order = Student.dao.findFirst("select * from student where wx_order_number = ? ", out_trade_no); order.setIspay(1); order.setPayMethod(2); order.setPayTime(new Date( )); order.update( ); //把订单状态改成已付款 } else { //log.info("微信支付回调函数:支付失败"); } } else { //log.info("微信支付回调函数:微信签名错误"); } }
{nonce_str=6LaEcEc4fzyAfTWN, code_url=weixin://wxpay/bizpayurl?pr=2mjNiuG, appid=wxea6cab2463501e33, sign=50FC8428E809E62AB7F11256581661AC, trade_type=NATIVE, return_msg=OK, result_code=SUCCESS, mch_id=1601460322, return_code=SUCCESS, prepay_id=wx2514033483568531299a2d15fad6880000}
标红部分直接粘贴到微信中测试支付
成功之后 , 将路径放到二维码中
本文来自博客园,作者:lanwf,转载请注明原文链接:https://www.cnblogs.com/lccsdncnblogs/p/13559649.html