普通商户模式微信支付之企业付款到零钱:
前言:
为啥会用到企业付款到零钱呢,如果在自己的系统里面有涉及到用户提现,活动奖励等功能,则就可以使用到企业付款到零钱,我在这里将其称之为转账,但是使用企业付款到零钱有很多前提条件:
如:商户号已入驻90日且截止今日回推30天商户号保持连续不间断的交易。
这是非常重要的一点,这一点满足之后才能进行接口的调用,另外就是需要用户的微信openid,openid为用户使用微信登录保存在系统的数据库中方便使用。
在使用企业付款到零钱这个功能时,需要去商户平台开通这个功能:登录微信支付商户平台-产品中心,开通付款到零钱。
前提准备:appid应用id,商户号,商户密钥,商户证书文件(apiclient_cert.p12),这些都是十分重要的参数。
话不多说了,直接上代码:
/**
* 微信提现到零钱
* 用于企业向微信用户个人付款
* 目前支持向指定微信用户的openid付款。
*/
public ResBean<Object> wxPayWithdrawal(JSONObject reqJson) {
ResBean<Object> resBean = new ResBean<>();
try {
HashMap<String, String> map = new LinkedHashMap<>();
map.put("amount", String.valueOf(reqJson.getInteger("amount"))); // 需要付款的金额,单位 分
map.put("check_name", "NO_CHECK");//NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名
map.put("desc", reqJson.getString("desc"));//提现备注
map.put("mch_appid", appId);//app应用的appId,是和此商户产生绑定关系的
map.put("mchid", mchId); // 商户的商户号
map.put("nonce_str", Long.toString(System.currentTimeMillis() / 1000)); // 随机字符串
map.put("openid", reqJson.getString("openid"));//用户openid ,微信登录里面携带的参数,可存库于用户表中进行使用
map.put("partner_trade_no", reqJson.getString("partner_trade_no"));//商户系统自己生成的订单号
//map.put("re_user_name", reqJson.getString("re_user_name"));//用户真实姓名,如果选择校验真实姓名则需要传值
map.put("sign", PayUtils.getSign(map, mchSecret)); // 构造签名
//拿到证书路径
String path = this.getClass().getClassLoader().getResource("apiclient_cert.p12").getPath();
String s = HttpUtils.postSSL("https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers", PaymentKit.toXml(map), path, mchId);
Map<String, String> result = PaymentKit.xmlToMap(s);
// 拿到响应结果
String return_code = result.get("return_code");
String result_code = result.get("result_code");
String err_code = result.get("err_code");
String err_code_des = result.get("err_code_des");
if (PaymentKit.codeIsOK(return_code)) {
if (PaymentKit.codeIsOK(result_code)) {
// 进行数据封装,响应个前端或者其他后端接口
String payment_no = result.get("payment_no");
//String payment_time = result.get("payment_time");
resBean.setRes_code("0000");
resBean.setRes_desc("企业付款到零钱申请成功");
resBean.setRes_content(payment_no);
} else {
//或者调用查询企业付款到零钱接口来查看状态
resBean.setRes_code("9999");
resBean.setRes_desc(err_code_des);
resBean.setRes_content(err_code);
}
} else {
//这里出错查看返回状态码及描述
resBean.setRes_code("9999");
resBean.setRes_desc(err_code_des);
resBean.setRes_content(err_code);
}
} catch (Exception e) {
log.error("微信提现到零钱申请出错", e);
resBean.setRes_code("9999");
resBean.setRes_desc("微信提现到零钱申请出错");
resBean.setRes_content(e);
}
return resBean;
}
到此企业付款到零钱就结束了,下一篇接着就是企业付款到银行卡了