支付宝支付
- 首先安排支付宝API网址:支付宝开放平台
- 接口开发
@Value(value = "${zfb.appid}")
private String zappid;
@Value(value = "${zfb.pubKey}")
private String pubKey;
@Value(value = "${zfb.priKey}")
private String priKey;
@Override
public JsonResponse zfbPay(Order tOrder) throws AlipayApiException {
//构建
AlipayClient client=new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",zappid,priKey,"json","UTF-8",pubKey,"RSA2");
//设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
//
alipayRequest.setReturnUrl("https://www.baidu.com/");
alipayRequest.setNotifyUrl("http://.../api/returnPay/aliReturnPay");
// 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
//例:String timeout_express = "1c";
Map<String, String> payMap = new HashMap<>();
payMap.put("out_trade_no",order.getOrderNo()); //订单号
payMap.put("product_code", "FAST_INSTANT_TRADE_PAY"); //产品code码
payMap.put("total_amount",order.getPayment()+""); //支付金额
payMap.put("subject",body.toString()); //一般是商品名称
payMap.put("body","养不起"); //内容
payMap.put("timeout_express","30m"); //过期时间
alipayRequest.setBizContent(JSON.toJSONString(payMap));
//请求
String result = client.pageExecute(alipayRequest).getBody().replace('\"', '\'').replace('\n', ' ');
//返回结果
return JsonResponse.SUCCESS(result);
}
3. 支付成功通知接口开发
这个接口对应支付接口的NotifyUrl参数,把我们开发的支付成功通知接口写入到NotifyUrl里,当支付成功后,就会调用参数里的方法,当方法响应“success”时,停止调用,否则会隔一段时间就调用一下方法
controller
@Controller
@RequestMapping("/api/returnPay")
public class ReturnController {
@Autowired
private PayService payService;
@PostMapping("/aliReturnPay")
public void returnPay(HttpServletResponse response, AliReturnBean aliReturnBean) throws AlipayApiException, IOException {
payService.returnSuccess(aliReturnBean,response);
}
}
service实现类
@Override
public void returnSuccess(AliReturnBean aliReturnBean, HttpServletResponse response) throws IOException {
log.info("++++++++++++++++++++++++++++++++++++++"+aliReturnBean.getOut_trade_no());
//打印的就是调用支付接口时传的out_trade_no参数
//中间进行一些列业务操作......
//最后响应一个success,支付宝就不会再调用你的接口了
response.getWriter().write("success");
}
- 需注意的点(避免踩坑)*****
(1)支付宝支付是跳转到支付宝的收款页面进行支付的,支付成功后,会自动根据调用支付宝支付时的ReturnUrl参数进行跳转,回到自己定义的页面,在这里不要钻牛角尖,非要弹个二维码出来,至少我是不太懂,也因此研究好几天,但结果不尽人意,如果有大牛有方法可以给我这个小菜鸟分享一下,感谢!