• 微信公众平台开发(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、商户系统根据微信的返回结果处理付款信息即可

  • 相关阅读:
    暑假训练第三周总结
    UVA 1212 Duopoly
    UVA 12125 March of the Penguins
    UVA 1345 Jamie's Contact Groups
    UVA 10806 Dijkstra, Dijkstra.
    暑假训练第一周总结
    HDU 5792 World is Exploding
    HDU 5791 Two
    HDU 5787 K-wolf Number
    Sql With as 用法
  • 原文地址:https://www.cnblogs.com/zhangxianming/p/5772232.html
Copyright © 2020-2023  润新知