【微信支付】springboot

您所在的位置:网站首页 微信订单怎么查询商户 【微信支付】springboot

【微信支付】springboot

2024-07-10 23:25:34| 来源: 网络整理| 查看: 265

上篇文章我们已经结束了微信支付准备工作以及JSAPI调起支付

文章地址:https://blog.csdn.net/ssdadasd15623/article/details/134684556

接下来实现,付款后的查单操作

查询订单分为微信订单号查询以及商户订单号查询,这里使用商户订单号,也就是自己的系统的订单号

查看微信支付文档-商户订单号查询订单

https://pay.weixin.qq.com/docs/merchant/apis/jsapi-payment/query-by-out-trade-no.html 在这里插入图片描述

在请求接口时,注意⚠️:请求参数内的Authorization参数需要提前生成 https://pay.weixin.qq.com/docs/merchant/development/interface-rules/signature-generation.html 在这里微信支付给出了明确的文档教我们如何构造请求签名

在这里插入图片描述

构造请求签名串 第一步是请求方式,这里查询订单是“GET”第二步是请求的绝对URL,这里请求地址是“ https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/{out_trade_no}”,微信给出示例代码如何获取绝对URL,例如订单号为202401010001,商户号为12345678 HttpUrl httpurl = HttpUrl.parse("https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/202401010001?mchid=12345678"); //使用okhttp3 SDK 第三步是当前时间戳,这里使用currentTimeMillis()方法生成时间戳 long timestamp = System.currentTimeMillis() / 1000; //生成时间戳 第四步是请求随机字符串,这里微信支付的工具类给出了生成随机字符串的方法 String nonceStr = WXPayUtil.generateNonceStr(); //生成随机字符串 最后是请求报文主体,这里是GET方法,没有请求体,所以就是一个空的字符串最终组合在一起的字符串为 GET\n //请求方式 /v3/pay/transactions/out-trade-no/202401010001?mchid=12345678\n //请求地址绝对路径 1554208460\n //时间戳 593BEC0C930BF1AFEB40B4A08C8FB242\n //随机字符串 \n

⚠️每行内容后需添加换行符‘\n‘

完整代码:

Controller.java文件

...... @Autowired private WxPayConfig wxPayConfig; //存放微信基本配置数据 @GetMapping("/get_order_status") public Map get_authorization(@RequestParam String order_no) throws IOException, SignatureException, NoSuchAlgorithmException, InvalidKeyException { Map map = new HashMap(); String schema = "WECHATPAY2-SHA256-RSA2048 "; //注意这个,有一个空格 HttpUrl httpurl = HttpUrl.parse("https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/" + order_no + "?mchid=" + wxPayConfig.getMchId()); //构造参与签名的URL HttpGet httpGet = new HttpGet("https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/" + order_no + "?mchid=" + wxPayConfig.getMchId()); httpGet.setHeader("Authorization", schema + getToken("GET", httpurl, "")); //微信支付文档说明,GET请求时body为空 httpGet.setHeader("Accept", "application/json;charset=utf-8"); CloseableHttpClient httpClient = HttpClientBuilder.create().build(); CloseableHttpResponse response = httpClient.execute(httpGet); // 获取响应状态码 int statusCode = response.getStatusLine().getStatusCode(); // 获取响应内容 String responseBody = EntityUtils.toString(response.getEntity()); // 关闭响应对象 response.close(); map.put("code", statusCode); map.put("data", responseBody); return map; } String getToken(String method, HttpUrl url, String body) throws UnsupportedEncodingException, SignatureException, NoSuchAlgorithmException, InvalidKeyException { String nonceStr = WXPayUtil.generateNonceStr(); //WXPayUtil是微信支付自带的sdk long timestamp = System.currentTimeMillis() / 1000; //生成时间戳 String message = buildMessage(method, url, timestamp, nonceStr, body); String signature = sign(message.getBytes("utf-8")); return "mchid=\"" + wxPayConfig.getMchId() + "\"," + "nonce_str=\"" + nonceStr + "\"," + "timestamp=\"" + timestamp + "\"," + "serial_no=\"" + wxPayConfig.getMchSerialNo() + "\"," //mchserialNo是微信支付中申请的证书序列号 + "signature=\"" + signature + "\""; } String sign(byte[] message) throws InvalidKeyException, SignatureException, NoSuchAlgorithmException { Signature sign = Signature.getInstance("SHA256withRSA"); sign.initSign(wxPayConfig.getPrivateKey()); sign.update(message); return Base64.getEncoder().encodeToString(sign.sign()); } String buildMessage(String method, HttpUrl url, long timestamp, String nonceStr, String body) { String canonicalUrl = url.encodedPath(); if (url.encodedQuery() != null) { canonicalUrl += "?" + url.encodedQuery(); } return method + "\n" + canonicalUrl + "\n" + timestamp + "\n" + nonceStr + "\n" + body + "\n"; } ......

使用apifox测试结果: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭