Java对接微信支付

     String spbill_create_ip = PaymentUtils.getIpAddress(request);if (!PaymentUtils.isIp(spbill_create_ip)) {spbill_create_ip = "127.0.0.1";}String nonce_str = 1 + CommonUtil.getVerificationCode(15);// 微信app支付十个必须要传入的参数Map<String, Object> params = new HashMap<>();// 商户号params.put("mch_id", “mch_id”);// 随机字符串params.put("nonce_str", nonce_str);// 商品描述trade_typeparams.put("body", "App weChat pay!");// 商户订单号params.put("out_trade_no", order.getOrderSn());// 总金额(分)params.put("total_fee", 1);// 终端IPparams.put("spbill_create_ip", spbill_create_ip);// 通知地址params.put("notify_url", appProperties.getWx().getNotify_url());// 交易类型:JS_API=公众号支付、NATIVE=扫码支付、APP=app支付//type为0时APP支付 type为1时小程序支付if (type == 0) {params.put("trade_type", "APP");// 应用IDparams.put("appid", appProperties.getWx().getApp_id());} else {params.put("trade_type", "JSAPI");params.put("openid", userService.getInfo().getOpenid());params.put("appid", appProperties.getWx().getJsapi_app_id());}// 签名String sign = PaymentUtils.sign(params, appProperties.getWx().getApi_key());params.put("sign", sign);String xmlData = PaymentUtils.mapToXml(params);System.out.println("----------------- >>>>   " + xmlData);// 向微信发起预支付String wxRetXmlData = HttpUtil.sendPostXml(appProperties.getWx().getCreate_order_url(), xmlData, null);Map wxRetMapData = PaymentUtils.xmlToMap(wxRetXmlData);Assert.notNull(wxRetMapData, ErrerMsg.ERRER20517.getMessage());log.info("weChat pre pay ResponseObj data: {}", wxRetMapData);// 封装参数返回App端Map<String, Object> responseObj = new HashMap<>();String timestamp = String.valueOf(System.currentTimeMillis() / 1000);//type=0的时候是对接APP支付if (type == 0) {responseObj.put("appid", appProperties.getWx().getApp_id());responseObj.put("package", "Sign=WXPay");responseObj.put("partnerid", appProperties.getWx().getMch_id());responseObj.put("prepayid", wxRetMapData.get("prepay_id").toString());responseObj.put("noncestr", nonce_str);responseObj.put("timestamp", timestamp);} else {//type != 0 对接小程序开发responseObj.put("appId", appProperties.getWx().getJsapi_app_id());responseObj.put("signType", "MD5");responseObj.put("package", "prepay_id=" + wxRetMapData.get("prepay_id").toString());responseObj.put("nonceStr", nonce_str);responseObj.put("timeStamp", timestamp);}// 对返回给App端的数据进行签名responseObj.put("sign", PaymentUtils.sign(responseObj, appProperties.getWx().getApi_key()));

PaymentUtils.sign(Map<String, Object> params, String apiKey)

public static String sign(Map<String, Object> params) {StringBuilder sb = new StringBuilder();Set<Map.Entry<String, Object>> set = new TreeMap<>(params).entrySet();for (Map.Entry<String, Object> entry : set) {String k = entry.getKey();Object v = entry.getValue();sb.append(k).append("=").append(v).append("&");}String s = sb.toString();return Objects.requireNonNull(MD5(s.substring(0, s.length() - 1))).toUpperCase();}

PaymentUtils.xmlToMap(String xmlStr)

public static Map<String, String> xmlToMap(String xmlStr) {try (InputStream inputStream = new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8))) {Map<String, String> data = new HashMap<>();DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();Document doc = documentBuilder.parse(inputStream);doc.getDocumentElement().normalize();NodeList nodeList = doc.getDocumentElement().getChildNodes();for (int idx = 0; idx < nodeList.getLength(); ++idx) {Node node = nodeList.item(idx);if (node.getNodeType() == Node.ELEMENT_NODE) {Element element = (Element) node;data.put(element.getNodeName(), element.getTextContent());}}return data;} catch (Exception ex) {log.warn("xml convert to map failed message: {}", ex.getMessage());return null;}}

PaymentUtils.mapToXml(Map<String, Object> params)

public static String mapToXml(Map<String, Object> params) {StringBuilder sb = new StringBuilder();Set<Map.Entry<String, Object>> es = params.entrySet();Iterator<Map.Entry<String, Object>> it = es.iterator();sb.append("<xml>");while (it.hasNext()) {Map.Entry<String, Object> entry = it.next();String k = entry.getKey();Object v = entry.getValue();sb.append("<").append(k).append(">").append(v).append("</").append(k).append(">");}sb.append("</xml>");return sb.toString();}

HttpUtil.sendPostXml(String url, String xml, Map<String, Object> headers)

    public static String sendPostXml(String url, String xml, Map<String, Object> headers) {String ResponseObj = null;try {HttpPost httpPost = new HttpPost(url);setHeaders(headers, httpPost);StringEntity entity = new StringEntity(xml, StandardCharsets.UTF_8);httpPost.addHeader("Content-Type", "text/xml");httpPost.setEntity(entity);HttpResponse response = httpClient.execute(httpPost);HttpEntity responseData = response.getEntity();ResponseObj = EntityUtils.toString(responseData, StandardCharsets.UTF_8);} catch (IOException e) {e.printStackTrace();}return ResponseObj;}

Java对接微信支付预下单相关推荐

  1. java对接微信支付收不到支付通知问题(亲身实践)

    问题描述: 用java对接微信支付时,统一下单接口正常.但是用户扫码付款成功后,设置用于回调的notify_url对应的接口并没有收到请求(这个url测试过,是正常的且外网能访问的). 由于官方文档没 ...

  2. Java对接微信支付(完整全流程)

    Java对接微信支付及支付回调通知的全流程 一.所用框架.对接微信支付我们技术组用的是payment框架,因为该框架已整合springboot因此很方便快捷 <dependency>< ...

  3. Java对接微信支付实现微信APP支付

    Java对接微信实现微信APP支付 之前对接过第三方的支付方式,也有接入微信jsapi的支付方式,这次项目需求要求对接微信APP支付,找了很多,几乎都没有最新版的微信支付v3的对接相关的详细博客,真的 ...

  4. java对接微信支付:JSAPI支付(微信公众号支付)

    本文是[微信JSAPI支付]文章,主要讲解商户对接微信支付,简洁版测试 文章目录 一.JSAPI支付接入前准备 二.代码片段 1.引入Maven依赖 2.后端业务请求接口 3.前端调起支付请求方法 总 ...

  5. JAVA对接微信支付和支付宝支付(APP端支付)

    本文主要介绍的是JAVA对接支付宝和微信支付,废话少说上代码(部分业务代码就不上了,例如订单等,根据业务需求自行修改): 用到的工具类: maven依赖: <!-- https://mvnrep ...

  6. Java对接微信支付详解

    一.介绍 微信支付对于我们日常来说,并不陌生,也许我们日常都在用.现在我就讲一下微信支付的流程是怎么实现的,都有哪些步骤,以及注意点. 支付流程图: 参数说明如图: 二.开发步骤 1.首先需要开通商户 ...

  7. java支付接口开发原理_java对接微信支付接口开发的过程是什么?

    java对接微信支付接口开发的过程是什么?以下是小编整理的java对接微信支付接口实现的方法和过程,有需要的朋友可以学习以下的java对接微信支付接口内容. java对接微信支付接口开发的过程是什么? ...

  8. Java接入微信支付超级详细教程——从入门到精通

    源码下载 源码获取邮箱:xiaoshu1024@qq.com 本文介绍了"二维码付款"的代码.其他微信支付方式的代码都在源码中. 一.准备开发所需的账号以及配置信息 解释:想要接入 ...

  9. 【Java 实现微信支付、Native 支付流程】,从编写代码到支付成功,一步到位!

    文章目录 1. 项目环境介绍 2. 微信支付文档 2.1 业务流程说明 3. 准备信息 3.1 微信公众账号如何获取? 3.2 商户号如何获取? 3.3 API密钥如何获取? 3.4 准备工具类 4. ...

  10. APP 对接 java 微信支付统一下单接口

    首先插入微信支付的时序图 统一下单时候的请求对象,需要把这个转为xml 文件格式所以需要在pom.xml 文件中导入 .和微信支付的sdk <dependency> <groupId ...

最新文章

  1. JSP第二次作业_3小题
  2. java format 字符_JAVA字符串格式化-String.format()的使用
  3. python 分析两组数据的差异_R语言limma包差异基因分析(两组或两组以上)
  4. Java编程开发中高效编码的7个技巧?你应该知道……
  5. java打包拆包_关于java中JDK5的打包,拆包以及==和equals的问题
  6. 奇幻RPG(角色技能 与 Strategy模式)
  7. 全网最全360无死角编写软件测试用例模板【建议收藏】
  8. java抽象工厂模式_java简单工厂模式和抽象工厂模式
  9. 大学二年级-- “赖”在实验室的发明达人
  10. vue-json-editor实现json编辑器并且可以正常输入中文
  11. 商品进销存管理系统、ERP系统源码
  12. R语言中,如何设置当前工作文件路径?
  13. c语言 圆周率10000位,圆周率(小数点后10000位,背死你)
  14. 数学第一单元计算机思维导图,七年级下册数学第一单元思维导图图片
  15. The requested URL returned error: 403
  16. C#窗体Winform,如何嵌入图片添加图片,使用图片资源?
  17. 【数据库学习笔记】Day03 - SQL语言基础及数据库定义功能
  18. [学习]BES蓝牙芯片开发
  19. 怎么查看笔记本内存条型号_win10怎么查看自己电脑的内存条型号-win7之家·电脑系统下载站...
  20. python下求特征向量与特征值

热门文章

  1. ubuntu无法打开图片
  2. David G. Lowe课题组 Fully Automatic Multi-target Tracking System
  3. 关于Springboot、SpringCloud以及SpringCloud-Alibaba Nacos依赖问题
  4. android 小说下载器 源码 分享
  5. SuperMap 三维产品白皮书
  6. php中round(),PHP round( )用法及代码示例
  7. java程序员生日祝福语_给程序员的一句话祝福语
  8. LBP—局部二值模式
  9. css 小尖角,CSS3之尖角标签
  10. 泡泡龙游戏开发系列教程(三)