Java对接微信支付预下单
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对接微信支付预下单相关推荐
- java对接微信支付收不到支付通知问题(亲身实践)
问题描述: 用java对接微信支付时,统一下单接口正常.但是用户扫码付款成功后,设置用于回调的notify_url对应的接口并没有收到请求(这个url测试过,是正常的且外网能访问的). 由于官方文档没 ...
- Java对接微信支付(完整全流程)
Java对接微信支付及支付回调通知的全流程 一.所用框架.对接微信支付我们技术组用的是payment框架,因为该框架已整合springboot因此很方便快捷 <dependency>< ...
- Java对接微信支付实现微信APP支付
Java对接微信实现微信APP支付 之前对接过第三方的支付方式,也有接入微信jsapi的支付方式,这次项目需求要求对接微信APP支付,找了很多,几乎都没有最新版的微信支付v3的对接相关的详细博客,真的 ...
- java对接微信支付:JSAPI支付(微信公众号支付)
本文是[微信JSAPI支付]文章,主要讲解商户对接微信支付,简洁版测试 文章目录 一.JSAPI支付接入前准备 二.代码片段 1.引入Maven依赖 2.后端业务请求接口 3.前端调起支付请求方法 总 ...
- JAVA对接微信支付和支付宝支付(APP端支付)
本文主要介绍的是JAVA对接支付宝和微信支付,废话少说上代码(部分业务代码就不上了,例如订单等,根据业务需求自行修改): 用到的工具类: maven依赖: <!-- https://mvnrep ...
- Java对接微信支付详解
一.介绍 微信支付对于我们日常来说,并不陌生,也许我们日常都在用.现在我就讲一下微信支付的流程是怎么实现的,都有哪些步骤,以及注意点. 支付流程图: 参数说明如图: 二.开发步骤 1.首先需要开通商户 ...
- java支付接口开发原理_java对接微信支付接口开发的过程是什么?
java对接微信支付接口开发的过程是什么?以下是小编整理的java对接微信支付接口实现的方法和过程,有需要的朋友可以学习以下的java对接微信支付接口内容. java对接微信支付接口开发的过程是什么? ...
- Java接入微信支付超级详细教程——从入门到精通
源码下载 源码获取邮箱:xiaoshu1024@qq.com 本文介绍了"二维码付款"的代码.其他微信支付方式的代码都在源码中. 一.准备开发所需的账号以及配置信息 解释:想要接入 ...
- 【Java 实现微信支付、Native 支付流程】,从编写代码到支付成功,一步到位!
文章目录 1. 项目环境介绍 2. 微信支付文档 2.1 业务流程说明 3. 准备信息 3.1 微信公众账号如何获取? 3.2 商户号如何获取? 3.3 API密钥如何获取? 3.4 准备工具类 4. ...
- APP 对接 java 微信支付统一下单接口
首先插入微信支付的时序图 统一下单时候的请求对象,需要把这个转为xml 文件格式所以需要在pom.xml 文件中导入 .和微信支付的sdk <dependency> <groupId ...
最新文章
- JSP第二次作业_3小题
- java format 字符_JAVA字符串格式化-String.format()的使用
- python 分析两组数据的差异_R语言limma包差异基因分析(两组或两组以上)
- Java编程开发中高效编码的7个技巧?你应该知道……
- java打包拆包_关于java中JDK5的打包,拆包以及==和equals的问题
- 奇幻RPG(角色技能 与 Strategy模式)
- 全网最全360无死角编写软件测试用例模板【建议收藏】
- java抽象工厂模式_java简单工厂模式和抽象工厂模式
- 大学二年级-- “赖”在实验室的发明达人
- vue-json-editor实现json编辑器并且可以正常输入中文
- 商品进销存管理系统、ERP系统源码
- R语言中,如何设置当前工作文件路径?
- c语言 圆周率10000位,圆周率(小数点后10000位,背死你)
- 数学第一单元计算机思维导图,七年级下册数学第一单元思维导图图片
- The requested URL returned error: 403
- C#窗体Winform,如何嵌入图片添加图片,使用图片资源?
- 【数据库学习笔记】Day03 - SQL语言基础及数据库定义功能
- [学习]BES蓝牙芯片开发
- 怎么查看笔记本内存条型号_win10怎么查看自己电脑的内存条型号-win7之家·电脑系统下载站...
- python下求特征向量与特征值
热门文章
- ubuntu无法打开图片
- David G. Lowe课题组 Fully Automatic Multi-target Tracking System
- 关于Springboot、SpringCloud以及SpringCloud-Alibaba Nacos依赖问题
- android 小说下载器 源码 分享
- SuperMap 三维产品白皮书
- php中round(),PHP round( )用法及代码示例
- java程序员生日祝福语_给程序员的一句话祝福语
- LBP—局部二值模式
- css 小尖角,CSS3之尖角标签
- 泡泡龙游戏开发系列教程(三)