java微信小程序支付V2版本(亲测有效)
首先微信支付需要以下的字段,关于如何去获取微信支付的字段,网上一大把,注意(像商户号等重要字段不要泄露不要泄露)
MCHID(商户号) 就是商户注册之后,微信支付给你的唯一的数字
APPID(小程序的appid)
SSLFILE(微信支付需要申请证书,这个字段就是把申请的证书下载之后,存放在你服务器的某个文件夹的路径)
NOTIFYURL(支付成功之后,微信会给你这个url发送一条支付成功的消息)
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版本(亲测有效)相关推荐
- 微信小程序支付V3版本接口实现
一.说明和前期准备(小程序的V3版本) 特别说明:遇到 java.security.InvalidKeyException: Illegal key size ******* getValidator ...
- Java微信小程序支付篇
在做完一个仿美团的应用,我将其中涉及到的一些技术点进行总结和整理,当下次遇到类似的问题就能省下不少时间,避免踩坑. 一.微信小程序支付的使用 微信支付有官方提供的SDK,但要自己处理的东西比较多.我使 ...
- java微信小程序支付-回调(Jsapi-APIv3)
一.接入前准备,按照这个文档准备 准备: 接入前准备-小程序支付 | 微信支付商户平台文档中心 准备好了就可以获得(第二点里需要的参数): 参数1 商户号 merchantId:xxx ...
- charles抓不到微信小程序的包【亲测解决】
原创加粗:原创链接直达>https://mbd.baidu.com/ma/s/VwHQ8Rom 出现的问题: charles抓小程序的包一直抓不到,显示空白. ps:并不是[unknow],这个 ...
- java微信小程序支付退款_微信小程序-微信自动退款(Java后台)
packagecom.bodi.repository;importjava.security.MessageDigest;public classMD5Util {/*** 十六进制下数字到字符的映射 ...
- 微信小程序支付java服务端集成采坑总结
先上个微信小程序支付官方文档地址: https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8 重点看 ...
- 微信小程序支付-付款(Java后台)
微信小程序支付-付款(Java后台) 一.概述 接触微信小程序支付有一段时间,趁着项目上线空闲期,来总结一下付款.退款.提现到银行卡.查询流水等步骤过程,涉及到的知识,以及编程过程中需要注意的问题. ...
- java微信小程序调用支付接口
简介:微信小程序支付这里的坑还是有的,所以提醒各位在编写的一定要注意!!! 1.首先呢,你需要准备openid,appid,还有申请微信支付后要设置一个32位的密钥,需要先生成一个sign,得到pre ...
- 微信小程序支付流程(Java后端)
微信小程序支付(Java后端) 一.小程序支付的交互图如下 按住ctrl点击 微信支付平台开发文档 二.准备工作 第一步:在pom文件中导入微信支付SDK 有可能自动下载不了,可以到微信支付平台下载手 ...
最新文章
- 他们隔空协作,打造出懂医学、知开源的智能机器人
- LeetCode 1122 数组的相对排序-简单-unordered_map容器的应用
- 中间介(MiddleWare)
- 足不出户,确保交付——独家交付秘籍(第二回)
- OpenCV-美食—鲜美滤镜
- c语言累积乘,C语言编程累积2
- 计算机网络安全知识汇总
- nnie yolov3 svp
- 密码中明文、密文、密钥关系的简单介绍
- 999C - Alphabetic Removals
- ✨❤️CSDN标题党❤️,创意无极限,那不直接全网站都花的飞起?
- 网站服务器过载,服务器过载保护
- 【GPT4】GPT4 官方报告解读
- 算法设计与分析:分治思想 - 入门
- 物联网实战之基于OneNET的智能农业系统
- macbook新建html文件,New File Creation: 给 Mac 加上“新建文件菜单”
- Android 无标题 全屏设置
- 使用离线语音识别实现对设备经纬度参数的设置
- 面试必问——jvm原理及优化(包括GC)
- mysql设置字符集命令_mysql命令设置字符集