Spring Boot对接支付宝支付API

1,671 阅读2分钟
private JSONObject createAliPayOrderNew(T_Goods_Order_Pay goodsOrderPay) {
    logger.info("---------------------------------调用支付宝支付接口!");
    // 参考url:https://docs.open.alipay.com/54/106370/
    // url
    String aliPayUrl = systemConfigService.getSystemConfigValue("AliPayUrl");
    logger.info("---------------------------------支付url:" + aliPayUrl);
    // 私钥
    String aliPayPrivateSecret = systemConfigService.getSystemConfigValue("AliPayPrivateSecret");
    logger.info("---------------------------------支付私钥:" + aliPayPrivateSecret);
    // appId
    String aliPayAppId = systemConfigService.getSystemConfigValue("AliPayAppId");
    logger.info("---------------------------------支付appid:" + aliPayAppId);
    // 回调地址
    String aliPayNotifyUrl = systemConfigService.getSystemConfigValue("AliPayNotifyUrl");
    logger.info("---------------------------------支付回调url:" + aliPayNotifyUrl);

    CertAlipayRequest certAlipayRequest = new CertAlipayRequest();
    certAlipayRequest.setServerUrl(aliPayUrl);
    certAlipayRequest.setAppId(aliPayAppId);
    certAlipayRequest.setPrivateKey(aliPayPrivateSecret);
    certAlipayRequest.setFormat("json");
    certAlipayRequest.setCharset("utf-8");
    certAlipayRequest.setSignType("RSA2");

    // 应用公钥证书
    certAlipayRequest.setCertPath(FileUtil.createFile(appCrt));
    logger.info("---------------------------------应用公钥证书:" + certAlipayRequest.getCertPath());
    // 支付宝公钥证书
    certAlipayRequest.setAlipayPublicCertPath(FileUtil.createFile(aliPayCrt));
    logger.info("---------------------------------支付宝公钥证书:" + certAlipayRequest.getAlipayPublicCertPath());
    // 根证书
    certAlipayRequest.setRootCertPath(FileUtil.createFile(rootCrt));
    logger.info("---------------------------------支付宝根证书:" + certAlipayRequest.getRootCertPath());
    
    JSONObject obj = createAliPayAppOrder(goodsOrderPay, aliPayNotifyUrl, certAlipayRequest);
    
    logger.info("---------------------------------退出支付宝支付接口!");
    return obj;
}
// 服务器下jar发布只能通过文件流生成临时文件
public static String createFile(Resource resource) {
    // 获取模板下的路径 
    String filePath = File.separator + "src" + File.separator
            + "main" + File.separator + "resources"
            + File.separator + "static/";
    filePath = filePath.replace("/", File.separator);
    // 检查项目运行时的src下的对应路径
    filePath = filePath + resource.getFilename();
    File file = new File(filePath);
    if (file.isFile() && file.exists()) {
        return filePath;
    }
    // 在服务器中将文件流取出来生成文件
    try {
        FileUtils.copyInputStreamToFile(resource.getInputStream(), file);
    } catch (IOException e) {
        logger.info(e.getMessage());
    }
    return filePath;
}

1、APP支付

private JSONObject createAliPayAppOrder(T_Goods_Order_Pay goodsOrderPay, String aliPayNotifyUrl, CertAlipayRequest certAlipayRequest) {
    JSONObject obj = new JSONObject();
    obj.put("code", 1);
    obj.put("msg", "支付失败!");
    // 业务参数
    AlipayClient alipayClient;
    AlipayTradeAppPayResponse response;
    AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
    AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
    // 商品的标题/交易标题/订单标题/订单关键字等
    model.setSubject(goodsOrderPay.getRemark());
    // 商户网站唯一订单号
    model.setOutTradeNo(goodsOrderPay.getId());
    // 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
    model.setTotalAmount(goodsOrderPay.getTotalPrice().setScale(2).toPlainString());
    logger.info("---------------------------------支付信息:" + JSON.toJSONString(model));
    request.setBizModel(model);
    request.setNotifyUrl(aliPayNotifyUrl);
    try {
        alipayClient = new DefaultAlipayClient(certAlipayRequest);
        response = alipayClient.sdkExecute(request);
        logger.info("---------------------------------支付返回信息:" + JSON.toJSONString(response));
        if(response.isSuccess()) {
            logger.info("---------------------------------支付宝支付成功!");
            obj.put("orderNo", goodsOrderPay.getId());
            // 前端只需要body
            obj.put("body", response.getBody());
            obj.put("code", 0);
            obj.put("msg", "支付成功!");
        }else {
            logger.info("---------------------------------支付宝支付失败!");
            obj.put("msg", "支付失败!");
            logger.info("---------------------------------msg:" + response.getMsg());
        }
        return obj;
    } catch (AlipayApiException e) {
        logger.info("---------------------------------支付宝支付失败!");
        obj.put("msg", "支付失败!");
        logger.info("---------------------------------msg:" + e.getErrMsg());
    }
    return obj;
}

2、小程序支付

private JSONObject createAliPaySmallAppOrder(T_Goods_Order_Pay goodsOrderPay, String aliPayNotifyUrl, CertAlipayRequest certAlipayRequest) {
    JSONObject obj = new JSONObject();
    obj.put("code", 1);
    obj.put("msg", "支付失败!");
    // 业务参数
    AlipayClient alipayClient = null;
    AlipayTradeCreateResponse response = null;
    AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();
    request.setNotifyUrl(alipayNotifyUrl);
    request.setBizContent("{" +
	        "\"out_trade_no\":\"" + goodsOrderPay.getId() + "\"," +	// 自定义订单编号
	        "\"total_amount\":\"" + goodsOrderPay.getTotalPrice().setScale(2).toPlainString() + "\"," +	// 金额
	        "\"subject\":\"" + goodsOrderPay.getRemark() + "\"," +  // 备注
	        "\"buyer_id\":\"" + goodsOrderPay.getOpenid() + "\"" +	// openid
	        "}");
	logger.info("---------------------------------支付信息:" + JSON.toJSONString(request));
    try {
    	alipayClient = new DefaultAlipayClient(certAlipayRequest);
    	response = alipayClient.certificateExecute(request);
    	logger.info("---------------------------------支付返回信息:" + JSON.toJSONString(response));
    	if(response.isSuccess() && "10000".equals(response.getCode())) {
    		returnMap.put("ordno", tmorder.getOrdno());
    		returnMap.put("tradeNO", response.getTradeNo());
    	    returnMap.put("code", 0);
    		returnMap.put("msg", "支付成功!");
    		logger.info("---------------------------------支付宝支付成功!");
    	}else {
    		returnMap.put("code", 1);
    		returnMap.put("msg", response.getMsg());
    		logger.info("---------------------------------支付宝支付失败!");
    	}
    } catch (AlipayApiException e) {
        returnMap.put("code", 1);
    	returnMap.put("msg", "支付失败!");
    	logger.info("---------------------------------支付宝支付失败!");
    	logger.info("---------------------------------msg:" + e.getErrMsg());
    }
    return obj;
}