微信公众号支付详细过程
微信公众号支付详细过程
背景
公司的公众号有个保险项目需要用到微信支付,官网Java文档写的并不是很详细。个人根据网上一些demo总结出来的微信支付功能,中间遇到过几个坑,后续会详细讲解。
一.转换MD5格式类
首先,我们需要一个用于转换MD5格式的类,这个类将帮助我们生成签名用的字符串。
```javapublic class MD5Util {
public static String getMD5(String str) {
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] bytes = md.digest(str.getBytes());
StringBuilder sb = new StringBuilder();
for (byte b : bytes) {
sb.append(Integer.toHexString(0xff & b));
}
return sb.toString();
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
```
二.微信支付接口类
下面是用于调用微信支付接口的类,这个类将帮助我们生成签名用的字符串和进行支付请求。
```javapublic class WeChatPayUtil {
private static final String APPID = "你的APPID";
private static final String MCHID = "你的MCHID";
private static final String KEY = "你的KEY";
public static String getSign(String data) {
return MD5Util.getMD5(APPID + KEY + data);
}
public static void pay(String openid, String amount, String body) throws Exception {
//生成签名用的字符串 String sign = getSign(openid + amount + body);
// 构造支付请求的JSON数据 JSONObject json = new JSONObject();
json.put("appid", APPID);
json.put("mch_id", MCHID);
json.put("nonce_str", UUID.randomUUID().toString());
json.put("body", body);
json.put("amount", amount);
json.put("spbill_create_ip", "127.0.0.1");
json.put("notify_url", " json.put("trade_type", "JSAPI");
json.put("openid", openid);
json.put("sign", sign);
// 进行支付请求 String url = " URL obj = new URL(url);
HttpURLConnection connection = (HttpURLConnection) obj.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
// 将JSON数据写入请求体 OutputStream os = connection.getOutputStream();
os.write(json.toString().getBytes());
os.close();
// 获取支付结果 int code = connection.getResponseCode();
if (code ==200) {
String result = connection.getInputStream().toString();
System.out.println(result);
} else {
throw new Exception("支付失败");
}
}
}
```
三.使用微信支付接口类
最后,我们可以在我们的业务逻辑中使用微信支付接口类来进行支付请求。
```javapublic class BusinessLogic {
public void doBusiness() throws Exception {
// 获取用户的openid String openid = getUserOpenid();
// 获取支付金额和描述 String amount = getAmount();
String body = getBody();
// 进行支付请求 WeChatPayUtil.pay(openid, amount, body);
}
}
```
注意
* 在使用微信支付接口类时,请确保你已经正确配置了APPID、MCHID和KEY。
* 在进行支付请求时,请确保你已经正确构造了签名用的字符串和JSON数据。
* 如果你遇到任何问题,请参考微信官方文档或联系微信支持团队。
以上就是使用微信公众号支付的详细过程。希望这个教程能够帮助你成功地进行微信支付。