SpringBoot整合微信支付V3版本APP支付
话不多说直接上代码。
一、下单
1、支付相关参数配置,根据自己相关参数配置
/** * 商户号 */ private String mchId; /** * 商户证书序列号 */ private String mchSerialNo; /** * apiV3密钥 */ private String apiV3key; /** * APP ID */ private String appId; /** * 回调通知路径 */ private String notifyUrl; /** * 支付url */ private String payUrl; /** * 查询支付Url */ private String queryPayUrl;
2、支付方法(获取支付连接可以封装成工具类)
2、计算签名方法
/** * 计算签名 * @param message * @param yourPrivateKey * @return */ private String sign(byte[] message, PrivateKey yourPrivateKey) { try{ Signature sign = Signature.getInstance("SHA256withRSA"); sign.initSign(yourPrivateKey); sign.update(message); return Base64.getEncoder().encodeToString(sign.sign()); }catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (SignatureException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } return ""; }
3、支付回调通知
4、验证签名
5、解密回调通知密文
/** * 解密回调通知密文 * @param body * @return */ private String decryptOrder(String body){ try { AesUtil aesUtil = new AesUtil(emsWeChatPayConfig.getApiV3key().getBytes("utf-8")); ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode = objectMapper.readTree(body); JsonNode resource = jsonNode.get("resource"); //数据密文 String ciphertext = resource.get("ciphertext").textValue(); String associatedData = resource.get("associated_data").textValue(); String nonce = resource.get("nonce").textValue(); return aesUtil.decryptToString(associatedData.getBytes("utf-8"),nonce.getBytes("utf-8"),ciphertext); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (GeneralSecurityException e) { e.printStackTrace(); } return ""; }
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
微信小程序活动倒计时