Browse Source

支付宝App支付服务端逻辑

小柒2012 7 years ago
parent
commit
40d0378095

+ 2 - 0
src/main/java/com/itstyle/Application.java

@@ -13,6 +13,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter
  * 支付主控 
  * 支付主控 
  * 创建者 科帮网
  * 创建者 科帮网
  * 创建时间 2017年7月27日
  * 创建时间 2017年7月27日
+ * 启动   java -jar spring-boot-pay.jar --server.port=8886 
+ * linux 下 后台启动  nohup java -jar spring-boot-pay.jar --server.port=8886 & 
  */
  */
 @SpringBootApplication
 @SpringBootApplication
 @ImportResource({"classpath:spring-context-dubbo.xml"})
 @ImportResource({"classpath:spring-context-dubbo.xml"})

+ 8 - 0
src/main/java/com/itstyle/modules/alipay/controller/AliPayController.java

@@ -72,6 +72,14 @@ public class AliPayController {
 		}
 		}
 		return "alipay/qcpay";
 		return "alipay/qcpay";
     }
     }
+	@ApiOperation(value="app支付服务端")
+	@RequestMapping(value="appPay",method=RequestMethod.POST)
+    public String  appPay(Product product,ModelMap map) {
+		logger.info("app支付服务端");
+		String orderString  =  aliPayService.appPay(product);
+		map.addAttribute("orderString", orderString);
+		return "alipay/pay";
+    }
     /**
     /**
      * 支付宝支付回调(二维码、H5、网站)
      * 支付宝支付回调(二维码、H5、网站)
      * @Author  科帮网
      * @Author  科帮网

+ 11 - 0
src/main/java/com/itstyle/modules/alipay/service/IAliPayService.java

@@ -82,4 +82,15 @@ public interface IAliPayService {
 	 *
 	 *
 	 */
 	 */
 	String aliPayPc(Product product);
 	String aliPayPc(Product product);
+	/**
+	 * APP支付
+	 * @Author  科帮网
+	 * @param product
+	 * @return  String
+	 * @Date	2017年9月21日
+	 * 更新日志
+	 * 2017年9月21日  科帮网 首次创建
+	 *
+	 */
+	String appPay(Product product);
 }
 }

+ 31 - 0
src/main/java/com/itstyle/modules/alipay/service/impl/AliPayServiceImpl.java

@@ -13,11 +13,14 @@ import com.alibaba.dubbo.config.annotation.Service;
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayClient;
 import com.alipay.api.AlipayClient;
 import com.alipay.api.AlipayResponse;
 import com.alipay.api.AlipayResponse;
+import com.alipay.api.domain.AlipayTradeAppPayModel;
 import com.alipay.api.request.AlipayDataDataserviceBillDownloadurlQueryRequest;
 import com.alipay.api.request.AlipayDataDataserviceBillDownloadurlQueryRequest;
+import com.alipay.api.request.AlipayTradeAppPayRequest;
 import com.alipay.api.request.AlipayTradeCloseRequest;
 import com.alipay.api.request.AlipayTradeCloseRequest;
 import com.alipay.api.request.AlipayTradePagePayRequest;
 import com.alipay.api.request.AlipayTradePagePayRequest;
 import com.alipay.api.request.AlipayTradeWapPayRequest;
 import com.alipay.api.request.AlipayTradeWapPayRequest;
 import com.alipay.api.response.AlipayDataDataserviceBillDownloadurlQueryResponse;
 import com.alipay.api.response.AlipayDataDataserviceBillDownloadurlQueryResponse;
+import com.alipay.api.response.AlipayTradeAppPayResponse;
 import com.alipay.api.response.AlipayTradeCloseResponse;
 import com.alipay.api.response.AlipayTradeCloseResponse;
 import com.alipay.api.response.AlipayTradePrecreateResponse;
 import com.alipay.api.response.AlipayTradePrecreateResponse;
 import com.alipay.demo.trade.config.Configs;
 import com.alipay.demo.trade.config.Configs;
@@ -269,4 +272,32 @@ public class AliPayServiceImpl implements IAliPayService {
         }
         }
         return form;
         return form;
 	}
 	}
+	@Override
+	public String appPay(Product product) {
+		String orderString = Constants.FAIL;
+		// 实例化客户端
+		AlipayClient alipayClient = AliPayConfig.getAlipayClient();
+		// 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
+		AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
+		// SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
+		AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
+		model.setBody(product.getBody());
+		model.setSubject(product.getSubject());
+		model.setOutTradeNo(product.getOutTradeNo());
+		model.setTimeoutExpress("30m");
+		model.setTotalAmount(product.getTotalFee());
+		model.setProductCode("QUICK_MSECURITY_PAY");
+		request.setBizModel(model);
+		request.setNotifyUrl("商户外网可以访问的异步地址");
+		try {
+			// 这里和普通的接口调用不同,使用的是sdkExecute
+			AlipayTradeAppPayResponse response = alipayClient
+					.sdkExecute(request);
+			orderString  = response.getBody();//就是orderString 可以直接给客户端请求,无需再做处理。
+			//System.out.println(response.getBody());
+		} catch (AlipayApiException e) {
+			e.printStackTrace();
+		}
+		return orderString ;
+	}
 }
 }

+ 1 - 1
src/main/java/com/itstyle/modules/alipay/util/AliPayConfig.java

@@ -34,7 +34,7 @@ public final class AliPayConfig {
 		private  static AlipayClient alipayClient = new DefaultAlipayClient(
 		private  static AlipayClient alipayClient = new DefaultAlipayClient(
 													Configs.getOpenApiDomain(), Configs.getAppid(),
 													Configs.getOpenApiDomain(), Configs.getAppid(),
 													Configs.getPrivateKey(), PARAM_TYPE, CHARSET,
 													Configs.getPrivateKey(), PARAM_TYPE, CHARSET,
-													Configs.getAlipayPublicKey());
+													Configs.getAlipayPublicKey(),"RSA2");
 		
 		
 		private  static AlipayTradeService tradeService = new AlipayTradeServiceImpl.ClientBuilder().build();
 		private  static AlipayTradeService tradeService = new AlipayTradeServiceImpl.ClientBuilder().build();
     }
     }

+ 42 - 0
src/test/java/com/itstyle/test/AppAliPay.java

@@ -0,0 +1,42 @@
+package com.itstyle.test;
+
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.domain.AlipayTradeAppPayModel;
+import com.alipay.api.request.AlipayTradeAppPayRequest;
+import com.alipay.api.response.AlipayTradeAppPayResponse;
+import com.alipay.demo.trade.config.Configs;
+import com.itstyle.modules.alipay.util.AliPayConfig;
+/**
+ * 测试APP服务端逻辑
+ * 创建者 科帮网
+ * 创建时间	2017年9月21日
+ *
+ */
+public class AppAliPay{
+	public static void main(String[] args) {
+		Configs.init("E:\\zfbinfo.properties");
+		// 实例化客户端
+		AlipayClient alipayClient = AliPayConfig.getAlipayClient();
+		// 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
+		AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
+		// SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
+		AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
+		model.setBody("APP支付");
+		model.setSubject("APP支付");
+		model.setOutTradeNo("20179089");
+		model.setTimeoutExpress("30m");
+		model.setTotalAmount("100");
+		model.setProductCode("QUICK_MSECURITY_PAY");
+		request.setBizModel(model);
+		request.setNotifyUrl("https://blog.52itstyle.com");
+		try {
+			// 这里和普通的接口调用不同,使用的是sdkExecute
+			AlipayTradeAppPayResponse response = alipayClient
+					.sdkExecute(request);
+			System.out.println(response.getBody());// 就是orderString
+		} catch (AlipayApiException e) {
+			e.printStackTrace();
+		}
+	}
+}