微信支付app步骤 java java微信支付接口开发流程

您所在的位置:网站首页 java微信支付接口开发流程图 微信支付app步骤 java java微信支付接口开发流程

微信支付app步骤 java java微信支付接口开发流程

2024-07-02 01:39| 来源: 网络整理| 查看: 265

微信支付app步骤 java java微信支付接口开发流程 转载

gjnet 2023-08-29 22:54:15

文章标签 微信支付app步骤 java 小程序 java 微信支付 微信 文章分类 Java 后端开发

一、介绍

微信支付对于我们日常来说,并不陌生,也许我们日常都在用。现在我就讲一下微信支付的流程是怎么实现的,都有哪些步骤,以及注意点。

支付流程图:

微信支付app步骤 java java微信支付接口开发流程_小程序

参数说明如图:

微信支付app步骤 java java微信支付接口开发流程_java_02

二、开发步骤

1、首先需要开通商户号,获取商户mch_id、mch_secret(密钥)

2、开通小程序或公众号,获取小程序或公众号appid、secret(密钥)

3、除了前面2步的准备环境,也就进入主流程步骤,分为3步如下:

3-1:封装有必要的微信支付参数并拉取微信支付API

3-2:对封装的参数进行提取并开始支付阶段,需要二次签名加密

3-3:当3-2步骤支付成功时,会调用回调函数,进行二次签名校验

注意:第一次签名必须保证与二次签名保持一致,否则会导致微信支付失败。【前面2步不讲】一、封装并校验微信支付相关参数【相关工具类后面附上】/** * 微信支付 * * @param orderPayVo * @return */ @Override public ResponseEntity payment(MiniOrderPayVo orderPayVo) { if (orderPayVo == null) { return HttpResponseSupport.error(HttpStatus.NOT_FOUND, "订单支付数据不能为空,请检查参数再试", "订单支付数据不能为空,请检查参数再试"); } String orderNo = orderPayVo.getOrderNo(); if (StringUtil.isEmpty(orderNo)) { return HttpResponseSupport.miniSuccess(MiniBusinessCodeEnum.USER_ORDER_NO, null); } Double money = orderPayVo.getMoney(); String uuid = orderPayVo.getUuid(); if (StringUtils.isBlank(uuid)){ log.info("预支付订单uuid为:"+uuid); return HttpResponseSupport.error(HttpStatus.NOT_FOUND,"订单uuid不能为空","订单uuid不能为空"); } if (money 0) { log.info("更新订单状态成功!!!"); } //通知微信服务器已经支付成功 resXml = "" + "" + "" + " "; } } else { log.info("微信支付回调失败!签名不一致"); } } else { resXml = "" + "" + "" + " "; } } catch (Exception e) { e.printStackTrace(); } logs.setUuid(RandomNumberGenerate.generateNonceStr()); logs.setResult(resXml); //添加回调日志信息 paymentMapper.addWxCallBackLogs(logs); try { log.info(resXml); log.info("微信支付回调数据结束"); BufferedOutputStream out = new BufferedOutputStream( response.getOutputStream()); out.write(resXml.getBytes()); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } }四、微信支付相关工具类/** * 处理微信金额 * // public static final BigDecimal WXTOTALFEE = new BigDecimal("1"); * @param amountPrice * @return */ @Override public String getTotalFee(BigDecimal amountPrice) { String totalFee = amountPrice.intValue() + ""; //当支付金额小于等于1时,只需付0.01 BigDecimal totalFeeTemp = new BigDecimal(totalFee); if (WXConstant.WXTOTALFEE.compareTo(totalFeeTemp) > -1) { totalFee = "1"; } return totalFee; } public static Map unifiedOrder(CommonWXPayConfig customsWXPayConfig, Map data) { WXPay wxPay = new WXPay(customsWXPayConfig, WXPayConstants.SignType.MD5); if (data.size() < 1) { return null; } try { Map resp = wxPay.unifiedOrder(data); String returnCode = resp.get(WXConstant.WX_PAY_RERUEN_CODE);// return_code String resultCode = resp.get(WXConstant.WX_PAY_RESULT_CODE);// result_code if (StringUtils.equals(WXConstant.WX_PAY_SUCCESS, resultCode) && StringUtils.equals(WXConstant.WX_PAY_SUCCESS, returnCode)) { // SUCCESS log.info("微信拉起支付结果:{}", resp); return resp; } else { log.error("微信拉起支付失败结果:{}", resp); return null; } } catch (Exception e) { log.error("微信支付异常结果:{}", e.getMessage()); return null; } }PayUtil:public class PayUtil { /** * 签名字符串 * * @param text 需要签名的字符串 * @param key 密钥 * @param input_charset 编码格式 * @return 签名结果 */ public static String sign(String text, String key, String input_charset) { text = text + "&key=" + key; return DigestUtils.md5Hex(getContentBytes(text, input_charset)); } /** * 签名字符串 * * @param text 需要签名的字符串 * @param sign 签名结果 * @param key 密钥 * @param input_charset 编码格式 * @return 签名结果 */ public static boolean verify(String text, String sign, String key, String input_charset) { text = text +"&key=" + key; String mysign = DigestUtils.md5Hex(getContentBytes(text, input_charset)).toUpperCase(); if (mysign.equals(sign)) { return true; } else { return false; } } /** * @param content * @param charset * @return * @throws java.security.SignatureException * @throws UnsupportedEncodingException */ public static byte[] getContentBytes(String content, String charset) { if (charset == null || "".equals(charset)) { return content.getBytes(); } try { return content.getBytes(charset); } catch (UnsupportedEncodingException e) { throw new RuntimeException("MD5签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset); } } private static boolean isValidChar(char ch) { if ((ch >= '0' && ch = 'A' && ch = 'a' && ch = 0x4e00 && ch = 0x8000 && ch


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3