微信提现(V2版本)

注意事项:

1.v2版本提现需要用到证书(证书的密码就是你的mchid)
2.发送请求的时候需要setSSLSocketFactory

1.组装好提现需要的参数

Map<String,Object> params = new HashMap<String,Object>(10);

params.put("mch_appid","申请商户号的appid或商户号绑定的appid");
params.put("mchid","");
params.put("nonce_str","随机生成一个字符串");
params.put("partner_trade_no","提现用到的单号和订单号的道理一样");
params.put("openid","");
params.put("check_name","NO_CHECK");
params.put("amount","单位是分,最少提现一块,当天最多5000");
params.put("desc","备注");
String sign = getSign(params);
params.put("sign",sign );
//得到请求的参数
String xmlStr = XmlUtil.mapToXmlStr(convert, "xml");

sortMap这个方法在支付里有写到感兴趣的就去看一下

//对参数进行加密
 public String getSign(Map<String, Object> convert) {
        //转换成key=value&key1=value1
        String urlMap = WxUtil.sortMap(convert,"你的商户key");
        //加密
        return SecureUtil.md5(urlMap).toUpperCase();
    }

2.发送请求

我使用的是hutool里的HttpRequest 我直接粘源码啦,有懂的小伙伴可以讲一下HttpRequest .setSSLSocketFactory,我也不太懂害怕误导了大家。我保证复制上就能用。

try {
    String responseXml = HttpRequest.post("微信提现的链接")
            .setSSLSocketFactory(SSLSocketFactoryBuilder
                    .create()
                    .setProtocol(SSLSocketFactoryBuilder.TLSv1)
                    .setKeyManagers(WxUtil.getKeyManager("你的商户id"))
                    .setSecureRandom(new SecureRandom())
                    .build()
              //上面的组装好的参数
            ).body(xmlStr)
            .execute()
            .body();

    //返回结果
    Map<String, Object> responseMap = XmlUtil.xmlToMap(responseXml);
  
    if (!WxUtil.isSuccess(response)) {
        throw new ApiException("提现失败,请稍后重试");
    }
    //提现成功--你的逻辑部分

    return responseMap ;

} catch (Exception e) {
    e.printStackTrace();
    LOGGER.error("catch到的错误[{}]",e.getMessage());
    throw new ApiException("提现失败,请稍后重试");
}

WxUtil.getKeyManager();,这里我直接放到resource下了,你也可以指定你的路径,比如:FileInputStream fileInputStream = new FileInputStream(“你的证书路径”);

/**
* certPass:你的商户id
*/
public static KeyManager[] getKeyManager(String certPass) throws Exception {
		//加载证书
        ClassPathResource cp = new ClassPathResource("resource下的证书路径");
        KeyStore clientStore = KeyStore.getInstance("PKCS12");
        clientStore.load(cp.getInputStream(), certPass.toCharArray());
        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        kmf.init(clientStore, certPass.toCharArray());
        return kmf.getKeyManagers();
    }

至此已经可以提现啦。测试的话最少提现一块。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值