微信支付功能(尽量简化,尽量少用工具包)


    @Value("${spring.weChat.mchAppid}")
    private String mchAppid;

    @Value("${spring.weChat.mchid}")
    private String mchid;

    @Value("${spring.weChat.key}")
    private String key;

    @Autowired
    private HttpServletRequest req;

@Override
    public Map<String, String> wechatPay(String amount, String openid, String name) {
        Map<String, String> transferMap = new HashMap<>();
        Map<String, String> restmap = null;
        try {
            KeyStore keyStore = KeyStore.getInstance("PKCS12");
            //读取本机存放的PKCS12证书文件
            ClassPathResource cl = new ClassPathResource("apiclient_cert.p12");
            keyStore.load(cl.getInputStream(), mchid.toCharArray());
            SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, mchid.toCharArray()).build();
            //指定TLS版本
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                    sslcontext, new String[]{"TLSv1"}, null,
                    SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
            //设置httpclient的SSLSocketFactory
            CloseableHttpClient httpclient = HttpClients.custom()
                    .setSSLSocketFactory(sslsf)
                    .build();
            //1.数据
            Map<String, String> parm = new HashMap<>();
            parm.put("mch_appid", mchAppid); // 公众账号appid
            parm.put("mchid", mchid); // 商户号
            parm.put("nonce_str", WXPayUtil.generateNonceStr()); // 随机字符串
            parm.put("partner_trade_no", new SimpleDateFormat("yyyyMMddhhmmss").format(new Date()) + RandomStringUtils.randomNumeric(3)); // 生成商户订单号
            parm.put("openid", openid); // 用户openid
            parm.put("check_name", "NO_CHECK"); // 是否验证真实姓名--校验用户姓名选项 OPTION_CHECK
            parm.put("re_user_name", ""); //收款用户姓名---check_name设置为FORCE_CHECK或OPTION_CHECK,则必填
            parm.put("amount", amount); // 转账金额
            parm.put("desc", "企业名称" + name); // 企业付款描述信息
            parm.put("spbill_create_ip", IpUtils.getIpAddr(req)); // Ip地址
            parm.put("sign", WXPayUtil.generateSignature(parm, key));
            String str = WXPayUtil.mapToXml(parm);
            //2.发送请求
            HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers");
            httpPost.setEntity(new StringEntity(str, Consts.UTF_8));
            logger.info(str);
            CloseableHttpResponse execute = httpclient.execute(httpPost);
            //3.获取结果
            String xmltring = EntityUtils.toString(execute.getEntity(), Consts.UTF_8);
            logger.info(xmltring);
            restmap = WXPayUtil.xmlToMap(xmltring);
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage(), e);
        } finally {
            if (CollectionUtil.isNotEmpty(restmap) && "SUCCESS".equals(restmap.get("result_code"))) {
                transferMap.put("partner_trade_no", restmap.get("partner_trade_no"));// 商户转账订单号
                transferMap.put("payment_no", restmap.get("payment_no")); // 微信订单号
                transferMap.put("payment_time", restmap.get("payment_time")); // 微信支付成功时间
                transferMap.put("code", "200");
                transferMap.put("msg", "提现成功!");
            } else {
                if (CollectionUtil.isNotEmpty(restmap)) {
                    transferMap.put("partner_trade_no", restmap.get("partner_trade_no"));// 商户转账订单号
                    transferMap.put("payment_no", restmap.get("payment_no")); // 微信订单号
                    Date date = new Date();
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                    String format = sdf.format(date);
                    transferMap.put("payment_time", format); // 微信支付成功时间
                    transferMap.put("code", "500");
                    transferMap.put("msg", restmap.get("err_code_des"));
                }
            }
        }
        return transferMap;
    }

WXPayUtil的maven坐标是

   <!--微信支付工具包-->
        <dependency>
            <groupId>com.github.wxpay</groupId>
            <artifactId>wxpay-sdk</artifactId>
            <version>0.0.3</version>
        </dependency>

在这里插入图片描述
这个文件也不能忘了,放在resource下或者其他文件夹里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值