Java后端对接微信支付(微信小程序、APP、PC端扫码)非常全,包含查单、退款

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

//trade_type=NATIVE时,此参数必传

m.put(“product_id”, order.getId());

//生成签名

m.put(“sign”, WXPayUtil.generateSignature(m, OrderUtils.APP_KEY));

//发送请求,请求路径:UNIFIED_ORDER_URL = “https://api.mch.weixin.qq.com/pay/unifiedorder”

HttpClient client = new HttpClient(OrderUtils.UNIFIED_ORDER_URL);

//设置xml格式的参数,要把map转为xml

client.setXmlParam(WXPayUtil.mapToXml(m));

//设置支持https

client.setHttps(true);

//执行请求发送

client.post();

//xml转为map接受结果

Map<String, String> response = WXPayUtil.xmlToMap(client.getContent());

long end = System.currentTimeMillis();

System.out.println(“请求https://api.mch.weixin.qq.com/pay/unifiedorder耗时:” + (end - begin) + “ms”);

System.out.println(“请求结果:” + JSON.toJSONString(response));

if (“SUCCESS”.equals(response.get(“return_code”)) && “SUCCESS”.equals(response.get(“result_code”))) {

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

//二维码地址

param.put(“code_url”, response.get(“code_url”));

param.put(“order_sn”, order.getOrderSn());

param.put(“order_id”, order.getId());

param.put(“total_fee”, order.getActualPrice().multiply(new BigDecimal(“100”)).longValue() + “”);

return param;

}

//为空代表下单失败

return null;

}

上面代码中最重要的返回结果就是code_url。即生成的支付二维码地址,然后用微信扫码并付款即可。

4.APP统一下单


应用场景是APP端调用微信支付,对接uniapp开发的app

归纳如下:

appid APP的app_id
mch_id 商户号
nonce_str 随机字符串,可以调用 WXPayUtil下 generateNonceStr方法生成
sign

可以调用 WXPayUtil下 generateSignature方法生成,这个方法需要用到准备工作中的商户API密钥(APP_KEY)来加密。

body 商品描述,建议软件名字+产品操作,例如天天爱消除-游戏充值
out_trade_no 我们自己生成的订单号,保证同一商号下唯一即可
total_fee 金额,注意单位是分
spbill_create_ip 用户客户端ip
notify_url 支付结果通知回调地址
trade_type 交易类型,我们这里填APP

但是下完单之后,怎么样才能让前端调用微信支付呢?这里需要查看uniapp 官方文档 微信小程序支付:

我们可以看到常规的比如 appid、商户号 需要,充要的是预支付id prepayid和签名 。

代码实现如下:

public Map<String, String> unifiedOrderByApp(Order order, String clientIp) throws Exception {

long begin = System.currentTimeMillis();

//使用map封装微信支付需要的固定参数

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

//1、设置支付参数

m.put(“appid”, OrderUtils.APP_APP_ID);

m.put(“mch_id”, OrderUtils.MCH_ID);

m.put(“nonce_str”, WXPayUtil.generateNonceStr());

//商品描述 例如:天天爱消除-游戏充值

m.put(“body”, “换芯易-” + order.getGoodsModel() + “购买”);

//订单号

m.put(“out_trade_no”, order.getOrderSn());

m.put(“total_fee”, order.getActualPrice().multiply(new BigDecimal(“100”)).longValue() + “”);

m.put(“spbill_create_ip”, clientIp);

m.put(“notify_url”, OrderUtils.NOTIFY_URL);

m.put(“trade_type”, “APP”);

//生成签名

m.put(“sign”, WXPayUtil.generateSignature(m, OrderUtils.APP_KEY));

//发送请求,请求路径:UNIFIED_ORDER_URL = “https://api.mch.weixin.qq.com/pay/unifiedorder”

HttpClient client = new HttpClient(OrderUtils.UNIFIED_ORDER_URL);

//设置xml格式的参数,要把map转为xml

client.setXmlParam(WXPayUtil.mapToXml(m));

//设置支持https

client.setHttps(true);

//执行请求发送

client.post();

//xml转为map接受结果

Map<String, String> response = WXPayUtil.xmlToMap(client.getContent());

long end = System.currentTimeMillis();

System.out.println(“请求htt

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值