最近客户平台做的越来越大了,之前给代理商的分红都是提现到微信零钱的,由于数额比较大了,于是他们就想直接把钱提现到银行卡里,翻阅了一遍“微信”的官方文档,一如既往地各种烦躁,心里那个万马奔腾呀,无奈还得用人家呀,只能求助万能的的“度娘”了,有价值的文章毕竟是寥寥无几,不管怎样,最终还是把功能实现了,万幸!!!!!!!
此文仅作记录,以备查用
首当其冲的是参数的加密算法:
虽然这里有获取公钥的文档,但是相信还是有很多人跟我一样,看了文档也不知所措的。不废话了,下面上干货:
这里第一步先 发送http请求获取公钥文本,注意这里发送的请求必须携带商户号证书才可以
String nonce_str = WeixinUtil.genNonceStr();
Map<String, String> packageParams = new HashMap<>();
packageParams.put("mch_id", WXConfig.sub_mch_id);
packageParams.put("nonce_str",nonce_str);
packageParams.put("sign_type", "MD5");
String prestr = PayUtils.createLinkString(packageParams);
String sign = PayUtils.sign(prestr, WXConfig.sub_mch_key, "utf-8").toUpperCase();
String xml="<xml>"+
"<mch_id>"+WXConfig.sub_mch_id+"</mch_id>"+
"<nonce_str>"+nonce_str+"</nonce_str>"+
"<sign>"+sign+"</sign>"+
"<sign_type>"+"MD5"+"</sign_type>"+
"</xml>";
String result= HttpUtil.sendPostWidthCert("https://fraud.mch.weixin.qq.com/risk/getpublickey", xml,WXConfig.sub_mch_id);
Map<String, String> resultData = WeixinUtil.doXMLParse(result);
if(resultData.get("result_code").equals("SUCCESS")){
System.out.println(resultData.get("pub_key"));
}else{
System.out.println("获取微信证书失败:"+resultData.get("return_msg"));
}
代码里的工具类文章结尾的源码里都有。
执行上面代码后,获取到了公钥文本为PKCS#1格式(如下图所示),全选复制后,以此文本内容创建一个名叫publicKey.pem的文本文件
然后在命令行里执行命令:
openssl rsa -RSAPublicKey_in -in publicKey.pem -pubout
执行完上面的命令后,就会得到PKCS#8版本的公钥了,Java只能使用PKCS#8版本的公钥,如果您的系统没有安装openssl,请自行安装,这里不做赘述
最后把上面红色框里的内容复制并创建一个 pksc8_public.pem的文本文件即可,这个就是我们加密时需要用到的公钥文件了,不得不说微信这里实在太绕了,直接个PKCS#8版本的文件下载接口不就完事了?
然后就是第二个坑了,提现请求完了以后,怎么查询提现结果呢?找了N遍都没找到查询接口在哪里?跟我躲猫猫呢?最后在一位博主的博客里看到了,那位博主用的是php语言。
提现到银行卡的结果查询接口是:
https://api.mch.weixin.qq.com/mmpaysptrans/query_bank
最后,我整理了一份demo,里面包含了提现到微信零钱,提现到银行卡;以及两种提现方式的结果查询功能,创作不易,收点小小费用,介意的请绕行,实在经济困难的也可私信我要