JAVA实现微信扫码【NATIVE】支付

注意事项

  • 需要自己注册账号,【这里不提供,如果没有的那就没有办法实现这个功能】
  • 微信只有正式版,所以大家在支付的时候要注意看支付金额

支付业务流程:

在这里插入图片描述

第一步【导入依赖】

<!-- 微信支付sdk V2需要的依赖-->
<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.5.3</version>
</dependency>

第二步【下载微信SDK和DEMO】

微信开发者文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1

在这里插入图片描述

第三步【注册和配置natapp】

  • 这些配置操作实在是不要太简单了,实在不会的百度或者留言

  • 任何白嫖的人,送你一句话:不喜欢可以不用,但是不要诋毁别人的成果!!!

在这里插入图片描述

在这里插入图片描述

这里配置端口一般是后端项目的端口【如果使用了Nginx就使用Nginx端口,否则就Tomcat、Jetty端口】

在这里插入图片描述

首页点击客户端下载导航就是下面这个页面:

在这里插入图片描述

第四步【配置VX信息】

将wxpay包拷贝到项目当中,划红线的自己写的配置写,在下面有

在这里插入图片描述

public class MyVXConfig extends WXPayConfig{
	private String appId = "填写自己的appId";
	private String mchId = "填写自己的mchId";
	private String key = "填写自己的key";

	@Override
	String getAppID() {
		return this.appId;
	}

	@Override
	String getMchID() {
		return this.mchId;
	}

	@Override
	String getKey() {
		return this.key;
	}

	@Override
	InputStream getCertStream() {
		return null;
	}

	@Override
	IWXPayDomain getWXPayDomain() {
		return new IWXPayDomain() {
			@Override
			public void report(String domain, long elapsedTimeMillis, Exception ex) {

			}
            //这里写的并不严谨,有想法的小伙伴可以自己编写配置
			@Override
			public DomainInfo getDomain(WXPayConfig config) {
				return new IWXPayDomain.DomainInfo(WXPayConstants.DOMAIN_API, true);
			}
		};
	}
}

第五步【双击打开natpp.exe,类似一个命令窗口】

在这里插入图片描述

输入指令启动:
natapp -authtoken=XXXXXXXX  ====》》》粘贴复制的token
以下就是natapp启动状态【注意只要网重新连了就需要改异步回调】,每次支付完后下面就会输出代理的接口

在这里插入图片描述

第六步【编写Controller】

/**
	 * 发起微信下单,生成二维码 连接返回给前端
	 * @param orderNo 下单编号 
	 * @param req
	 * @param resp
	 * @return 返回订单信息和二维码连接
	 * @throws Exception
 */
@GetMapping("/wxpay/createqccode/{orderNo}")
@ResponseBody
public Dto createqccode(@PathVariable String orderNo,
						HttpServletRequest req,
						HttpServletResponse resp) throws Exception {
	WXPay wxpay = new WXPay(new MyVXConfig());

	ItripHotelOrder orderInfo = orderService.queryOrderInfo(orderNo);
	Map<String, String> data = new HashMap<String, String>();
	// 商品描述
	data.put("body", orderInfo.getHotelName());
	// 商户订单号
	data.put("out_trade_no", orderInfo.getOrderNo());
	// 标价金额
	data.put("total_fee", "1");
	// 终端IP:调用微信支付API的机器IP
	data.put("spbill_create_ip", "127.0.0.1");
	// 异步通知 url  这里需要使用natapp内网穿透
	data.put("notify_url", "http://u2pjmk.natappfree.cc/trade/api/vxNotify");
	// 交易类型:此处指定为扫码支付
	data.put("trade_type", "NATIVE");

	Map<String, String> res = wxpay.unifiedOrder(data);
	String returnCode = res.get("return_code");
	if (SUCCESS.equals(returnCode)) {
		Map<String, Object> da = new HashMap<>();
		System.out.println("链接:res.get(\"code_url\") = " + res.get("code_url"));
		da.put("codeUrl", res.get("code_url"));
		da.put("payAmount", orderInfo.getPayAmount());
		da.put("count", orderInfo.getCount());
		da.put("hotelName", orderInfo.getHotelName());
		da.put("roomId", orderInfo.getRoomId());
		return DtoUtil.returnDataSuccess(da);
	} else {
		return DtoUtil.returnFail("50001", res.get("return_msg"));
	}
}

/**
 * 微信支付异步回调
 * @param request
 * @param response
 * @throws Exception
*/
@PostMapping("/vxNotify")
public void vxNotify(HttpServletRequest request,HttpServletResponse response) throws Exception {
	//将订单修改为支付成功为2, 支付方式为payType为1  修改实时库存表
	String s = IOUtils.toString(request.getInputStream());
	Map<String, String> toMap = WXPayUtil.xmlToMap(s);
	//订单号
	String orderNo = toMap.get("out_trade_no");
    //微信交易号
	String tradeNo = toMap.get("transaction_id");
	orderService.updateOrderStatusANDtempStore(orderNo, tradeNo);

	Map<String,String> result = new HashMap<>();
	if(toMap.get("return_code").equals(SUCCESS)){
		result.put("return_code",SUCCESS);
		result.put("return_msg","OK");
	} else {
		result.put("return_code","FAIL");
		result.put("return_msg","支付失败");
	}
	PrintWriter writer = response.getWriter();
	writer.print(WXPayUtil.mapToXml(result));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值