项目做完了,来总结下,先是微信企业到个人账户
建议先过一遍官方文档,虽然我看一遍没看懂。相对于微信支付,企业这个就简单多了
先直接上代码 下面这个是工具类

package com.Util;import com.wx.pay.WXPayUtil;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import javax.net.ssl.SSLContext;
import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.UUID;@Service
public class WxGetMoneyUtil {//微信提现需要去微信支付官网弄企业证书 下面是企业证书的路径//证书生成后会有一个.p12的文件比较重要@Value("${certPath}")String certPath;public String wxSendWallet (String openid,int num){String res=null;//创建一个唯一订单号SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String time = sdf.format(new Date());String orderId = time + (int) (Math.random() * 1000000);//这个ip地址其实无关紧要,我试了下就算填127.0.0.1 都是可以的,应该是微信支付那里要记录String spbill_create_ip = "127.0.0.1";//生成xml格式的文件,主要是发送给微信支付那方的,包括用户openid,这个东西你能做企业支付了应该都懂了,num是钱,支付以分为单位,最小1元,最大多少忘了,这里以元为单位,下面的方法,我帮你*了100String xml = wxSendWallet(openid,num,spbill_create_ip );//你可以打印看看xml是啥System.out.println(xml);try {//指定读取证书格式为PKCS12KeyStore keyStore = KeyStore.getInstance("PKCS12");//windows系统FileInputStream instream = new FileInputStream(new File(certPath));System.out.println(instream);//linux系统,读取本机存放的PKCS12证书文件
//            InputStream instream = Thread.currentThread().getContextClassLoader().getResourceAsStream("cert/apiclient_cert.p12");try {//指定PKCS12的密码(商户ID) 为了帮大家不填错东西(因为我填错了,坑了好久),我用1来填充位数,这样大家对一下位数,不太容易错,我不保证所有人位数都是一样的。keyStore.load(instream, "1111111111".toCharArray());} catch (Exception e){System.out.println(e);}finally {instream.close();}// 这个和上面那个应该是一样的SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, "1111111111".toCharArray()).build();//指定TLS版本, Allow TLSv1 protocol onlySSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[]{"TLSv1"}, null, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);//设置httpclient的SSLSocketFactoryCloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();HttpPost httppost = new HttpPost("https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers");//这里要设置编码,不然xml中有中文的话会提示签名失败或者展示乱码httppost.addHeader("Content-Type", "text/xml");StringEntity se = new StringEntity(xml, "UTF-8");httppost.setEntity(se);CloseableHttpResponse responseEntry = httpclient.execute(httppost);System.out.println(responseEntry+"-------");try {HttpEntity entity = responseEntry.getEntity();if (entity != null) {System.out.println("响应内容长度 : " + entity.getContentLength());System.out.println("响应 : " + entity);SAXReader saxReader = new SAXReader();Document document = saxReader.read(entity.getContent());Element rootElt = document.getRootElement();String resultCode = rootElt.elementText("result_code");if (resultCode.equals("SUCCESS")) {res=resultCode;System.out.println("响应内容 : " + resultCode);//保存数据业务逻辑} else {res=rootElt.elementText("err_code_des");System.out.println(rootElt.elementText("err_code_des"));}}EntityUtils.consume(entity);} catch (Exception e) {System.out.println("请求失败");} finally {responseEntry.close();}} catch (Exception e) {System.out.println("请求失败");}return res;}public static String wxSendWallet( String openid,int num,String spbill_create_ip) {String data = null;try {//这个WXPayUtil是微信开发平台提供的一个sdk包,百度一下都搜的到,开发微信小程序支付等必备String nonceStr = WXPayUtil.generateNonceStr();//SortedMap接口主要提供有序的Map实现,默认的排序是根据key值进行升序排序SortedMap<String,String> parameters = new TreeMap<String,String>();//下面两个是mch_appid 和 mch_id parameters.put("mch_appid","111111111111111111" );parameters.put("mchid", "1111111111");parameters.put("nonce_str", nonceStr);String outTradeNo = UUID.randomUUID().toString().replaceAll("-", "");parameters.put("partner_trade_no", outTradeNo);parameters.put("openid", openid);parameters.put("check_name", "NO_CHECK");//因为传进来的是元,要转化成分,而且要成字符串parameters.put("amount", num*100+"");parameters.put("spbill_create_ip",  spbill_create_ip);parameters.put("desc", "提现");//签名 这个也是那个sdk包里的parameters.put("sign", WXPayUtil.generateSignature(parameters, "niumapai190318935159niumapai1688"));//签名 这个也是那个sdk包里的data = WXPayUtil.mapToXml(parameters);} catch (Exception e) {e.printStackTrace();}return data;}}

放一个Controller,仅供参考

@RequestMapping(value ="wxSendWallet",produces = "text/html;charset=utf-8")public String wxSendWallet (Integer id,Integer adminId,Integer indexUserId,Integer num){//这里是根据每个人不同的方法获取到openid,我是存在数据库里的,所以我把这部分保留了IndexUser indexUser=indexUserRepository.findById(indexUserId).get();String openid=indexUser.getOpenid();//记得@Autowired不然找不到包哦String res=wxGetMoneyUtil.wxSendWallet(openid,num);if(res==null){return "提现失败";}if(res.equals("SUCCESS")){//能到这里说明,已经体现成功了,接下来就是每个人的逻辑模块}return res;}}

然后就成了


温馨提示:在工具类中,我把所有的错误报告全部打印出来了,大家可以根据错误报告来查看哪里配置有问题,且我自己测试过,企业支付到个人账户可以在本地测试,不需要部署到服务器配置https,祝各位成功。
参考的东西太多,我也忘记看了谁的代码了,如果侵权了,来踹我。

微信企业向个人账户提现相关推荐

  1. java实现微信企业付款到个人账户

    微信官方提供了微信企业账户付款到微信个人零钱接口,提供企业向用户付款的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款.该接口并不是直接所有的商户都拥有,企业要开启必须满足以下 ...

  2. 微信企业付款到零钱(微信提现)

    由于项目中要用到微信提现,参考网上代码和官方文档写了提现的工具类 用到的相关类库 dom4j commons-lang3 httpclient-4.4.1 具体相关流程可以看微信企业付款到零钱的开发文 ...

  3. java 企业付款_java实现微信企业付款到个人功能

    微信官方提供了微信企业账户付款到微信个人零钱接口,提供企业向用户付款的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款.该接口并不是直接所有的商户都拥有,企业要开启必须满足以下 ...

  4. SpringBoot从入门到精通教程(二十九)- 微信企业支付集成(五分钟集成)

    需求背景 SpringBoot用法:微信企业支付集成(五分钟集成) 问题痛点 通过SpringBoot框架,集成服务端微信企业支付接口,做到下载即用(填写好相关微信支付后台相关Key信息),最快五分钟 ...

  5. 微信零钱数据在服务器,关于微信企业付款到零钱X509Certificate2读取证书信息,发布到服务器访问不到的解决方案...

    前言: 最近做了一个通过调用微信企业付款到用户零钱的功能,真的挺奇怪的,在我本地调试的时候都没有问题,但是当我发布到服务上的时候却一直无法读取到我的证书信息.读取的代码如下,使用的是微信官方文档提供的 ...

  6. Java 微信企业付款到个人钱包

    Java 微信企业付款到个人钱包 希望可以帮助到你 文章目录 **Java 微信企业付款到个人钱包** 前言 一.需要准备的配置 二.开发 总结 前言 微信企业付款到个人钱包,此功能模块需要提前在微信 ...

  7. JAVA微信企业付款到零钱(十分钟搞定),附完整DEMO下载

    最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信提现功能开发的流程, 主要就是按规则封装好请求参数调用微信接口,涉及一些签名校验: A.接口流程 获取用户OPENI ...

  8. SpringBoot实现微信企业付款到个人钱包,详细流程

    一.前言 微信企业付款到个人钱包,此功能模块需要提前在微信商户平台开通.因为开通需要先决条件,并不是所有商户都满足.商户需满足三个条件,可以在商户平台的产品中心,找到入口,申请开通. 1)入驻满90天 ...

  9. PHP实现微信企业付款

    一.封装微信企业付款类WeiXinPayToUser,如下图代码所示: class WeixinPayToUser {/*** API 参数* @var array* 'mch_appid' # 公众 ...

最新文章

  1. 如何在HTML页面中插入百度地图
  2. 噩耗...............
  3. ML之NB:(NLP)基于sklearn库利用不同语种数据集训练NB(朴素贝叶斯)算法,对新语种进行语种检测
  4. C# LINQ系列:LINQ to DataSet的DataTable操作 及 DataTable与Linq相互转换
  5. docker-Consul的概述及consul集群环境的搭建
  6. h命令可以获取mysql客户端的帮助信息_如何获取MySQL帮助信息
  7. Apollo CANbus 模块原理及源码学习
  8. echarts 叠加柱状图柱顶显示百分比
  9. vue jsonp跨域
  10. Webcontent 和WebRoot的区别
  11. 解决uniapp调试过程中的请求跨域和环境配置
  12. gateway-使用
  13. 「Luogu4233」射命丸文的笔记-生成函数+多项式求逆
  14. 基于Bootstrap的后台管理系统模板。AceAdmin停更前最后的两个版本
  15. 探究工业机器人、自动化、PLC这三者到底是什么关系?
  16. 神经网络基础知识第一章
  17. 五子棋1.0(Java单机版)
  18. 超级文本编辑器Sublime Text3
  19. 小C语言–词法分析程序
  20. python语言排行_2019年6月编程语言排行榜:Python 排名飙升,三年内有望超越Java...

热门文章

  1. 360图书馆 JMX
  2. UiPath中国市场rpa占有率
  3. Flutter自定义IOS的Plugin
  4. 美学心得(第二百三十五集) 罗国正
  5. 基于手机APP的PLC远程监控系统
  6. 山西工商学院计算机信息工程学院,【第二课堂】山西工商学院“迎新赛”篮球赛会计学院VS计算机信息工程学院...
  7. Matlab谐波搭建
  8. java毕业设计拾忆鲜花销售系统mybatis+源码+调试部署+系统+数据库+lw
  9. DC-DC(直流-直流)变换器
  10. matlab无功仿真,第八章MATLAB在无功补偿的仿真 实例.ppt