这是我参与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");
复制代码