1. 程式人生 > >Java 支付寶之APP支付服務端 (二)

Java 支付寶之APP支付服務端 (二)

/**
	 * 支付寶請求交易
	 * 
	 * @param bean
	 * @return
	 */
	@RequestMapping(value=Route.Payment.ALI_PAY,method=RequestMethod.POST)
	@ResponseBody
	public Response pay(@PathVariable("userId") int userId,@PathVariable("amount") String amount) {
		log.info("infoMsg:--- 支付寶請求交易開始");
		Response resp = this.getReponse();
		try {
			//----------------請求引數------------------//
			ThirdPayBean payBean = thirdPayService.findByPayId(18);
			Assert.notNull(payBean);
			String notify_url = payBean.getReturn_url();
			String APP_ID = payBean.getMer_no();	//支付寶商戶號
			String mer_key = payBean.getMer_key();	//支付寶公鑰|商戶私鑰
			String public_key = mer_key.split("|")[0];
			String private_key = mer_key.split("|")[1];
			String ALIPAY_PUBLIC_KEY = MD5_UTIL.convertMD5(MD5_UTIL.convertMD5(public_key));
			String APP_PRIVATE_KEY = MD5_UTIL.convertMD5(MD5_UTIL.convertMD5(private_key));
			String passbackParams = userId + "|" + "18";	//拓展引數
			
			//例項化客戶端
			AlipayClient alipayClient = new DefaultAlipayClient(alipay_Url, APP_ID, APP_PRIVATE_KEY, "JSON", "UTF-8", ALIPAY_PUBLIC_KEY, "RSA2");
			//例項化具體API對應的request類,類名稱和介面名稱對應,當前呼叫介面名稱:alipay.trade.app.pay
			AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
			//SDK已經封裝掉了公共引數,這裡只需要傳入業務引數。以下方法為sdk的model入參方式(model和biz_content同時存在的情況下取biz_content)。
			AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
			model.setSubject("循心科技");
			model.setOutTradeNo(OrderGeneratedUtils.getOrderNo());
			model.setTimeoutExpress("30m");
			model.setTotalAmount(amount);
			model.setProductCode("QUICK_MSECURITY_PAY");
			model.setPassbackParams(passbackParams);
			request.setBizModel(model);
			request.setNotifyUrl(notify_url);
	        //這裡和普通的介面呼叫不同,使用的是sdkExecute
	        AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
//	        System.out.println(response.getBody());//就是orderString 可以直接給客戶端請求,無需再做處理。
	        //生成賬單
	        boolean result = rechargeRecordService.generatedBills(response.getBody(),passbackParams);
	        if(!result) {
	        	log.error("訂單生成失敗");
	        }
	        log.info("infoMsg:--- 支付寶請求交易結束");
	        return resp.success(response.getBody());
	    } catch (AlipayApiException e) {
	    	log.error("errorMsg:--- 支付寶請求交易失敗" + e.getMessage());
	    	return resp.failure(e.getMessage());
		}
	}