【API】微信支付简单集成

这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

说明

当服务服务中需要支付功能,可以尝试使用微信支付。微信支付提供企业向用户付款的功能,支持企业通过API接口付款,或通过微信支付商户平台网页功能操作付款。

功能开通

首先需要在官网进行开通,地址: #PC网站接入支付

授权说明

通过网页授权获取用户的openid(企业向微信用户个人付款 目前支持向指定微信用户的openid付款。),具体获取方法可查网页授权

API调用代码

请求示例

只写了些简单参数,具体参数详情见【微信支付】付款开发者文档

Map<String, String> reqData = new HashMap<>();
// 签名
reqData.put("sign","abc");
// 用户openid
reqData.put("openid","1657446542123");
// 校验用户姓名选项
reqData.put("check_name","NO_CHECK");
// 付款金额,单位为分
reqData.put("amount","30.0");
// 付款备注
reqData.put("desc","付款");
// 商户账号appid
reqData.put("mch_appid", "wx1234567065d35555");
// 商户号
reqData.put("mchid", "1768826471");
// Ip地址
reqData.put("spbill_create_ip", InetAddress.getLocalHost().getHostAddress());
// 随机字符串
reqData.put("nonce_str", "lst");
// 转成xml格式
String xml = mapToXml(reqData);
String url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers";
// 发起请求
String response = HttpService.Post(xml, url, true, 5000);
复制代码
map转xml方法
public static String mapToXml(Map<String, String> data) throws Exception {
        Document document = PayXmlUtil.newDocument();
        Element root = document.createElement("xml");
        document.appendChild(root);
        Iterator var3 = data.keySet().iterator();

        while(var3.hasNext()) {
            String key = (String)var3.next();
            String value = (String)data.get(key);
            if (value == null) {
                value = "";
            }

            value = value.trim();
            Element filed = document.createElement(key);
            filed.appendChild(document.createTextNode(value));
            root.appendChild(filed);
        }

        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = tf.newTransformer();
        DOMSource source = new DOMSource(document);
        transformer.setOutputProperty("encoding", "UTF-8");
        transformer.setOutputProperty("indent", "yes");
        StringWriter writer = new StringWriter();
        StreamResult result = new StreamResult(writer);
        transformer.transform(source, result);
        String output = writer.getBuffer().toString();

        try {
            writer.close();
            return output;
        } catch (Exception e) {
            log.error(e.toString());
        }
}
复制代码

注意

请求头中需要设置格式为xml

httpPost.addHeader("Content-Type", "text/xml");
复制代码

参考