【微信支付】springboot-java接入微信支付-JSAPI支付/查单/退款/发送红包(二)---查单

这篇具有很好参考价值的文章主要介绍了【微信支付】springboot-java接入微信支付-JSAPI支付/查单/退款/发送红包(二)---查单。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上篇文章我们已经结束了微信支付准备工作以及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
【微信支付】springboot-java接入微信支付-JSAPI支付/查单/退款/发送红包(二)---查单,java,spring boot,微信

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

【微信支付】springboot-java接入微信支付-JSAPI支付/查单/退款/发送红包(二)---查单,java,spring boot,微信

构造请求签名串

  1. 第一步是请求方式,这里查询订单是“GET”
  2. 第二步是请求的绝对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
  1. 第三步是当前时间戳,这里使用currentTimeMillis()方法生成时间戳
long timestamp = System.currentTimeMillis() / 1000; //生成时间戳
  1. 第四步是请求随机字符串,这里微信支付的工具类给出了生成随机字符串的方法
String nonceStr = WXPayUtil.generateNonceStr(); //生成随机字符串
  1. 最后是请求报文主体,这里是GET方法,没有请求体,所以就是一个空的字符串
  2. 最终组合在一起的字符串为
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<String, Object> get_authorization(@RequestParam String order_no) throws IOException, SignatureException, NoSuchAlgorithmException, InvalidKeyException {
        Map<String, Object> 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测试结果:
【微信支付】springboot-java接入微信支付-JSAPI支付/查单/退款/发送红包(二)---查单,java,spring boot,微信文章来源地址https://www.toymoban.com/news/detail-777969.html

到了这里,关于【微信支付】springboot-java接入微信支付-JSAPI支付/查单/退款/发送红包(二)---查单的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java对接微信支付:JSAPI支付成功之“微信回调”

    承接上一篇微信支付,现在简单说一下 微信支付回调 目录 一、支付回调 二、微信回调地址问题 1.本地/上线测试 2.控制器调用接口(代码) 总结 当用户支付成功之后,支付平台会向我们指定的服务器接口发送请求传递订单支付状态数据 如果你是再本地进行测试,那就需要使用

    2024年02月12日
    浏览(29)
  • java微信公众号JSAPI支付以及所遇到的坑

    上周做了个支付宝微信扫码支付,今天总结一下。微信相比支付宝要麻烦许多 由于涉及到代理商,没办法,让我写个详细的申请流程,懵逼啊。 笔记地址 http://note.youdao.com/noteshare?id=269ddffb1f95e69eafb281d054f9ff25sub=82AACBC2E6814133938D407BD3FF4737 先梳理下流程,对应的文档 微信统一下

    2024年02月08日
    浏览(32)
  • java微信小程序支付-回调(Jsapi-APIv3)

            准备:  接入前准备-小程序支付 | 微信支付商户平台文档中心 准备好了就可以获得( 第二点里需要的参数 ):         参数1 商户号 merchantId:xxxxxx(全是数字)         参数2 商户APIV3密钥 apiV3key:xxxxxxx(32位字母数字大小写串,开发自己准备的)         参

    2024年02月08日
    浏览(36)
  • 【微信小程序】Java实现微信支付(小程序支付JSAPI-V3)java-sdk工具包

          对于一个没有写过支付的小白,打开微信支付官方文档时彻底懵逼 ,因为 微信支付文档太过详细, 导致我无从下手,所以写此文章,帮助第一次写支付的小伙伴梳理一下。 一、流程分为三个接口:(这是前言,先看一遍,保持印象,方便理解代码) 1、第一个接口:

    2024年02月03日
    浏览(45)
  • 【微信小程序】Java实现微信支付(小程序支付JSAPI-V3)java-sdk工具包(包含支付出现的多次回调的问题解析,接口幂等性)

          对于一个没有写过支付的小白,打开微信支付官方文档时彻底懵逼 ,因为 微信支付文档太过详细, 导致我无从下手,所以写此文章,帮助第一次写支付的小伙伴梳理一下。 一、流程分为三个接口:(这是前言,先看一遍,保持印象,方便理解代码) 1、第一个接口:

    2024年01月16日
    浏览(60)
  • 微信的 h5 支付和 jsapi 支付

    申请地址: https://pay.weixin.qq.com/ 如果你还没有微信商户号,请点击上面的链接进行申请,如果已经有了,可以跳过这一步 首先点击 账户中心 ▶ API安全 ▶ 申请API证书 申请详细步骤: https://kf.qq.com/faq/161222NneAJf161222U7fARv.html 首先点击 账户中心 ▶ API安全 ▶ 设置APIv3密钥 ▶

    2024年02月13日
    浏览(30)
  • 【微信公众号】微信 jsapi 支付大概流程

    jsapi 支付可运用于微信小程序和 h5 jsapi 支付不会弹出二维码(这点与 native 支付不同) jsapi 支付运用于移动端 native 支付运用于 PC 端 🔥 微信支付需要商家申请 商户号 ,商务号需要和小程序或公众号(服务号)进行绑定 💦 在微信商务平台可开通 native 支付、jsapi 支付或其

    2024年02月09日
    浏览(50)
  • JAVA接入小程序微信支付

    1、在 微信公众平台 注册应用,并保存好appId和appSecret 2、在微信支付商户平台 注册一个商户,保存好mchId(商户id)、api_key(支付密钥)、以及商户证书序列号。还需要将支付商户密钥文件下载放到项目resources目录中 (结构中包含的其他内容与支付无关) 1、导入jar包 2、在y

    2024年04月14日
    浏览(26)
  • uniapp微信小程序JSAPI支付前端生成签名,并调起微信支付

    签名方式使用的是SHA256withRSA 插件 npm install jsrsasign 使用

    2024年01月17日
    浏览(46)
  • 微信支付(JSAPI支付)/支付宝支付(手机网站支付)实现思路及实现方案-无源码

    停车系统 一个二维码同时支持微信及支付宝扫码付款,使用手机网站实现 临时车费用缴费二维码需要通知支持微信及支付宝。 用户缴纳的停车费直接到各个商户的账户上,不经过停车系统开发公司。 微信:使用微信服务商提供的服务 支付宝:使用支付服务商提供的服务 两

    2024年02月09日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包