com.alipay.sdk
alipay-easysdk
2.2.0
2.编写Aliconfig
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import org.springframework.stereotype.Component;
@Component
public class AlipayConfig {
// 1. 设置参数(全局只需设置一次)
static {
Factory.setOptions(getOptions());
}
private static Config getOptions() {
Config config = new Config();
config.protocol = "https";
// 沙箱环境修改为 openapi.alipaydev.com
config.gatewayHost = "openapi.alipaydev.com";
config.signType = "RSA2";
config.appId = "2016100200644885";
// 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中
config.merchantPrivateKey = "XXX";
//注:如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可
config.alipayPublicKey = "XXX";
//可设置异步通知接收服务地址(可选)(该地址需要外网能够访问)
config.notifyUrl = "";
return config;
}
}
3.编写service
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.util.ResponseChecker;
import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
@Service
public class AlipayService {
public String toPay(String subject, BigDecimal money,String generateTradeNo) throws Exception {
// 最后一个参数是支付完成之后跳转到的界面, 一般为项目的首页
AlipayTradePagePayResponse pay = Factory.Payment.Page().pay(subject, this.generateTradeNo(),
String.valueOf(money), "http://localhost:8080/ali/paySuccess?payType=1&orderNo="+ generateTradeNo);
String payForm = null;
if (ResponseChecker.success(pay)) {
payForm = pay.getBody();
}
return payForm;
}
private String generateTradeNo() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
String tradeNo = LocalDateTime.now(ZoneOffset.of("+8")).format(formatter);
return tradeNo;
}
}
4.接口调用
4.1 支付接口
@GetMapping("/topay")
@ResponseBody
public String toPay(HttpServletRequest request, @RequestParam("orderNo") String orderNo, HttpSession httpSession, @RequestParam("payType") int payType) throws Exception {
NewBeeMallUserVO user = (NewBeeMallUserVO) httpSession.getAttribute(Constants.MALL_USER_SESSION_KEY);
NewBeeMallOrder newBeeMallOrder = newBeeMallOrderService.getNewBeeMallOrderByOrderNo(orderNo);
request.setAttribute("orderNo", orderNo);
request.setAttribute("totalPrice", newBeeMallOrder.getTotalPrice());
if (payType == 1) {
String form = alipayService.toPay("商品购买", new BigDecimal(newBeeMallOrder.getTotalPrice()),orderNo);
return form;
} else {
return "mall/wxpay";
}
}
4.2 支付成功
@GetMapping("/ali/paySuccess")
public String aliPaySuccess(@RequestParam("orderNo") String orderNo, @RequestParam("payType") int payType) {
newBeeMallOrderService.paySuccess(orderNo, payType);
return "redirect:/orders/" + orderNo;
}
4.3 前端
window.location.href = '/selectPayType?orderNo=' + 单号;



