使用条件
1、商户号(或同主体其他非服务商商户号)已入驻90日
2、截止今日回推30天,商户号(或同主体其他非服务商商户号)连续不间断保持有交易
3、 登录微信支付商户平台-产品中心,开通企业付款。
需要去商户平台配置
1,企业付款到零钱需要证书,需要下载证书
2,需要设置支付白名单,可以是ip也可以是域名。
下面直接上代码了。
企业付款到零钱支付常量类,这里需要注意的是证书,证书的位置可以放在,如图所示,这个位置,这样就可以读取到了
支付常类,企业付款到零钱没有回调地址,可以不写。支付要用到,这里的配置这样写不太好,正确的写发是放在配置文件里面,然后去读配置文件,这里就先这样写了
package com.util;
/**
* 支付常量类
*/
public class WXPayConstant {
/**
* 小程序 appId
*/
public static final String APP_ID = "";
/**
* 商户id
*/
public static final String MCH_ID = "";
/**
* 支付密钥
*/
public static final String PAY_APP_SECRET = "";
/**
* 支付回调地址
*/
public static final String PAY_NOTIFY_URL = "";
/**
* 统一下单API接口链接
*/
public static final String PAY_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder";
/**
* 证书名字
*/
public static final String CLIENT_CERT_NAME = "cart/apiclient_cert.p12";
/**
* 微信退款接口
*/
public static final String WEIXIN_REFUND_URL = "https://api.mch.weixin.qq.com/secapi/pay/refund";
}
业务处理类,退款需要2个参数,一个是appendid(openid),一个是money
@Autowired
private RedisTemplate<String, String> redisTemplate;
public Object Presentation(String appendid, String money) {
String key = WXPayConstant.PAY_APP_SECRET;
// 1.0 拼凑企业支付需要的参数
String appid = WXPayConstant.APP_ID; // 微信公众号的appid
String mch_id = WXPayConstant.MCH_ID; // 商户号
//String nonce_str = CreateRandomUtil.getRandom(20);// 随机字符串
String nonce_str =CreateRandomUtil.getRandom(20);// 随机字符串
String partner_trade_no="";
synchronized (this) {
partner_trade_no = orderNo("T");// 商户订单号
}
String openid = appendid; // 支付给用户openid
String check_name = "NO_CHECK"; // 是否验证真实姓名呢
String re_user_name = "KOLO"; // 收款用户姓名(非必须)
BigDecimal tmoney=new BigDecimal("100");
BigDecimal newtmoney=new BigDecimal(money);
money=newtmoney.multiply(tmoney).toString();
Integer aaaaaaa= newtmoney.multiply(tmoney).intValue();
String amount = aaaaaaa.toString(); // 企业付款金额,最少为100,单位为分
String desc = "恭喜你,提现成功"; // 企业付款操作说明信息。必填。
String spbill_create_ip = "127.0.0.1"; // 用户的ip地址
// 2.0 生成map集合
SortedMap<Object,Object> packageParams = new TreeMap<Object,Object>();
//Map<String, String> packageParams = new HashMap<String, String>();
packageParams.put("mch_appid", appid); // 微信公众号的appid
packageParams.put("mchid", mch_id); // 商务号
packageParams.put("nonce_str", nonce_str); // 随机生成后数字,保证安全性
packageParams.put("partner_trade_no", partner_trade_no); // 生成商户订单号
packageParams.put("openid", openid); // 支付给用户openid
packageParams.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 = XMLUtil.createSign("UTF-8", packageParams,key); //获取签名
packageParams.put("sign", sign);
// 5.0将当前的map结合转化成xml格式
//String xml = WXPayUtil.mapToXml(packageParams);
String xml = XMLUtil.getRequestXml(packagePar