现在maven中央仓库已经能下到支付宝的SDK了,先添加依赖,ZxingUtils需要复制过来
1 2 3 4 5 | < dependency > < groupId >com.alipay.sdk</ groupId > < artifactId >alipay-sdk-java</ artifactId > < version >3.0.0</ version > </ dependency > |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | public ServerResponse pay(Long orderNo, Integer userId, String path) throws AlipayApiException { Map<String, String> resultMap = Maps.newHashMap(); Order order = orderMapper.selectByUserIdAndOrderNo(userId, orderNo); if (order == null ) { return ServerResponse.createByErrorMessage( "用户没有该订单" ); } resultMap.put( "orderNo" , String.valueOf(order.getOrderNo())); String outTradeNo = String.valueOf(order.getOrderNo()); String subject = new StringBuilder( "mmall扫码支付,订单号:" ).append(orderMapper).toString(); String totalAmount = order.getPayment().toString(); String storeId = "test_store_id" ; String providerId = "2088100200300400500" ; ExtendParams extendParams = new ExtendParams(); extendParams.setSysServiceProviderId(providerId); String timeoutExpress = "5m" ; List<GoodsDetail> goodsDetailList = new ArrayList<>(); List<OrderItem> orderItemList = orderItemMapper.getByOrderNoUserId(orderNo, userId); for (OrderItem orderItem : orderItemList) { GoodsDetail goods = new GoodsDetail(); goods.setGoodsId(orderItem.getProductId().toString()); goods.setGoodsName(orderItem.getProductName()); goods.setPrice(BigDecimalUtil.mul(orderItem.getCurrentUnitPrice().doubleValue(), new Double( 100 ).doubleValue()).toString()); goods.setQuantity(Long.valueOf(orderItem.getQuantity().toString())); goodsDetailList.add(goods); } AlipayTradePayModel alipayTradePayModel = new AlipayTradePayModel(); alipayTradePayModel.setOutTradeNo(outTradeNo); alipayTradePayModel.setTotalAmount(totalAmount); alipayTradePayModel.setSubject(subject); alipayTradePayModel.setStoreId(storeId); alipayTradePayModel.setTimeoutExpress(timeoutExpress); //PropertiesUtil静态代码块还需要加载zfbinfo.properties //props.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream("zfbinfo.properties"), "UTF-8")); AlipayClient alipayClient = new DefaultAlipayClient(PropertiesUtil.getProperty( "open_api_domain" ), PropertiesUtil.getProperty( "appid" ), PropertiesUtil.getProperty( "private_key" ), AlipayConstants.FORMAT_JSON, AlipayConstants.CHARSET_UTF8, PropertiesUtil.getProperty( "alipay_public_key" ), AlipayConstants.SIGN_TYPE_RSA2); AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest(); request.setBizModel(alipayTradePayModel); request.setNotifyUrl(PropertiesUtil.getProperty( "alipay.callback.url" )); // 获取当面付应答 AlipayTradePrecreateResponse response = alipayClient.execute(request); String code = response.getCode(); if (! "10000" .equals(code)) { logger.info( "支付宝预下单失败!!!" ); return ServerResponse.createByErrorMessage( "支付宝预下单失败!!!" ); } logger.info( "支付宝预下单成功:)" ); String body = response.getBody(); logger.info( "支付宝收到响应=======>" + body); File folder = new File(path); if (!folder.exists()) { folder.setWritable( true ); folder.mkdirs(); } String qrPath = String.format(path+ "/qr-%s.png" , response.getOutTradeNo()); String qrFileName = String.format( "qr-%s.png" ,response.getOutTradeNo()); ZxingUtils.getQRCodeImge(response.getQrCode(), 256 , qrPath); File targetFile = new File(path, qrFileName); try { FTPUtil.uploadFile(Lists.newArrayList(targetFile)); } catch (IOException e) { logger.error( "上传二维码异常" , e); } logger.info( "qrPath: " + qrPath); String qrUrl = PropertiesUtil.getProperty( "ftp.server.http.prefix" ) + targetFile.getName(); resultMap.put( "qrUrl" , qrUrl); return ServerResponse.createBySuccess(resultMap); } |