1.添加依赖

<dependency><groupId>com.github.wxpay</groupId><artifactId>WXPay-SDK-Java</artifactId><version>0.0.4</version>
</dependency>

2.配置参数

3.实现方法

@ApiOperation(value = "企业转账到零钱", httpMethod = "POST", produces = "application/json;charset=UTF-8")@ApiImplicitParams(value = {@ApiImplicitParam(value = "*用户token", name = "token",defaultValue ="", dataType = "String",paramType="header"),@ApiImplicitParam(value = "金额", name = "money",defaultValue ="", dataType = "String",paramType="query")})@PostMapping("/wxpay/transfer")public Result transfer(HttpServletRequest request,BigDecimal money,String openID) {// 1.0 拼凑企业支付需要的参数String appid = APPID; // APP对应的微信的appidString mch_id = MCHID; // 商户号String nonce_str = WXPayUtil.generateNonceStr(); // 生成随机数String partner_trade_no = WXPayUtil.generateNonceStr(); // 生成商户订单号String openid = openID; // 收款用户openidString check_name = "NO_CHECK"; // 是否验证真实姓名呢String re_user_name = "KOLO"; // 收款用户姓名(非必须)String amount = String.valueOf(money); // 企业付款金额,最少为100,单位为分String desc = "恭喜你,完成了一个订单!"; // 企业付款操作说明信息。必填。String spbill_create_ip = IpKit.getIpAddr(request); // 用户的ip地址// 2.0 生成map集合SortedMap<String, String> packageParams = new TreeMap<String, String>();packageParams.put("mch_appid", appid); // 微信公众号的appidpackageParams.put("mchid", mch_id); // 商务号packageParams.put("nonce_str", nonce_str); // 随机生成后数字,保证安全性packageParams.put("partner_trade_no", partner_trade_no); // 生成商户订单号packageParams.put("openid", openid); // 支付给用户openidpackageParams.put("check_name", check_name); // 是否验证真实姓名呢packageParams.put("re_user_name", re_user_name);// 收款用户姓名packageParams.put("amount", amount); // 企业付款金额,单位为分packageParams.put("desc", desc); // 企业付款操作说明信息。必填。packageParams.put("spbill_create_ip", spbill_create_ip); // 调用接口的机器Ip地址try {// 3.0 利用上面的参数,先去生成自己的签名String sign = WXPayUtil.generateSignature(packageParams, PATERNERKEY);// 4.0 将签名再放回map中,它也是一个参数packageParams.put("sign", sign);// 5.0将当前的map结合转化成xml格式String xml = WXPayUtil.mapToXml(packageParams);// 6.0获取需要发送的url地址String wxUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; // 获取退款的api接口System.out.println("发送前的xml为:" + xml);// 7,向微信发送请求转账请求String returnXml = certHttpUtil.postData(wxUrl, xml, MCHID, CERTPATH);System.out.println("返回的returnXml为:" + returnXml);// 8,将微信返回的xml结果转成map格式Map<String, String> returnMap = WXPayUtil.xmlToMap(returnXml);if (returnMap.get("result_code").equals("SUCCESS")) {// 付款成功System.out.println("returnMap为:" + returnMap);}else {return Result.error(902,returnMap.get("err_code_des"));}return Result.ok(returnMap.toString());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return Result.error(901,"微信转账失败!");}}

4.用到的工具类

import java.io.File;import java.io.FileInputStream;import java.io.IOException;
import java.io.InputStream;
import java.security.KeyStore;import javax.net.ssl.SSLContext;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.methods.HttpPost;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.conn.ssl.SSLContexts;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.util.EntityUtils;import org.springframework.stereotype.Component;/*** 获取微信apiclient_cert.p12证书*/@Componentpublic class CertHttpUtil {private static int socketTimeout = 10000;// 连接超时时间,默认10秒private static int connectTimeout = 30000;// 传输超时时间,默认30秒private static RequestConfig requestConfig;// 请求器的配置private static CloseableHttpClient httpClient;// HTTP请求器/*** 通过Https往API post xml数据** @param url API地址* @param xmlObj 要提交的XML数据对象* @param mchId 商户ID* @param certPath 证书位置* @return*/public String postData(String url, String xmlObj, String mchId, String certPath) {// 加载证书try {initCert(mchId, certPath);} catch (Exception e) {e.printStackTrace();}String result = null;HttpPost httpPost = new HttpPost(url);// 得指明使用UTF-8编码,否则到API服务器XML的中文不能被成功识别StringEntity postEntity = new StringEntity(xmlObj, "UTF-8");httpPost.addHeader("Content-Type", "text/xml");httpPost.setEntity(postEntity);// 根据默认超时限制初始化requestConfigrequestConfig = RequestConfig.custom().setSocketTimeout(socketTimeout).setConnectTimeout(connectTimeout).build();// 设置请求器的配置httpPost.setConfig(requestConfig);try {HttpResponse response = null;try {response = httpClient.execute(httpPost);} catch (IOException e) {e.printStackTrace();}HttpEntity entity = response.getEntity();try {result = EntityUtils.toString(entity, "UTF-8");} catch (IOException e) {e.printStackTrace();}} finally {httpPost.abort();}return result;}/*** 加载证书** @param mchId 商户ID* @param certPath 证书位置* @throws Exception*/private void initCert(String mchId, String certPath) throws Exception {// 证书密码,默认为商户IDString key = mchId;// 证书的路径String path = certPath;// 指定读取证书格式为PKCS12KeyStore keyStore = KeyStore.getInstance("PKCS12");// 读取本机存放的PKCS12证书文件File file = new File(path);InputStream in = new FileInputStream(file);try {// 指定PKCS12的密码(商户ID)keyStore.load(in, key.toCharArray());} finally {in.close();}SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, key.toCharArray()).build();SSLConnectionSocketFactory sslsf =new SSLConnectionSocketFactory(sslcontext, new String[] {"TLSv1"}, null,SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);httpClient = HttpClients.custom().setSSLSocketFactory(sslsf).build();}}

注意,这个功能的实现需要先获取微信授权,授权后获取微信用户的openid才能完成提现,同时该方法适合微信公众号提现和微信小程序提现。

Java实现提现到微信的功能相关推荐

  1. php实现微信清粉功能,PHP实现微信提现功能

    PHP实现微信提现功能 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  PHP实现微信提现功能.txt ] (友情提示:右键点上行txt文档名->目标另存为 ...

  2. java 微信自动回复功能开发

    java 微信自动回复功能开发 准备文件: JCE无限制权限策略文件,里面是对应jdk6和7的文件 官网下载地址是http://www.oracle.com/technetwork/java/java ...

  3. java 提现,利用java实现提现金额到支付宝账户的功能,提现一万手续费多少

    利用java实现提现金额到支付宝账户的功能利用爪哇岛实现提现金额到支付宝账户的功能, 实现步骤具体如下: (学习视频分享:java教学视频) 1.导入依赖 属国 groupIdcom.alipay.s ...

  4. java实现简单扫码登录功能(模仿微信网页版扫码)

    java实现简单扫码登录功能 模仿微信pc网页版扫码登录 使用js代码生成qrcode二维码减轻服务器压力 js循环请求服务端,判断是否qrcode被扫 二维码超时失效功能 二维码被扫成功登录,服务端 ...

  5. 微信字 签到 java_java微信签到功能实现:java做的一个简易的微信签到系统

    java微信签到功能实现,现在微信签到功能很流行,这个签到功能帮助微信用户更好的管理自己的微信公众号,那你想知道java微信签到功能如何实现呢,今天小编就特意为大家分享一个关于java微信签到功能实现 ...

  6. java设计按月每天签到_java微信签到功能实现:java做的一个简易的微信签到系统的案例...

    java微信签到功能实现,现在微信签到功能很流行,这个签到功能帮助微信用户更好的管理自己的微信公众号,那你想知道java微信签到功能如何实现呢,今天小编就特意为大家分享一个关于java微信签到功能实现 ...

  7. 微信隐藏功能:微信提现怎么免手续费?勤俭持家的福音,2步做到

    微信提现手续费多少?我们存在微信钱包中的金额,方便于我们使用微信支付功能进行交易消费,但如果想要将里面的金额提现出来的话,需要扣除一定的手续费.本期的微信隐藏功能:微信提现怎么免手续费? 如果没有办法 ...

  8. 微信信息回复 java,微信公众平台开发中使用Java如何实现一个消息回复功能

    微信公众平台开发中使用Java如何实现一个消息回复功能 发布时间:2020-11-17 16:11:11 来源:亿速云 阅读:82 作者:Leah 本篇文章给大家分享的是有关微信公众平台开发中使用Ja ...

  9. php公众号提现功能,微信公众号打赏的钱怎么提现_微信公众号打赏功能_微信公众号打赏从哪里取出来...

    微信公众号打赏的钱怎么提现,微信公众号打赏功能.微信公众号之前打赏功能可以立即取现,但是最近出现了一些变动,会有人问微信公众号打赏为什么不能立刻取现?小编为大家带来了微信公众号打赏取现时间调整. 微信 ...

最新文章

  1. Jquery之dom操作
  2. bme280 环境传感器开发板_盘一盘那些年我们常用的物联网开发板!
  3. CCNA考试试验总结
  4. html元素垂直水平居中显示,关于css:html-元素垂直水平居中
  5. 在html中标记bdo,HTML_HTML非常用标签 optgroup、sub、sup和bdo示例代码,optgroup 用在select 标记中 可以 - phpStudy...
  6. Android---真机调试时不能识别手机的解决方案
  7. M1 MacBook Air值不值得买?使用体验分享
  8. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_05 IO字符流_6_字符输出流写数据的其他方法...
  9. c语言高级代码编程图,c语言图形编程代码(C language programming code).doc
  10. Itil 故障管理流程关键知识
  11. mmall 项目实战(一)项目初始化
  12. SAP MM 采购申请后台配置
  13. javascript时间日期操作
  14. 用R求矩阵的特征值和特征向量
  15. 我的世界服务器物品栏太小咋办,《我的世界》MC背包容量太小?这四个装东西的道具了解一下!...
  16. 怀旧动画之《嘿!奔奔》
  17. 2.3 数值分析: 矩阵三角分解法
  18. MySQL解释--百度百科
  19. 珠峰峰顶首次5G通话背后的中国“荣耀”时刻
  20. Web安全攻防之XSS平台搭建

热门文章

  1. 掌握XML系列(四)---创建格式良好的XML文档
  2. mysql定时器每月执行一次_MySQL定时器可以设置执行次数吗
  3. uboot环境下mmc操作_【记录】将Uboot 2011.06中mmc驱动移植到uboot 1.1.6的过程
  4. android7.1开机监听广播,Android7.1 Audio Debug相关方法
  5. idea调整主题和代码风格
  6. gitkraen_超详细!Github团队协作教程(Gitkraken版)
  7. python popen函数讲解_Python常用模块函数代码汇总解析
  8. 苏州大学计算机考研复试经验,苏州大学计算机考研复试经验总结.docx
  9. java切面不需要接口了吗_使用java语言,如何对一个类中的静态方法做切面编程?...
  10. 分布式内存数据库---redis配置文件常用配置介绍