Java 实现微信和支付宝支付功能的完整攻略
准备工作
- 首先需要注册微信和支付宝的开发者账号,获取相应的开发者ID和密钥。
- 根据官方文档下载相应的SDK包,并将其导入到项目中。
- 接入支付功能需要一个网站或App,需要先部署好网站或App,并申请相应的证书(微信需要HTTPS证书)。
微信支付功能的实现步骤
准备工作
- 在微信公众平台申请开通微信支付功能,获取
weixin_appid
、weixin_mch_id
、weixin_api_key
等信息。 - 下载微信支付的Java SDK
实现代码
1. 创建订单
Map<String, String> params = new HashMap<>();
params.put("appid", weixin_appid);
params.put("mch_id", weixin_mch_id);
params.put("nonce_str", String.valueOf(System.currentTimeMillis()));
params.put("body", "测试订单");
params.put("out_trade_no", String.valueOf(System.currentTimeMillis()));
params.put("total_fee", "1");
params.put("spbill_create_ip", request.getRemoteAddr());
params.put("notify_url", "https://example.com/notify");
params.put("trade_type", "JSAPI");
params.put("openid", openid);
String sign = WXPayUtil.generateSignature(params, weixin_api_key); // 生成签名
params.put("sign", sign);
WXPay wxpay = new WXPay(config); // 创建微信支付对象
Map<String, String> result = wxpay.unifiedOrder(params); // 下单
2. 支付
if ("SUCCESS".equals(result.get("result_code"))) {
String prepay_id = result.get("prepay_id");
String paySign = WXPayUtil.generateSignature(payParams, weixin_api_key); // 生成签名
Map<String, Object> payParams = new HashMap<>();
payParams.put("appId", weixin_appid);
payParams.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));
payParams.put("nonceStr", String.valueOf(System.currentTimeMillis()));
payParams.put("package", "prepay_id=" + prepay_id);
payParams.put("signType", "MD5");
payParams.put("paySign", paySign);
return new ModelAndView("payButton", payParams); // 跳转到支付页面
}
支付宝支付功能的实现步骤
准备工作
- 在支付宝开放平台注册开发者账号,获取
appId
、alipayPublicKey
、merchantPrivateKey
等信息。 - 下载支付宝支付的Java SDK。
实现代码
1. 创建订单
AlipayClient alipayClient = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do",
appId,
merchantPrivateKey,
"json",
"utf-8",
alipayPublicKey,
"RSA2");
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
request.setReturnUrl("https://example.com/return");
request.setNotifyUrl("https://example.com/notify");
AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
model.setOutTradeNo(String.valueOf(System.currentTimeMillis()));
model.setSubject("测试订单");
model.setTotalAmount("0.01");
model.setBody("测试订单body");
model.setProductCode("QUICK_WAP_PAY");
request.setBizModel(model);
// 发起支付
String form = alipayClient.pageExecute(request).getBody();
2. 支付
@GetMapping("/return")
public ModelAndView returnUrl(HttpServletRequest request) {
Map<String, String> params = getParams(request);
boolean signVerified = AlipaySignature.rsaCheckV1(params, alipayPublicKey, "utf-8", "RSA2");
if (signVerified) {
return new ModelAndView("success");
} else {
return new ModelAndView("fail");
}
}
@PostMapping("/notify")
public void notify(HttpServletRequest request) {
Map<String, String> params = getParams(request);
boolean signVerified = AlipaySignature.rsaCheckV1(params, alipayPublicKey, "utf-8", "RSA2");
if (signVerified) {
// 处理订单
}
}
private Map<String, String> getParams(HttpServletRequest request) {
Map<String, String> result = new HashMap<>();
Map<String, String[]> params = request.getParameterMap();
for (Map.Entry<String, String[]> entry : params.entrySet()) {
String name = entry.getKey();
String[] values = entry.getValue();
StringBuilder value = new StringBuilder();
for (String s : values) {
value.append(s);
}
result.put(name, value.toString());
}
return result;
}
总结
以上是Java实现微信和支付宝支付功能的完整攻略,我们可以看到在具体实现的时候都需要一步一步的按照官方文档进行,这里也只是提供一个大致实现思路。在具体实际情况中,还要考虑安全、可靠性等问题,以便保障支付功能的正常使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 实现微信和支付宝支付功能 - Python技术站