微信公众平台开发(3) 企业付款

API地址:https://pay.weixin.qq.com/wiki/doc/api/tools/mch_pay.php?chapter=14_1

微信提供企业向个人付款的功能。企业通过APPID+OpenID锁定目标用户,向用户付款,因此只有关注了企业公众号的用户才能付款成功。这里企业付款的公众号可以和微信公众号相同,但公众号的收款账号和付款账号不能共享。企业付款需要下载数字证书,Java只需要商户证书文件apiclient_cert.p12。

1、将企业付款所需参数封装成MchPayInfo实体

 1 public class MchPayInfo implements Serializable{
 2 
 3     /**
 4      * 
 5      */
 6     private static final long serialVersionUID = 1L;
 7     
 8     private String mch_appid;
 9     private String mchid;
10     private String device_info;
11     private String nonce_str;
12     private String sign;
13     private String partner_trade_no;
14     private String openid;
15     private String check_name;
16     private String re_user_name;
17     private int amount;
18     private String desc;
19     
20     //省略getter、setter方法
21 }

创建MchPayInfo:

 1 /**
 2      * 企业付款的xml的java对象
 3      * @param params UniformOrderParams
 4      * @return
 5      */
 6     public static MchPayInfo createMchPayInfo(MchPayParams mchPayParams) {
 7         
 8         String nonce_str = new StringWidthWeightRandom().getNextString(32);
 9         
10         MchPayInfo mchPayInfo = new MchPayInfo();
11         
12         mchPayInfo.setMch_appid("appid");//商户appid
13         mchPayInfo.setDevice_info("WEB");
14         mchPayInfo.setAmount(mchPayParams.getAmount());//付款金额
15         mchPayInfo.setMchid("mchid");//商户mchid
16         mchPayInfo.setDesc(mchPayParams.getDesc());
17         mchPayInfo.setNonce_str(nonce_str);
18         mchPayInfo.setOpenid(mchPayParams.getOpenid());//付款对象的openid
19         mchPayInfo.setSpbill_create_ip(mchPayParams.getSpbill_create_ip());
20         mchPayInfo.setPartner_trade_no(mchPayParams.getPartner_trade_no());//商户订单号,需保持唯一,此值微信会不做修改返回
21         mchPayInfo.setRe_user_name(mchPayParams.getRe_user_name());
22         mchPayInfo.setCheck_name(mchPayParams.getCheck_name());
23         
24         

2、调前面写的统一的微信调用接口付款,将微信的返回结果转换成map

 1 /**
 2      * 企业付款
 3      */
 4     @Override
 5     public Map<String, String> mchPay(MchPayParams mchPayParams) {
 6         //构建MchPayInfo
 7         MchPayInfo mchPayInfo = CommonUtil.createMchPayInfo(mchPayParams);
 8         
 9         //将bean转换为map
10         SortedMap<Object,Object> paras = CommonUtil.convertBean(mchPayInfo);
11         //签名
12         String sgin = CommonUtil.createSgin(paras);
13         //设置签名
14         mchPayInfo.setSign(sgin);
15         
16         String xml = CommonUtil.beanToXML(mchPayInfo).replace("__", "_").
17                 replace("<![CDATA[", "").replace("]]>", "");
18         //此处传true表示调用微信接口需要使用数字证书
19         Map<String, String> map = CommonUtil.httpsRequestToXML(
20                 "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers","POST",xml,true);
21         
22         return map;
23     }

3、商户系统根据微信的返回结果处理付款信息即可

原文地址:https://www.cnblogs.com/zhangxianming/p/5772232.html