1. 首先微信支付需要以下的字段,关于如何去获取微信支付的字段,网上一大把,注意(像商户号等重要字段不要泄露不要泄露)

  1. MCHID(商户号) 就是商户注册之后,微信支付给你的唯一的数字

  1. APPID(小程序的appid)

  1. SSLFILE(微信支付需要申请证书,这个字段就是把申请的证书下载之后,存放在你服务器的某个文件夹的路径)

  1. NOTIFYURL(支付成功之后,微信会给你这个url发送一条支付成功的消息)

  1. APIKEY(证书的秘钥)

需要微信支付的jar包

     <dependency><groupId>com.github.wxpay</groupId><artifactId>wxpay-sdk</artifactId><version>0.0.3</version></dependency><dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-pay</artifactId><version>3.8.0</version></dependency><dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-apache-httpclient</artifactId><version>0.4.7</version></dependency>

2.开始微信支付的demo,首先看微信支付调用支付需要那些必传字段(注意顺序),可以通过这个地址查看https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1

3.关于签名加密的方法(后续也会使用到)

public class MD5Util {private static final String hexDigits[] = { "0", "1", "2", "3", "4", "5","6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };public static String byteArrayToHexString(byte b[]) {StringBuffer resultSb = new StringBuffer();for (int i = 0; i < b.length; i++)resultSb.append(byteToHexString(b[i]));return resultSb.toString();}private static String byteToHexString(byte b) {int n = b;if (n < 0)n += 256;int d1 = n / 16;int d2 = n % 16;return hexDigits[d1] + hexDigits[d2];}public static String MD5Encode(String origin ) {return MD5Encode(origin,null);}public static String MD5Encode(String origin, String charsetname) {String resultString = null;try {resultString = new String(origin);MessageDigest md = MessageDigest.getInstance("MD5");if (charsetname == null || "".equals(charsetname))resultString = byteArrayToHexString(md.digest(resultString.getBytes()));elseresultString = byteArrayToHexString(md.digest(resultString.getBytes(charsetname)));} catch (Exception exception) {}return resultString;}}

4.将集合的数据进行xml处理

public static String getRequest(TreeMap<String, String> parameters)throws Exception {  //StringBuffer sb = new StringBuffer();sb.append("<xml>");Set es = parameters.entrySet();Iterator it = es.iterator();while (it.hasNext()) {Map.Entry entry = (Map.Entry) it.next();String k = (String) entry.getKey();String v = (String) entry.getValue();if ("mch_id".equalsIgnoreCase(k) || "nonce_str".equalsIgnoreCase(k)|| "sign".equalsIgnoreCase(k)) {sb.append("<" + k + ">" + "<![CDATA[" + v + "]]></" + k + ">");} else {sb.append("<" + k + ">" + v + "</" + k + ">");}}sb.append("</xml>");return sb.toString();}

5.将加密的数据通过url发送给微信支付,成功之后微信支付会将需要的数据返回给你,这里的url是:

6.将微信支付返回的xml数据解析成集合,然后通过集合的key获取到值组装发给前端,大致流程就是这样的了。

  //xml解析public static TreeMap doXMLParse(String strxml) throws JDOMException, IOException {strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\"");if(null == strxml || "".equals(strxml)) {return null;}TreeMap m = new TreeMap();InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));SAXBuilder builder = new SAXBuilder();Document doc = builder.build(in);Element root = doc.getRootElement();List list = root.getChildren();Iterator it = list.iterator();while(it.hasNext()) {Element e = (Element) it.next();String k = e.getName();String v = "";List children = e.getChildren();if(children.isEmpty()) {v = e.getTextNormalize();} else {v = getChildrenText(children);}m.put(k, v);}//关闭流in.close();return m;}public static String getChildrenText(List children) {StringBuffer sb = new StringBuffer();if(!children.isEmpty()) {Iterator it = children.iterator();while(it.hasNext()) {Element e = (Element) it.next();String name = e.getName();String value = e.getTextNormalize();List list = e.getChildren();sb.append("<" + name + ">");if(!list.isEmpty()) {sb.append(getChildrenText(list));}sb.append(value);sb.append("</" + name + ">");}}return sb.toString();}

7.后续将字段返回给前端之后,前端进行调用,微信支付成功之后,会将支付回调返回给你controller里面的方法,支付成功之后里面进行业务逻辑处理.

总结:关于V2版本的微信支付的难点主要是在于对xml进行解析,以及对证书的验证处理的方法,后续会出支付宝支付的流程,请大家关注我,不会让大家失望的。

java微信小程序支付V2版本(亲测有效)相关推荐

  1. 微信小程序支付V3版本接口实现

    一.说明和前期准备(小程序的V3版本) 特别说明:遇到 java.security.InvalidKeyException: Illegal key size ******* getValidator ...

  2. Java微信小程序支付篇

    在做完一个仿美团的应用,我将其中涉及到的一些技术点进行总结和整理,当下次遇到类似的问题就能省下不少时间,避免踩坑. 一.微信小程序支付的使用 微信支付有官方提供的SDK,但要自己处理的东西比较多.我使 ...

  3. java微信小程序支付-回调(Jsapi-APIv3)

    一.接入前准备,按照这个文档准备 准备: 接入前准备-小程序支付 | 微信支付商户平台文档中心 准备好了就可以获得(第二点里需要的参数):         参数1 商户号 merchantId:xxx ...

  4. charles抓不到微信小程序的包【亲测解决】

    原创加粗:原创链接直达>https://mbd.baidu.com/ma/s/VwHQ8Rom 出现的问题: charles抓小程序的包一直抓不到,显示空白. ps:并不是[unknow],这个 ...

  5. java微信小程序支付退款_微信小程序-微信自动退款(Java后台)

    packagecom.bodi.repository;importjava.security.MessageDigest;public classMD5Util {/*** 十六进制下数字到字符的映射 ...

  6. 微信小程序支付java服务端集成采坑总结

    先上个微信小程序支付官方文档地址: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8 重点看 ...

  7. 微信小程序支付-付款(Java后台)

    微信小程序支付-付款(Java后台) 一.概述 接触微信小程序支付有一段时间,趁着项目上线空闲期,来总结一下付款.退款.提现到银行卡.查询流水等步骤过程,涉及到的知识,以及编程过程中需要注意的问题. ...

  8. java微信小程序调用支付接口

    简介:微信小程序支付这里的坑还是有的,所以提醒各位在编写的一定要注意!!! 1.首先呢,你需要准备openid,appid,还有申请微信支付后要设置一个32位的密钥,需要先生成一个sign,得到pre ...

  9. 微信小程序支付流程(Java后端)

    微信小程序支付(Java后端) 一.小程序支付的交互图如下 按住ctrl点击 微信支付平台开发文档 二.准备工作 第一步:在pom文件中导入微信支付SDK 有可能自动下载不了,可以到微信支付平台下载手 ...

最新文章

  1. 他们隔空协作,打造出懂医学、知开源的智能机器人
  2. LeetCode 1122 数组的相对排序-简单-unordered_map容器的应用
  3. 中间介(MiddleWare)
  4. 足不出户,确保交付——独家交付秘籍(第二回)
  5. OpenCV-美食—鲜美滤镜
  6. c语言累积乘,C语言编程累积2
  7. 计算机网络安全知识汇总
  8. nnie yolov3 svp
  9. 密码中明文、密文、密钥关系的简单介绍
  10. 999C - Alphabetic Removals
  11. ✨❤️CSDN标题党❤️,创意无极限,那不直接全网站都花的飞起?
  12. 网站服务器过载,服务器过载保护
  13. 【GPT4】GPT4 官方报告解读
  14. 算法设计与分析:分治思想 - 入门
  15. 物联网实战之基于OneNET的智能农业系统
  16. macbook新建html文件,New File Creation: 给 Mac 加上“新建文件菜单”
  17. Android 无标题 全屏设置
  18. 使用离线语音识别实现对设备经纬度参数的设置
  19. 面试必问——jvm原理及优化(包括GC)
  20. mysql设置字符集命令_mysql命令设置字符集

热门文章

  1. 优秀程序员值得借鉴的一些信息
  2. 四向穿梭车的技术与应用
  3. 禁用Mac SIP – System Integrity Protection
  4. MySQL导出csv文件,数字过长出现科学计数法的问题
  5. 自动控制原理绪论以及一般概念
  6. python实现在一个画布绘制多张双y轴折线图,y轴数据大小不一样,怎么hua?
  7. Hi,给他介绍一款markdown的帮助文档生成器
  8. 互联网家装遭遇寒冬,齐家网、土巴兔们能否安稳度过期终考?
  9. hofstede六个维度指数指标_这个指数这么火!到底应该买哪只场外基金参与?
  10. Qt 按键触发事件的两种方式