springBoot项目实现支付宝扫码支付(完整篇)

it2026-04-16  2

准备工作,让老板准备好支付宝的商户号,支付宝私钥,支付宝公钥。 说明:

注意重点 一点要看

支付宝扫码支付跟微信扫码支付是不一样的,微信我们是调用微信那边,微信给我们返回二维码链接,然后前端生成二维码的,支付宝是不一样,是跳转到支付自己的扫码页面的。请看下面操作

导入maven仓库

<dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>3.0.0</version> </dependency>

准备好你的配置类:可直接复制

package com.cg.cg_project.config; import org.springframework.context.annotation.Configuration; @Configuration 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://34w8203e95.zicp.vip/userController/notifyUrl"; // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 //这里地址为,支付成功之后跳转的地址,同步 public static String return_url = "http://ay1.zhenchangkj.com/#/mine"; // 签名方式 public static String sign_type = "RSA2"; // 字符编码格式 public static String charset = "utf-8"; // 支付宝网关 public static String gatewayUrl = "https://openapi.alipay.com/gateway.do"; }

这是接口,业务就需要根据自己的需求去处理了,我这里就是简单的调起支付

/** * 方法实现说明 支付宝支付 * @author 金刚 * @date 2020/10/14 17:12 */ @ApiOperation(value = "支付宝扫码支付",tags = "支付入口") @RequestMapping(value = "aliPay",method = RequestMethod.GET) public Result goAlipay( @RequestParam @ApiParam(name = "totalFee",value = "支付金额",required = true) String totalFee, @RequestParam @ApiParam(name = "userId",value = "用户id",required = true) Long userId, HttpServletRequest httpRequest , HttpServletResponse httpResponse) throws Exception { //订单保存 //省略业务代码 //商户订单号,商户网站订单系统中唯一订单号,必填 String out_trade_no = String.valueOf(idWorker.nextId()); //获得初始化的AlipayClient 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(JSON.toJSONString(alipayClient)); //付款金额,必填 String total_amount = String.valueOf("0.01"); //订单名称,必填 String subject ="充值"; //商品描述,可空 String body = "金币充值"; // 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。 String timeout_express = "5m"; alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," + "\"total_amount\":\""+ total_amount +"\"," + "\"subject\":\""+ subject +"\"," + "\"body\":\""+ body +"\"," + "\"timeout_express\":\""+ timeout_express +"\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //请求 // String result = alipayClient.pageExecute(alipayRequest).getBody(); AlipayTradePagePayResponse response = alipayClient.pageExecute(alipayRequest); String body1 = response.getBody(); // 注意 这个是调起支付扫码的,但是不是获取二维码的,他这个返回来的是个form标签 // 我们只需要将返回的这个标签进行跳转就行了,二维码是跳转之后就出来的,不用考虑获取二维码 httpResponse.setContentType("text/html;charset="+AlipayConfig.charset); httpResponse.getWriter().write(body1); httpResponse.getWriter().flush(); httpResponse.getWriter().close(); if (response.isSuccess()){ System.out.println("调起成功"); return new Result(true,StatusCode.OK,"调起成功",out_trade_no); }else { System.out.println("调起失败"); return new Result(false,StatusCode.ERROR,"调起失败"); } }

如果想看微信支付可以点击 微信扫码支付

以上仅是我个人意见,欢迎交流 微信号 agan32728

最新回复(0)