继前一篇[支付宝电脑在线支付一(静态页面)]这篇文件主要是讲支付宝后台调用的实现。收银台页面默认会显示支付宝支付的二维码,用户也可以通过点击[立即支付]按钮跳转到支付宝的收银台。
1.先添加支付宝的Maven依赖
1 2 3 4 5 | < dependency > < groupId >com.alipay.sdk</ groupId > < artifactId >alipay-sdk-java</ artifactId > < version >3.4.27.ALL</ version > </ dependency > |
2.推荐二维码支付实现
推荐二维码支付是套在一个iframe里面的,如下:
1 2 | < iframe name="alipayScanIframe" src="alipayQRCode.html?bizId=100&alipayPayMethod=4" width="103" height="103" frameborder="0" scrolling="no" style="height: 103px;width:103px; border:1px solid #aaa;"></ iframe > |
后台alipayQRCode方法部分实现如下,支付宝API上面类似的代码。这里只需要注意如果是生成二维码支付的话qr_pay_mode的值要为4并且指定宽度。
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 | DefaultAlipayClient("https://openapi.alipay.com/gateway.do", yourAppId, YourAlipayPrivateKey(), "json", "utf-8", YourAlipayPublicKey(), "RSA2"); // 设置请求参数 AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(alipayReturnUrl); alipayRequest.setNotifyUrl(alipayNotifyUrl); // 商户订单号,商户网站订单系统中唯一订单号,必填 String out_trade_no = orderInfo.getOrderCode(); // 付款金额,必填 String total_amount = orderInfo.getConfirmMoney().toString(); // 订单名称,必填 String subject = orderInfo.getDataInfo().getNetCode() + "的订单"; // 商品描述,可空 String body = orderInfo.getDataInfo().getNetCode() + "的订单"; Map< String , String> maps = new HashMap< String , String>(16); maps.put("out_trade_no", out_trade_no);// 订单号 maps.put("total_amount", total_amount); maps.put("subject", subject); maps.put("body", body); maps.put("product_code", "FAST_INSTANT_TRADE_PAY"); // 固定值 maps.put("out_trade_no", out_trade_no); //前台传的Map集合,自己弄的 if (params != null) { // 收银台的方式 String alipayPayMethod = params.get("alipayPayMethod"); // PC扫码支付的方式,支持前置模式和跳转模式 if (!StringUtil.isRealEmpty(alipayPayMethod)) { maps.put("qr_pay_mode", alipayPayMethod); if ("4".equals(alipayPayMethod)) { maps.put("qrcode_width", "120");// 注:qr_pay_mode=4时该参数生效 } } } alipayRequest.setBizContent(JSON.toJSONString(maps)); // 生成HTML返回给页面 String form = alipayClient.pageExecute(alipayRequest).getBody(); getResponse().setContentType("text/html;charset=utf-8"); getResponse().getWriter().write(form);// 直接将完整的表单html输出到页面 getResponse().getWriter().flush(); getResponse().getWriter().close(); |
3.页面跳转支付
1 2 3 4 | <!-- 提交后台发起支付--> < form id="formPaySubmit" action="paySubmit.html" method="post" target="_blank"> < input type="hidden" name="payType" value="" /> < input type="hidden" name="bizId" value="100" /> < br ></ form > |
页面跳转是由后台发起支付,上面代码当点击按钮的时候在新的窗口提交一个表单到后台。给支付宝的参数只需要将上面代码的qr_pay_mode的值改成2即可。
4.异步支付结果通知
支付结果支付宝会异步通知给上面设置的NotifyUrl中。具体的业务要根据实际情况实现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端