자바 에서 Spring Boot 알 리 페 이 스 스 캔 결제 및 결제 리 셋 실현 코드

프롤로그:최근 알 리 페 이 결제 기능 을 개발 하여 정리 하여 공유 합 니 다.
공식 문서:https://opendocs.alipay.com/apis
알 리 페 이 모래 상자 주소:https://openhome.alipay.com/platform/appDaily.htm?tab=info
알 리 페 이 결제 절차:
준비 작업:알 리 페 이 샌 드 박스 데이터 획득(APPID,알 리 페 이 게 이 트 웨 이,RSA 2 비밀,샌 드 박스 결제 계 정 등)
SpringBoot 통합,자바 코드 로 결제 요청
알 리 페 이 는 결제 요청 을 받 은 후 HTML 코드 세 션 을 되 돌려 전단 에 QR 코드 를 보 여 줍 니 다.
스 캔 결제 성공 후 알 리 페 이 발송 동기 화,비동기 알림 요청,동기 화,비동기 알림 경 로 는 설정 파일 에서 설정 할 수 있 습 니 다.
비동기 알림 결 과 를 받 은 후에 검 사 를 하고 검 사 를 통과 하 며 성공 정 보 를 되 돌려 알 리 는 알 리 페 이 가 비동기 알림 을 하지 않 습 니 다.
이때 알 리 페 이 결제 절차 가 완료 되 고 알 리 페 이 조회 인 터 페 이 스 를 호출 하여 결제 성공 을 확인 합 니 다.
1.알 리 페 이 샌 드 박스 데이터 획득
상기 샌 드 박스 주 소 를 열 고 샌 드 박스 설정 을 가 져 와 다음 그림 정 보 를 보십시오.
在这里插入图片描述
2.SpringBoot 를 통합 하여 자바 코드 를 사용 하여 지불 요청 을 합 니 다.
1.pom.xml 파일 에 알 리 페 이 의존 추가

<!--       -->
		<dependency>
			<groupId>com.alipay.sdk</groupId>
			<artifactId>alipay-sdk-java</artifactId>
			<version>3.7.26.ALL</version>
		</dependency>
2.프로젝트 에 알 리 페 이 도구 류 를 새로 만 듭 니 다.

public class AlipayConfig {
	// ↓↓↓↓↓↓↓↓↓↓            ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

	//   ID,  APPID,        APPID       
	public static String app_id = "";

	//     ,  PKCS8  RSA2  
	public static String merchant_private_key = "";

	//      ,    :https://openhome.alipay.com/platform/keyManage.htm   APPID       。
	public static String alipay_public_key = "";

	//              http://       ,   ?id=123       ,          
	
	//                 ,         
	public static String notify_url = "http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp"; 
	
	//               http://       ,   ?id=123       ,          
	
	// TODO                 ,         
	public static String return_url = "http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";	

	//     
	public static String sign_type = "RSA2";

	//       
	public static String charset = "UTF-8";

	//      
	public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";

	//     
	public static String log_path = "C:\\";

	// ↑↑↑↑↑↑↑↑↑↑            ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

	/**
	 *    ,    (     ,             )
	 * 
	 * @param sWord            
	 */
	public static void logResult(String sWord) {
		FileWriter writer = null;
		try {
			writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis() + ".txt");
			writer.write(sWord);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (writer != null) {
				try {
					writer.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}
3.서비스 정의

public interface AlipayService {

  /**
   *     
   * @param outTradeNo      (  )
   * @param totalAmount      
   * @param subject        
   */
  String goPay(String outTradeNo,BigDecimal totalAmount,String subject) throws Exception;
  
  /**
   *     
   * @param outTradeNo     (  )
   */
  String query(String outTradeNo) throws AlipayApiException;
  
  /**
   *     
   * @param outTradeNo    (  )
   */
  String close(String outTradeNo) throws AlipayApiException;
}
4.ServiceImpl 실현,지급 청구,거래 조회 등

public class AlipayServiceImpl implements AlipayService {

	@Autowired
	private RechargeDetailService rechargeDetailService;

	@Override
	public String goPay(String outTradeNo, BigDecimal totalAmount, String subject) throws Exception {

		AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,
				AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key,
				AlipayConfig.sign_type);

		AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();

		/**     ,     ,       */
		alipayRequest.setReturnUrl(AlipayConfig.return_url);
		/**     ,     ,          */
		alipayRequest.setNotifyUrl(AlipayConfig.notify_url);

		alipayRequest.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\"," + "\"total_amount\":\"" + totalAmount
				+ "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"  \"," + "\"timeout_express\":\"15m\","
				+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

		/**      */
		String form = "";

		form = alipayClient.pageExecute(alipayRequest).getBody();

		return form;

	}
	@Override
	public String query(String outTradeNo) throws AlipayApiException {
		AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,
				AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key,
				AlipayConfig.sign_type);
		AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();
		/**      */
		alipayRequest.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\"," + "\"trade_no\":\"" + "" + "\"}");
		/**      */
		String result = alipayClient.execute(alipayRequest).getBody();
		return result;
	}

	@Override
	public String close(String outTradeNo) throws AlipayApiException {
		AlipayTradeCloseRequest alipayRequest = new AlipayTradeCloseRequest();
		AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id,
				AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key,
				AlipayConfig.sign_type);
		alipayRequest.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\"," + "\"trade_no\":\"" + "" + "\"}");

		String result = alipayClient.execute(alipayRequest).getBody();

		return result;
	}
}
5、알 리 페 이 컨트롤 러 생 성

public class AlipayController {

  @Autowired
  private AlipayService alipayService;
  
  /**
   *     
   */
  @GetMapping("goPay")
  public Map<Object, Object> goPay() throws Exception{
    /**      ,      */
    String outTradeNo = "202101010001";
    BigDecimaltotalAmount = new BigDecimal(10000);
    String subject = "  12";
    
    String pay = alipayService.goPay(outTradeNo, totalAmount, subject);
    
    Map<Object, Object> pays = new HashMap<>();
    pays.put("pay", pay);
    
    return pays;
  }
  
  /**
   *     
   */
  @PostMapping("aipayQuery")
  public Result<Object> alipayQuery() throws Exception{
    /**       */
    String outTradeNo = "13123";
    
    String query = alipayService.query(outTradeNo);
    
    Object json = JSONObject.toJSON(query);
    
    /*JSONObject jObject = new JSONObject();
    jObject.get(query);*/
    return Result.success(json);
  }
  
  /**
   *     
   * @throws AlipayApiException 
   */
  @PostMapping("alipayclose")
  public Result<Object> alipaycolse() throws AlipayApiException{
    
    /**     */
    String outTradeNo = "13123";
    
    String close = alipayService.close(outTradeNo);
    
    return Result.success(close);
  }
  /**
	 *         
	 * 
	 * @param request
	 * @return String
	 * @throws AlipayApiException
	 * @throws ParseException
	 */
	@PostMapping("/callBack")
	public String alipayNotify(HttpServletRequest request) throws Exception {

		//           
		Map<String, String> map = new HashMap<>();
		Map<String, String[]> requestParams = request.getParameterMap();
		if(requestParams.isEmpty()) {
			return "failure";
		}
		//   Map<String,String[]>    Map<String,String>
		for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
			String name = iter.next();
			String[] values = requestParams.get(name);
			String valueStr = "";
			for (int i = 0; i < values.length; i++) {
				valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
			}
			map.put(name, valueStr);
		}
		//   
		boolean signVerified = AlipaySignature.rsaCheckV1(map, AlipayConfig.alipay_public_key, AlipayConfig.charset,
				AlipayConfig.sign_type);
		//     
		if (signVerified) {
			//         
		}
		return "failure";
	}
}
이로써 SpringBoot 통합 알 리 페 이 결제 가 완료 되 었 습 니 다.
자바 에서 Spring Boot 알 리 페 이 결제 및 결제 리 셋 실현 코드 에 관 한 글 은 여기까지 소개 되 었 습 니 다.더 많은 Spring Boot 알 리 페 이 결제 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 저 희 를 많이 응원 해 주세요!

좋은 웹페이지 즐겨찾기