最近公司有一个需求是接入第三方支付(微信&支付宝),我接到了支付宝支付,所以下面这篇文章主要给大家介绍了关于java对接支付宝支付项目的相关资料,需要的朋友可以参考下
java对接支付宝支付演示
现在有不少的项目都需要对接支付,这里主要是进行讲解对接支付宝H5支付
废话不多说 上代码
引入支付宝官方的sdk
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-easysdk</artifactId>
<version>2.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.10.124.ALL</version>
</dependency>
编写调用支付的方法
@RequestMapping("/test")
public void doPost(HttpServletRequest httpRequest,
HttpServletResponse httpResponse) throws ServletException, IOException {
//商户号
String APP_ID="";
//私钥
String APP_PRIVATE_KEY="";
//编码
String CHARSET="UTF-8";
//公钥
String ALIPAY_PUBLIC_KEY="";
//我是沙箱环境 所有请求地址是沙箱版
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipaydev.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); //获得初始化的AlipayClient
AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request
//这里主要是设置回调 也就是支付成功之后你要做什么操作的地址
alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp");
alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共参数中设置回跳和通知地址
/**
* @description:
* @author: hwk
* @date: 2022/6/14 16:34
* @param: out_trade_no 订单编号
* total_amount 付款金额
* subject 商品名称
* product_code 支付方式 如手机网站 pc网站 APP支付等
**/
JSONObject jsonObject = new JSONObject();
jsonObject.put("out_trade_no", "264484811515156");
jsonObject.put("total_amount", "66");
jsonObject.put("subject", "测试支付");
jsonObject.put("product_code", "QUICK_WAP_WAY");
alipayRequest.setBizContent(jsonObject.toJSONString());
String form="";
try {
form = alipayClient.pageExecute(alipayRequest).getBody();
} catch (AlipayApiException e) {
e.printStackTrace();
}
//因为我不会写前端 所以直接输出测试 如果在正式环境中 建议直接return 返回的from表单
httpResponse.setContentType("text/html;charset=" + CHARSET);
httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
httpResponse.getWriter().flush();
httpResponse.getWriter().close();
}
//支付回调
@RequestMapping("/test1")
public void aliPayNotify() {
Map<String, String> params = getAllRequestParam(request);
String tradeStatus = params.get("trade_status");
if ("TRADE_SUCCESS".equals(tradeStatus)) {
System.out.println("支付成功");
}else {
System.out.println("支付失败");
}
}
private Map<String, String> getAllRequestParam(final HttpServletRequest request) {
Map<String, String> res = new HashMap<>(8);
Enumeration<?> temp = request.getParameterNames();
while (temp.hasMoreElements()) {
String en = (String) temp.nextElement();
String value = request.getParameter(en);
res.put(en, value);
}
return res;
}
入参正式支付的时候 可以用string json等接收 我这里只是演示
成功演示图
讲解一下实际支付的时候所需要的参数吧
除去appid 公钥 私钥什么的
你正常支付所需要的参数无非 就是商品的id(主要是用于根据商品id查询商品的名称价格等后续调用支付的时候需要)、购买人
然后查询到商品的详情 set到对应的参数里面 去调用支付宝sdk 来生成from表单
你们可以在回调里面进行支付成功之后的一些操作
比如说:购买的是会员 然后在支付成功之后去给他进行开通会员或者续费会员
有一点要提醒你们 发起支付前创建的订单一定要是未支付 在回调里面判断用户是否成功
如果有用户主动查询是否支付成功的操作 建议根据订单号先去数据库查询是否等于支付成功 如果不等于去官方给的接口去查是否支付成功 这样做的好处就是有的时候回调慢了一点 用户主动去查询如果是支付成功不会造成返回支付失败
总结
到此这篇关于java对接支付宝支付项目的文章就介绍到这了,更多相关java对接支付宝支付内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:java对接支付宝支付项目的实战记录
基础教程推荐
- java基础知识之FileInputStream流的使用 2023-08-11
- java实现多人聊天系统 2023-05-19
- ConditionalOnProperty配置swagger不生效问题及解决 2023-01-02
- springboot自定义starter方法及注解实例 2023-03-31
- Java数据结构之对象比较详解 2023-03-07
- JDK数组阻塞队列源码深入分析总结 2023-04-18
- Java实现查找文件和替换文件内容 2023-04-06
- Java文件管理操作的知识点整理 2023-05-19
- Java并发编程进阶之线程控制篇 2023-03-07
- Java实现线程插队的示例代码 2022-09-03