Java - 微信支付
微信支付 Java 实现详细描述
1. 官方文档首先,我们需要了解微信支付官方文档的内容。以下是部分参考内容:
* 介绍: 微信支付是一种基于微信平台的在线支付方式,支持多种支付渠道,如银行卡、微信钱包等。
* 场景: 商户系统先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易会话标识后再在APP里面调起支付。
2. 参数说明以下是部分参数说明:
* appid: 微信开放平台为商户分配的appid* mch_id: 商户号* nonce_str: 随机字符串,防止重复请求* body: 商品描述* notify_url: 回调地址* trade_type:交易类型(JSAPI、NATIVE、APP)
* prepay_id: 预支付交易会话标识3. 微信统一工具类以下是微信统一工具类的实现:
```javapackage com.maiji.pay.wx;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONObject;
public class WxPayUtil {
private static final String APPID = "your_appid";
private static final String MCH_ID = "your_mch_id";
public static Map
//生成随机字符串 String nonceStr = createNoncestr();
// 组装参数 Map
params.put("appid", APPID);
params.put("mch_id", MCH_ID);
params.put("nonce_str", nonceStr);
params.put("body", body);
params.put("notify_url", notifyUrl);
params.put("trade_type", tradeType);
// 组装xml String xml = WxPayUtil.buildXml(params);
// 发起请求 String response = sendPost(xml, " // 解析xml Map
return result;
}
private static String createNoncestr() {
return UUID.randomUUID().toString();
}
private static String buildXml(Map
StringBuilder xml = new StringBuilder();
for (Map.Entry
xml.append("<").append(entry.getKey()).append(">").append(entry.getValue()).append("").append(entry.getKey()).append(">");
}
return xml.toString();
}
private static String sendPost(String xml, String url) throws Exception {
URL postUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
return response.toString();
} finally {
connection.disconnect();
}
}
private static Map
JSONObject jsonObject = new JSONObject(xml);
Map
for (String key : jsonObject.keySet()) {
result.put(key, jsonObject.get(key));
}
return result;
}
}
```
4. 使用示例以下是使用示例:
```javapublic class Main {
public static void main(String[] args) throws Exception {
String body = "测试商品";
String notifyUrl = " String tradeType = "JSAPI";
Map
System.out.println(result);
}
}
```
5. 注意事项以下是注意事项:
* appid: 微信开放平台为商户分配的appid* mch_id: 商户号* nonce_str: 随机字符串,防止重复请求* body: 商品描述* notify_url: 回调地址* trade_type:交易类型(JSAPI、NATIVE、APP)
* prepay_id: 预支付交易会话标识以上是微信支付 Java 实现的详细描述。