付款到零钱代码实现如下:

1、支付方法


@Service
@AllArgsConstructor
public class PayService {
/*** 企业付款到零钱* @param openid* @param no* @param userName* @param amount* @throws WxPayException*/public Map<String,String> entPay(String openid,String no,String userName,Integer amount) throws Exception{String mchId = "xxx";//商户号IDString appid = "xxx";//appidString key = "xxx";//商户号KeyString certFile = "C:\\Users\\Administrator\\Desktop\\apiclient_cert.p12";//api证书文件存放路径Map<String,String> parameterMap = new TreeMap<>();parameterMap.put("amount", amount.toString());parameterMap.put("check_name", "NO_CHECK");//不验证用户真实姓名parameterMap.put("mch_appid", appid);parameterMap.put("mchid", mchId);parameterMap.put("partner_trade_no", no);parameterMap.put("nonce_str", WxPayUtils.generateNonceStr());parameterMap.put("openid", openid);
//        parameterMap.put("re_user_name", userName);parameterMap.put("spbill_create_ip", "127.0.0.1");parameterMap.put("desc","提现");parameterMap.put("sign", WxPayUtils.generateSignature(parameterMap,key,"MD5"));String reuqestXml = WxPayUtils.mapToXml(parameterMap);System.out.println("微信企业付款到零钱请求集合"+reuqestXml);//发送请求到企业付款到零钱的Api。发送请求是一个方法来的POSTString wxUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; //获取付款到零钱的api接口//调用方法发送了String weixinPost = HttpUtil.HttpClientSSL(reuqestXml,mchId,wxUrl,certFile);//解析返回的xml数据System.out.println("微信企业付款到零钱返回结果"+weixinPost);Map<String, String> resultMap = WxPayUtils.xmlToMap(weixinPost);return resultMap;}
}

2、工具类

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.StringWriter;
import java.security.MessageDigest;
import java.security.SecureRandom;
import java.util.*;public class WxPayUtils {private static final String SYMBOLS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";private static final Random RANDOM = new SecureRandom();/*** XML格式字符串转换为Map** @param strXML XML字符串* @return XML数据转换后的Map* @throws Exception*/public static Map<String, String> xmlToMap(String strXML) throws Exception {try {Map<String, String> data = new HashMap<String, String>();DocumentBuilder documentBuilder = WXPayXmlUtil.newDocumentBuilder();InputStream stream = new ByteArrayInputStream(strXML.getBytes("UTF-8"));org.w3c.dom.Document doc = documentBuilder.parse(stream);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) {org.w3c.dom.Element element = (org.w3c.dom.Element) node;data.put(element.getNodeName(), element.getTextContent());}}try {stream.close();} catch (Exception ex) {// do nothing}return data;} catch (Exception ex) {WxPayUtils.getLogger().warn("Invalid XML, can not convert to map. Error message: {}. XML content: {}", ex.getMessage(), strXML);throw ex;}}/*** 将Map转换为XML格式的字符串** @param data Map类型数据* @return XML格式的字符串* @throws Exception*/public static String mapToXml(Map<String, String> data) throws Exception {org.w3c.dom.Document document = WXPayXmlUtil.newDocument();org.w3c.dom.Element root = document.createElement("xml");document.appendChild(root);for (String key: data.keySet()) {String value = data.get(key);if (value == null) {value = "";}value = value.trim();org.w3c.dom.Element filed = document.createElement(key);filed.appendChild(document.createTextNode(value));root.appendChild(filed);}TransformerFactory tf = TransformerFactory.newInstance();Transformer transformer = tf.newTransformer();DOMSource source = new DOMSource(document);transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");transformer.setOutputProperty(OutputKeys.INDENT, "yes");StringWriter writer = new StringWriter();StreamResult result = new StreamResult(writer);transformer.transform(source, result);String output = writer.getBuffer().toString(); //.replaceAll("\n|\r", "");try {writer.close();}catch (Exception ex) {}return output;}/*** 获取随机字符串 Nonce Str** @return String 随机字符串*/public static String generateNonceStr() {char[] nonceChars = new char[32];for (int index = 0; index < nonceChars.length; ++index) {nonceChars[index] = SYMBOLS.charAt(RANDOM.nextInt(SYMBOLS.length()));}return new String(nonceChars);}public static String generateSignature(Map<String, String> data, String key, String signType) throws Exception {Set<String> keySet = data.keySet();String[] keyArray = keySet.toArray(new String[keySet.size()]);Arrays.sort(keyArray);StringBuilder sb = new StringBuilder();for (String k : keyArray) {if (k.equals("sign")) {continue;}if (data.get(k).trim().length() > 0) // 参数值为空,则不参与签名sb.append(k).append("=").append(data.get(k).trim()).append("&");}sb.append("key=").append(key);if ("MD5".equals(signType)) {return MD5(sb.toString()).toUpperCase();}else {throw new Exception(String.format("Invalid sign_type: %s", signType));}}/*** 生成 MD5** @param data 待处理数据* @return MD5结果*/public static String MD5(String data) throws Exception {java.security.MessageDigest md = MessageDigest.getInstance("MD5");byte[] array = md.digest(data.getBytes("UTF-8"));StringBuilder sb = new StringBuilder();for (byte item : array) {sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3));}return sb.toString().toUpperCase();}/*** 日志* @return*/public static Logger getLogger() {Logger logger = LoggerFactory.getLogger("wxpay java sdk");return logger;}
}

3、xml工具类

import org.w3c.dom.Document;import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;/*** 2018/7/3*/
public final class WXPayXmlUtil {public static DocumentBuilder newDocumentBuilder() throws ParserConfigurationException {DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();documentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);documentBuilderFactory.setFeature("http://xml.org/sax/features/external-general-entities", false);documentBuilderFactory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);documentBuilderFactory.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);documentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);documentBuilderFactory.setXIncludeAware(false);documentBuilderFactory.setExpandEntityReferences(false);return documentBuilderFactory.newDocumentBuilder();}public static Document newDocument() throws ParserConfigurationException {return newDocumentBuilder().newDocument();}
}

4、携带证书的http请求工具类型

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
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.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.util.EntityUtils;import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.KeyStore;/*** 网络请求工具类*/@Slf4j
public class HttpUtil {
/*** 携带证书的httpPOST请求* @param postDataXML* @param certPassword* @param requestUrl* @param certFilePath* @return* @throws Exception*/
public static String  HttpClientSSL(String postDataXML, String certPassword, String requestUrl,String certFilePath) throws Exception{CloseableHttpClient httpClient = null;CloseableHttpResponse httpResponse = null;try{KeyStore keyStore = getCertificate(certPassword,certFilePath);SSLContext sslContext = SSLContexts.custom().loadKeyMaterial(keyStore, certPassword.toCharArray()).build();SSLConnectionSocketFactory sslf = new SSLConnectionSocketFactory(sslContext);httpClient = HttpClients.custom().setSSLSocketFactory(sslf).build();HttpPost httpPost = new HttpPost(requestUrl);//退款接口httpPost.addHeader("Content-Type", "text/xml");StringEntity reqEntity = new StringEntity(postDataXML,"UTF-8");httpPost.setEntity(reqEntity);String result = null;httpResponse = httpClient.execute(httpPost);HttpEntity httpEntity = httpResponse.getEntity();result = EntityUtils.toString(httpEntity, "UTF8");EntityUtils.consume(httpEntity);return result;}finally {//关流httpClient.close();httpResponse.close();}
}/***  获取证书文件* @certPassword 证书密码* @fileUrl 文件路径*/
private static KeyStore getCertificate(String certPassword,String fileUrl){//try-with-resources 关流try (FileInputStream inputStream = new FileInputStream(new File(fileUrl))) {KeyStore keyStore = KeyStore.getInstance("PKCS12");keyStore.load(inputStream, certPassword.toCharArray());return keyStore;} catch (Exception e) {throw new RuntimeException(e.getMessage(), e);}
}

Java 微信企业付款到零钱相关推荐

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

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

  2. java零钱换整程序_JAVA微信企业付款到零钱(十分钟搞定),

    JAVA微信企业付款到零钱(十分钟搞定), 最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信企业付款到零钱的开发过程, 主要就是按规则封装好请求参数调用微信接口,涉 ...

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

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

  4. 微信支付、微信企业付款到零钱工具类

    微信支付.微信企业付款到零钱工具类 主要依赖:apache httpclient 4.5 jdk1.8 工具类主要功能: xml参数拼接 签名算法实现 post加密请求 import lombok.e ...

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

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

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

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

  7. 微信企业付款到零钱出现请提交付款接口调用IP

    最近开通了微信企业付款到零钱产品,相关的支付域名都配置,可以在提交IP时候一直提示 请提交付款接口调用IP 错误,查阅了官网很多资料,有的说要填写出口IP,明明填写的是服务器的IP地址,缺一直提示这个 ...

  8. 微信企业付款到零钱功能介绍

    微信企业付款到零钱功能介绍 一.企业付款至零钱业务介绍 企业付款业务是为了协助商户方便地实现企业向个人付款,针对部分有开发能力的商户,通过API或网页操作,付款至目标用户(企业可根据APPID+Ope ...

  9. 微信 企业付款到零钱 提现

    官方文档:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1 关键参数如图: 证书如图: 证书路径要与代码里的路 ...

  10. java微信--企业付款到银行卡

    企业付款到银行卡其实就是企业付款到到零钱的进价版,只不过比到零钱多了一个RSA加密.只要加密好了,根据官方提供的参数,直接请求即可. 首先就是通过官方提供的接口https://fraud.mch.we ...

最新文章

  1. ios 超签签名服务器搭建(超签)
  2. 研究性论文的图注应该怎么写?
  3. 微信开发同步微信服务器图片到本地,逻辑处理。
  4. @Autowired报错的4种解决方案和原因分析!
  5. wifidog java_wifidog 配置中文说明
  6. Linux网卡配置出错无法联网-联网报错解决方法
  7. 好用的代理服务器工具_secscanauthcheck越权检查工具
  8. 基于Krpano的Hotspot热区插件·第二版
  9. 奇妙“水仙花数”的判断
  10. Thinkpad E430 vt功能开启
  11. android reboot重启分析
  12. 【算法与数据结构】分治(Divid Conquer)算法——以快排,归并排序,二分查找为例
  13. 苹果电脑怎么安装office办公
  14. 【转】Java面试题合集
  15. BZOJ3875-[Ahoi2014Jsoi2014]骑士游戏
  16. ORACLE PL/SQL编程
  17. HTML标签练习(二)
  18. http://www.cnblogs.com/tornadomeet/archive/2012/05/24/2515980.html
  19. CSS实现骨架屏 Skeleton 效果
  20. php如何实现余额充值,请问应用中实现绑定银行卡并进行消费、充值、提现一般是怎么搞的?...

热门文章

  1. 悟空遥控器 android 5.1,悟空遥控器服务端
  2. Debezium报错处理系列:Creation of database history topic failed, please create the topic manually
  3. va_list、va_start和va_end实现
  4. 如何快速构建千人规模的数字化研发管理系统
  5. css从中间向两边动画,css动画效果:鼠标移上去底部线条从中间往两边延伸 - 子成君-分享出去,快乐加倍!-旧版已停更...
  6. BAT齐聚阿里安全-ASRC生态大会:呼吁联合共建网络安全白色产业链
  7. Linux 常见问题
  8. java标签用setbounds,java-摆动setResizable和setBounds
  9. c语言程序设计21点扑克牌,C语言程序设计 21点扑克牌游戏.doc
  10. oracle 用户创建赋权,oracle 建表空间用户及赋权