diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/alipay/AliPayService.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/alipay/AliPayService.java new file mode 100644 index 00000000..f47a4648 --- /dev/null +++ b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/alipay/AliPayService.java @@ -0,0 +1,41 @@ +package net.lab1024.smartadmin.module.system.alipay; + +import com.alipay.api.AlipayClient; +import com.alipay.api.DefaultAlipayClient; +import com.alipay.api.domain.AlipayTradePrecreateModel; +import com.alipay.api.request.AlipayTradePrecreateRequest; +import com.alipay.api.response.AlipayTradePrecreateResponse; +import net.lab1024.smartadmin.module.system.alipay.alipayModel.AliPayEntity; +import net.lab1024.smartadmin.module.system.alipay.conf.AlipayConfig; +import org.springframework.stereotype.Service; + +import java.util.Map; +import java.util.UUID; + +@Service +public class AliPayService { + + public static String notify_url = "http://47.96.75.242:10086/smart-admin-api/royalcanin/updateOrderAliPay"; + + public String generateQRCode(AliPayEntity aliPayEntity) throws Exception { + AlipayTradePrecreateModel model = new AlipayTradePrecreateModel(); + model.setSubject("皇家宠物食品官方商城"); + model.setTotalAmount(aliPayEntity.getTotal_amount()); + model.setStoreId(UUID.randomUUID().toString()); + model.setTimeoutExpress("3m"); + model.setOutTradeNo(aliPayEntity.getOut_trade_no()); + model.setBody(aliPayEntity.getBody()); + model.setGoodsDetail(aliPayEntity.getGoodsDetail()); + AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); + request.setBizModel(model); + request.setNotifyUrl(notify_url); + AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type); + AlipayTradePrecreateResponse alipayTradePrecreateResponse = alipayClient.execute(request); + if (alipayTradePrecreateResponse.isSuccess()) { + String code = alipayTradePrecreateResponse.getQrCode(); + return code; + } else { + throw new RuntimeException("支付宝生成二维码失败"); + } + } +} diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/alipay/AlipayController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/alipay/AlipayController.java index 0aa13e15..5c5500db 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/alipay/AlipayController.java +++ b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/alipay/AlipayController.java @@ -33,8 +33,6 @@ import java.util.UUID; @RestController public class AlipayController { - @Autowired - private GoodService goodService; public static String notify_url = ""; @@ -42,7 +40,7 @@ public class AlipayController { * @Description: 前往支付宝第三方网关进行支付 */ - @RequestMapping("royalcanin/aliPayUnifiedOrder") + @PostMapping("royalcanin/aliPayUnifiedOrder") public void code(@RequestBody AliPayEntity aliPayEntity, HttpServletResponse response) throws Exception{ //--------------------------------------- diff --git a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/OrderController.java b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/OrderController.java index 73654111..da769da8 100644 --- a/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/OrderController.java +++ b/smart-admin-service/smart-admin-api/src/main/java/net/lab1024/smartadmin/module/system/royalcanin/good/OrderController.java @@ -1,12 +1,16 @@ package net.lab1024.smartadmin.module.system.royalcanin.good; +import com.alipay.api.internal.util.AlipaySignature; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import net.lab1024.smartadmin.common.anno.OperateLog; import net.lab1024.smartadmin.common.domain.ResponseDTO; import net.lab1024.smartadmin.common.heartbeat.StringUtil; import net.lab1024.smartadmin.constant.SwaggerTagConst; +import net.lab1024.smartadmin.module.system.alipay.AliPayService; +import net.lab1024.smartadmin.module.system.alipay.alipayModel.AliPayEntity; +import net.lab1024.smartadmin.module.system.alipay.conf.AlipayConfig; import net.lab1024.smartadmin.module.system.qrcode.QRCodeUtil; import net.lab1024.smartadmin.module.system.royalcanin.good.constant.OrderResponseCodeConst; import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrdersEntity; @@ -24,9 +28,7 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.util.List; -import java.util.Map; -import java.util.SortedMap; +import java.util.*; @Api(tags = {SwaggerTagConst.Admin.MANAGER_MALL_API}) @OperateLog @@ -39,6 +41,9 @@ public class OrderController { @Autowired private WxpayService wxpayService; + @Autowired + private AliPayService aliPayService; + @ApiOperation(value = "微信支付订单", notes = "生成订单") @PostMapping("royalcanin/generateOrderWX") public ResponseDTO generateOrderWX(@RequestBody List ordersEntityList, HttpServletResponse response) throws Exception { @@ -76,7 +81,7 @@ public class OrderController { @ApiOperation(value = "更新订单", notes = "更新订单") - @RequestMapping(value = "royalcanin/updateOrderWX",method = RequestMethod.POST) + @PostMapping(value = "royalcanin/updateOrderWX") public void updateOrder(HttpServletRequest request, HttpServletResponse response){ wxpayService.orderCallBack(request,response); } @@ -88,4 +93,65 @@ public class OrderController { } + @ApiOperation(value = "支付宝支付订单", notes = "生成订单") + @PostMapping("royalcanin/generateOrderAlipay") + public ResponseDTO generateOrderAliPay(@RequestBody List ordersEntityList, HttpServletResponse response) throws Exception { + StringBuffer productId = new StringBuffer(); + StringBuffer productName = new StringBuffer(); + String memberId = ""; + String mobile = ""; + int buyCount = 0; + double total_fee = 0 ; + AliPayEntity aliPayEntity = new AliPayEntity(); + OrdersEntity ordersEntity = new OrdersEntity(); + for (OrdersEntity ordersEntitys:ordersEntityList) { + productId.append(ordersEntitys.getProductId()+","); + productName.append(ordersEntitys.getProductName()+","); + total_fee = total_fee + Double.parseDouble(ordersEntitys.getPayAmount())*ordersEntitys.getBuyCount(); + memberId = ordersEntitys.getMemberId(); + mobile = ordersEntitys.getPhoneNumber(); + buyCount = buyCount + ordersEntitys.getBuyCount(); + } + ordersEntity.setProductId(productId.substring(0,productId.length()-1)); + ordersEntity.setProductName(productName.substring(0,productName.length()-1)); + ordersEntity.setOrderAmount(StringUtil.toString(total_fee)); + ordersEntity.setMemberId(memberId); + ordersEntity.setPhoneNumber(mobile); + ordersEntity.setBuyCount(buyCount); + ordersEntity.setPayType("2"); + if(orderService.generateOrder(ordersEntity) == 1){ + aliPayEntity.setProduct_code(ordersEntity.getProductId()); + aliPayEntity.setTotal_amount(StringUtil.toString(total_fee)); + aliPayEntity.setOut_trade_no(ordersEntity.getOrderNo()); + QRCodeUtil.createCodeToOutputStream(aliPayService.generateQRCode(aliPayEntity), response.getOutputStream()); + } + return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_FAIL); + } + + @PostMapping("royalcanin/updateOrderAliPay") + public String alipayNotify(HttpServletRequest request) throws Exception { +// 获取支付宝的请求信息 + Map map = new HashMap<>(); + Map requestParams = request.getParameterMap(); + if(requestParams.isEmpty()) { + return "failure"; + } +// 将 Map 转为 Map + for (Iterator 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"; + } }