java项目微信公众号接入微信支付,结合微信支付开发文档,已踩坑,有详细代码,必成

最近为公司开发一个新功能,具体是什么不重要,主要是这个功能需要对接微信支付,需要在微信页面调起微信支付
基本上我也是初次接触微信支付的对接,所以我先去看了微信的支付开发文档地址如下:
https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1
在这里我采用的是JSAPI来调起微信支付,这个具体的方法和它的名字很对应,就是利用H5页面的微信内置的js来调起微信支付
当然,想要在微信公众号里调支付,我就需要知道公众号的appID,API密钥,和商户号,这是一切的基础
然后我们需要在微信的支付开发文档中找到统一下单接口的页面
在这里插入图片描述
在这个页面中微信告诉了我们几点
1.他的接口地址:https://api.mch.weixin.qq.com/pay/unifiedorder
2.需要传给微信这个地址的一系列参数
对于一些很常见的参数我就不再说明,这里我重点将几个比较容易发生错误的参数进行讲解:
1.nonce_str
在这里插入图片描述
nonce_str参数需要一定的方法生成,代码如下

//生成随机字符串
    public static String CreateNoncestr() {
   
        String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        String res = "";
        for (int i = 0; i < 16; i++) {
   
            Random rd = new Random();
            res += chars.charAt(rd.nextInt(chars.length() - 1));
        }
        return res;
    }

2.out_trade_no
在这里插入图片描述
商户订单号:随机生成,唯一:生成代码如下

String trade_no = UUID.randomUUID().toString().substring(0, 15);

我这里通过substring方法将其取成16个字符
3.total_fee在这里插入图片描述
这里注意金额单位为分,需要自行转化
4.notify_url
在这里插入图片描述
这个地址配置的是用户支付完成后,微信将会回调的一个地址,你可以配置在自己的项目中,微信回调时会带一系列的参数回来等下有详细说明
5.openid
在这里插入图片描述
因为是在微信公众号里进行的,所以必须要穿用户唯一标识openid
6.sign
在这里插入图片描述
签名可以说是最容易出错的一个参数了,他需要你将前面的所有参数放置在对象中后,对该对象进行重新的前面加密具体代码如下

SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
        parameters.put("appid", ConfigUtil.APPID);
        parameters.put("mch_id", ConfigUtil.MCH_ID);
        parameters.put("nonce_str", WeixinPay.CreateNoncestr());
        parameters.put("body", message);
        String trade_no = UUID.randomUUID().toString().substring(0, 15);
        parameters.put("out_trade_no", trade_no); //订单id
        parameters.put("fee_type", "CNY");
        parameters.put("total_fee", String.valueOf(price100));
        parameters.put("spbill_create_ip", "127.0.0.1");
        parameters.put("notify_url", returnUrl);
        parameters.put("trade_type", "JSAPI");
        String openid = (String)request.getSession().getAttribute("wechat");
        parameters.put("openid", openid);
        String sign = WeixinPay.createSign("UTF-8", parameters)
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值