springboot java 接通支付宝支付功能 实现支付 退款 程序订单是否已支付 功能 直接用!!!!!!
首先访问支付宝进行登录开放平台https://open.alipay.com/api操作完成以后应用私钥 就是后面要填写的商家私钥支付宝公钥就是后面类里面要写入的公钥设置以后点击沙盒账号首先建两个 BOAliPayBean.java和refundBean.java一个用来获取下单 一个用来退款AliPayBean.javarefundBean.javaService 层 和实现类实现类在然后就是C
·
首先去支付宝申请一个 支付宝沙盒进行模拟测试
首先访问支付宝进行登录开放平台
https://open.alipay.com/api
登录以后点击控制台


APPID就是后面代码需要填写的appid 点击系统默认秘钥的进行启动公钥模式
操作完成以后

应用私钥 就是后面要填写的商家私钥
支付宝公钥就是后面类里面要写入的公钥
设置以后点击沙盒账号
1为收款人的账户余额 2为你进行支付的时候填写的账号 3为支付密码 4为支付人的账号余额 可以点击充值 随便写
下面上·代码直接复制 启动就能使用 使用不了找我私信 后续会继续完善此代码 记得点赞收藏加关注噢!!!!!
首先建两个 BO AliPayBean.java 和 refundBean.java 一个用来获取下单 一个用来退款
AliPayBean.java
/**
* 支付宝支付实体
* meikongli
* 2022年12月8日11:41:24
*/
@Data
public class AliPayBean {
/**
* 商户订单号
*/
private String out_trade_no;
/**
* 订单名称
*/
private String subject;
/**
* 付款金额
*/
private String total_amount;
/**
* 商品描述
*/
private String body;
/**
* 超时时间参数
*/
private String timeout_express = "60m";
/**
* 产品编号
*/
private String product_code = "FAST_INSTANT_TRADE_PAY";
}
refundBean.java
/**
* 支付宝退款实体
* meikongli
* 2022年12月8日11:41:24
*/
@Data
public class refundBean {
/**
* 商户订单号
*/
private String out_trade_no;
/**
* 支付宝交易号
*/
private String trade_no;
/**
* 支付宝交易状态
*/
private String trade_status;
/**
* 付款金额
*/
private String total_amount;
}
Service 层 和实现类
/**
* 支付接口
* meikongli
* 2022年12月8日
*/
public interface PayService {
//支付接口
String aliPay(AliPayBean aliPayBean) throws AlipayApiException, AlipayApiException;
//退款接口
String refund(refundBean refund) throws AlipayApiException, AlipayApiException;
/**
* 交易查询
* @param outTradeNo 订单编号(唯一)
*/
String query(String outTradeNo) throws AlipayApiException;
}
实现类
/**
* 支付服务接口
* meikongli
* 2022年12月8日
*/
@Service("payService")
public class PayServiceImpl implements PayService {
/**日志对象*/
private static final Logger logger = LoggerFactory.getLogger(PayServiceImpl.class);
private final String format = "JSON";
/**
* appId
*/
// @Value("${app.appId}")
private String appId = "202100";
/**
* 商户私钥
*/
// @Value("${app.privateKey}")
private String privateKey = "xxx";
/**
* 支付宝公钥
*/
// @Value("${app.publicKey}")
private String publicKey = "xxx";
/**
* 服务器异步通知页面路径,需要公网能访问到
*/
// @Value("${app.notifyUrl}")
private String notifyUrl ="http://localhost:8080/ali/alpaySuccess";
/**
* 服务器同步通知页面路径,需要公网能访问到
*/
// @Value("${app.returnUrl}")
private String returnUrl ="http://localhost:8080/ali/alpaySuccess";
/**
* 签名方式
*/
// @Value("${app.signType}")
private String signType = "RSA2";
/**
* 字符编码格式
*/
// @Value("${app.charset}")
private String charset = "utf-8";
/**
* 支付宝网关
*/
// @Value("${app.gatewayUrl}")
private String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
AlipayClient alipayClient = new DefaultAlipayClient(
gatewayUrl, appId, privateKey, format, charset, publicKey, signType);
@Override
public String aliPay(AliPayBean aliPayBean) throws AlipayApiException {
/* 订单号:outTradeNo
订单名称:subject
付款金额:totalAmount
商品描述:body*/
logger.info("调用支付服务接口...");
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(returnUrl);
alipayRequest.setNotifyUrl(notifyUrl);
alipayRequest.setBizContent(JSON.toJSONString(aliPayBean));
logger.info("封装请求支付宝付款参数为:{}", JSON.toJSONString(alipayRequest));
alipayRequest.getBizContent();
String result = alipayClient.pageExecute(alipayRequest).getBody();
logger.info("请求支付宝付款返回参数为:{}", result);
return result;
}
@Override
public String refund(refundBean refund) throws AlipayApiException, AlipayApiException {
//设置请求参数
AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest();
//商户订单号,必填
String out_trade_no = new String(refund.getOut_trade_no());
//需要退款的金额,该金额不能大于订单金额,必填
String refund_amount = new String(refund.getTotal_amount());
//标识一次退款请求,同一笔交易多次退款需要保证唯一,如需部分退款,则此参数必传
String out_request_no = new String(UUID.randomUUID().toString());
alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","
+ "\"refund_amount\":\""+ refund_amount +"\","
+ "\"out_request_no\":\""+ out_request_no +"\"}");
//请求
String result = alipayClient.execute(alipayRequest).getBody();
return result;
}
/**
* 交易查询--指定
*
* @param outTradeNo 订单编号(唯一)
*/
@Override
public String query(String outTradeNo) throws AlipayApiException {
AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();
alipayRequest.setBizContent("{\"out_trade_no\":\""+ outTradeNo +"\","
+ "\"trade_no\":\"\"}");
//转换格式
String result = alipayClient.execute(alipayRequest).getBody();
return result;
}
}
在然后就是Controller
/**
*支付宝公共接口调用方法
* meikongli
* 2022年12月8日
*/
@Controller
@RequestMapping("/ali")
public class OrderController {
/**日志对象*/
private static final Logger logger = LoggerFactory.getLogger(OrderController.class);
@Autowired
private PayService payService;
@RequestMapping(value = "/pay", produces = { "text/html;charset=UTF-8" })
@ResponseBody
public String alipay(String outTradeNo, String subject, String totalAmount, String body,HttpServletResponse response) throws AlipayApiException {
logger.info("订单号为{},订单名称为{},付款金额为{},商品描述{}", outTradeNo, subject, totalAmount, body);
AliPayBean alipayBean = new AliPayBean();
alipayBean.setOut_trade_no(outTradeNo);
alipayBean.setSubject(subject);
alipayBean.setTotal_amount(totalAmount);
alipayBean.setBody(body);
return payService.aliPay(alipayBean);
}
@RequestMapping(value = "/refund", produces = { "text/html;charset=UTF-8" })
@ResponseBody
public String refund(String outTradeNo,String totalAmount,HttpServletResponse response) throws AlipayApiException {
logger.info("订单号为{},退款金额为{}", outTradeNo, totalAmount);
String isok = payService.query(outTradeNo);
refundBean refundbean = new refundBean();
refundbean.setOut_trade_no(outTradeNo);
refundbean.setTotal_amount(totalAmount);
return payService.refund(refundbean);
}
@RequestMapping(value = "/query", produces = { "text/html;charset=UTF-8" })
@ResponseBody
public String refqueryund(String outTradeNo,HttpServletResponse response) throws AlipayApiException {
logger.info("订单号为{}", outTradeNo);
return payService.query(outTradeNo);
}
@RequestMapping(value = "/alpaySuccess", produces = { "text/html;charset=UTF-8" })
@ResponseBody
public String alpaySuccess(){
return "支付成功";
}
@RequestMapping(value = "/index")
public String payCoin(){
return "index.html";
}
}
这样就完成啦 后续更换成上线商家的真正数据就行啦 记得点赞关注加收藏!!!!!!!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)