Java对接支付宝(alipay)电脑网站生成二维码扫码支付 alipay.trade.page.pay统一收单下单并支付页面接口
SDK版本
gradle
compile group: 'com.alipay.sdk', name: 'alipay-sdk-java', version: '4.15.0.ALL'
maven
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><scope>4.15.0.ALL</scope></dependency>
创建连接的bean
@Beanpublic AlipayClient alipayClient() {AlipayConfig alipayConfig = new AlipayConfig();//支付宝公钥,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/207/201602487431alipayConfig.setAlipayPublicKey(ALIPAY_PUBLIC_KEY);//支付宝私钥alipayConfig.setPrivateKey(APP_PRIVATE_KEY);// 应用私钥,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/207/201602469554alipayConfig.setAppCertPath(APP_CERT_PATH);//应用id,如何获取请参考:https://opensupport.alipay.com/support/helpcenter/190/201602493024alipayConfig.setAppId(APP_ID);try {return new DefaultAlipayClient(alipayConfig);} catch (AlipayApiException e) {logger.error("创建支付宝链接Bean失败 AlipayApiException:{}", e);return null;}}
收款码示例代码
/*** 创建支付信息** @param order 支付订单信息* @return 支付页面URL*/public String createAlipayUrl(RechargeIntegralReferOrder order) {AlipayTradePagePayModel model = new AlipayTradePagePayModel();//商户订单号,商户自定义,需保证在商户端不重复,如:20200612000001model.setOutTradeNo(order.getOrderCode());model.setProductCode(FAST);model.setSubject(order.getSubject());//订单标题//设置过期时间long time = System.currentTimeMillis() + TimeUnit.MINUTES.toMillis(5);String ymdHmsStr = DateTimeUtil.getYmdHmsStr(new Date(time));model.setTimeExpire(ymdHmsStr);//订单金额,精确到小数点后两位model.setTotalAmount(order.getPrice().toString());//订单描述model.setBody(order.getBody());AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setBizModel(model);//设置配置的参数logger.info("获取支付订单接口参数配置 userNick:{} 金额:{} 过期时间:{}", order.getUserNick(), order.getPrice(), ymdHmsStr);//异步通知地址,以http或者https开头,商户外网可以post访问的异步地址,用于接收支付宝返回的支付结果alipayRequest.setNotifyUrl(ymlConfigBean.getAlipay_notify_url());//支付成功后同步地址,用于提示用户支付成功alipayRequest.setReturnUrl(ymlConfigBean.getAlipay_return_url());String alipayUrl = null;try {alipayUrl = alipayClient.pageExecute(alipayRequest, "GET").getBody();} catch (AlipayApiException e) {logger.error("getAlipayUrl AlipayApiException:{}", e);}return alipayUrl;}
回调示例代码
异步回调
/*** 支付宝异步订单回调** @param request*/public void alipayNotifyCallBack(HttpServletRequest request) {Map<String, String> params = convertRequestParamsToMap(request); // 将异步通知中收到的待验证所有参数都存放到map中String paramsJson = JSON.toJSONString(params);logger.info("支付宝异步回调,{}", paramsJson);try {AlipayConfig alipayConfig = new AlipayConfig();// 支付宝配置// 调用SDK验证签名,使用秘钥的验证方式boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayBeanConfig.ALIPAY_PUBLIC_KEY,alipayConfig.getCharset(), alipayConfig.getSignType());logger.info("signVerified:{}", signVerified);if (!signVerified) {logger.info("支付宝异步回调签名认证失败,signVerified=false, paramsJson:{}", paramsJson);return;}logger.info("支付宝异步回调签名认证成功,开始处理订单业务");String tradeStatus = params.get("trade_status");//订单状态String orderCode = params.get("out_trade_no");//唯一的商家订单编号,创建订单的时候传入logger.info("订单状态TradeStatus:{} orderCode:{}", tradeStatus, orderCode);if (tradeStatus.equals(AlipayTradeEnum.支付成功.getTradeStatus()) || tradeStatus.equals(AlipayTradeEnum.交易完成.getTradeStatus())) {synchronized (orderCode.intern()) {RechargeIntegralReferOrder integralReferOrder = integralOrderService.findByOrderCode(orderCode);if (!integralReferOrder.getPayResult().isCancelable()) {logger.info("当前订单已进行过充值积分相关操作 orderCode:{}", orderCode);return;}//积分充值增加iIntegralOpsRecordService.integralRecharge(integralReferOrder.getUserNick(), integralReferOrder.getPrice(),integralReferOrder.getDiscount(), integralReferOrder.getIntegral(), IntegralOpsEnum.积分充值);RechargeIntegralReferOrder payResult = integralOrderService.updateOrderPayResult(integralReferOrder, PayResultEnum.支付成功);userVipService.plusVipIntegral(integralReferOrder.getUserNick(), null, integralReferOrder.getPrice().intValue(), UserVipOpsEnum.充值加分);logger.info("积分充值完毕 订单状态:{} orderCode:{}", payResult.getPayResult(), orderCode);}} else {integralOrderService.updateOrderPayResult(orderCode, PayResultEnum.支付失败);logger.info("订单支付失败,不进行业务操作");}} catch (AlipayApiException e) {logger.error("支付宝回调签名认证失败,paramsJson:{},errorMsg:{}", paramsJson, e.getMessage());}}
同步回调
/*** 支付宝同步订单回调** @param request* @return*/public AlipayReturnParam alipayReturnCallBack(HttpServletRequest request) {Map<String, String> params = convertRequestParamsToMap(request); // 将异步通知中收到的待验证所有参数都存放到map中String paramsJson = JSON.toJSONString(params);logger.info(paramsJson);AlipayConfig alipayConfig = new AlipayConfig();//支付宝配置try {// 调用SDK验证签名,使用秘钥的验证方式boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayBeanConfig.ALIPAY_PUBLIC_KEY,alipayConfig.getCharset(), alipayConfig.getSignType());logger.info("signVerified:{}", signVerified);if (!signVerified) {logger.info("支付宝同步回调签名认证失败,signVerified=false");return null;}} catch (AlipayApiException e) {logger.error("alipayReturnCallBack AlipayApiException:{}", e);}logger.info("支付宝同步回调签名认证成功,开始处理订单业务");AlipayReturnParam param = new AlipayReturnParam();String timestamp = params.get("timestamp");//支付时间param.setTimestamp(timestamp);String amount = params.get("total_amount");//金额param.setAmount(amount);logger.info("支付宝同步回调 {}", param.toString());return param;}
Java对接支付宝(alipay)电脑网站生成二维码扫码支付 alipay.trade.page.pay统一收单下单并支付页面接口相关推荐
- WEB端支付宝接入----统一收单下单并支付页面接口
问题:WEB端接入支付宝前后端分离的情况下,后端调用支付宝下单支付返回的是一段HTML语言 处理方法: <div id="divaliPay"></div> ...
- java将一个url链接或者文字生成二维码并且转成base64
我们在开发的时候,肯定有这样的需求.把一个url链接转成二维码图片.提供给用户扫描,然后跳转到相应的页面. 三个问题(前提:没有用统一的图片服务器如:fastdfs.) (1):把url链接转成图片保 ...
- 【Java中级篇】使用zxing生成二维码
一.pom.xml添加依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>cor ...
- asp.net mvc 网站生成二维码
网上有很多使用 Javascript 二维码生成库 ,我参考 https://c.runoob.com/ 写了一个简单的例子,本人菜鸟,写错请见谅 @{Layout = null; }<!D ...
- 【超详细,全流程】java对接支付宝支付
支付流程 一.对接前的准备 1.1创建应用,获取参数:APPID(使用沙箱环境可跳过) 1.1.1添加产品 1.1.2配置密钥,获取第二个参数:商户的私钥 1.1.3支付宝网关 1.1.4生成参数密钥 ...
- JAVA支付宝小程序授权登陆,并生成二维码(证书方式)
接入准备 https://opendocs.alipay.com/open/284/106001?ref=api 根据文档进行创建小程序.配置相关信息(接口加签方式选择证书) 生成二维码文档https ...
- 几行代码,轻松带你实现Java生成二维码功能!
作者:瑞 新 https://0x9.me/rVjw2 文章目录 效果图 步骤 maven依赖 工具类 service 扩展 局域网调试 线上调试 效果图 步骤 maven依赖 <!--生成二维 ...
- Java自定义生成二维码(兼容你所有的需求)
1.概述 作为Java开发人员,说到生成二维码就会想到zxing开源二维码图像处理库,不可否认的是zxing确实很强大,但是实际需求中会遇到各种各样的需求是zxing满足不了的,于是就有了想法自己扩展 ...
- SpringBoot生成二维码 扫描并可下载文件
生成二维码 扫描并可下载文件 pom.xml 依赖 application.yaml Controller ImageBuilderUtils 工具类 适当根据自己的业务需求变通,然后就能轻松使用了, ...
- springboot 生成二维码
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.导入依赖 二.编写配置文件 三.编写代码实现 1 controller层编写 2 Constant编写 3 映射规 ...
最新文章
- 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析
- java activiti5_工作流Activiti5.13学习笔记(一)
- 留学申请计算机硕士个人陈述,申请美国计算机专业英文个人陈述
- LeetCode-461. 汉明距离(python3)
- Python之路(第三十一篇) 网络编程:简单的tcp套接字通信、粘包现象
- IOS15最标准的纯代码搭建项目
- Android插件化开发之DexClassLoader动态加载dex、jar小Demo
- HBASE启动失败,Failed construction of Master: class org.apache.hadoop.hbase.master.HMaster
- Avro从入门到入土
- java数学函数Math类
- Faster-Rcnn扫盲
- # 淘宝客导购小程序最新版本
- 高德地图记录跑步轨迹_朋友圈晒跑步 亲测高德地图和百度地图哪个更实用
- X Chen笔记---Centos安装使用xmr-stack-cpu教程
- seek()方法的使用
- 广州互联网营销群聚会图片
- Windows系统C语言检测键盘的状态
- kdj超卖_如何正确理解KDJ?
- 如何指定网站内搜索关键字(借用已有搜索引擎)
- C语言上学期整理(第6章)
热门文章
- lsb隐写的基本方法matlab,GitHub - RGNil/RG_LSB: 利用python实现LSB隐写算法(我自己改进了LSB算法),并进行了性能分析(psnr、错误率、鲁棒性)...
- matlab学习笔记 struct函数
- ActivityManagerService解读之Activity启动三探--Activity中Task与Stack
- 每周全球科技十大新闻(2019.8.12-8.18)
- as常用固定搭配_语法必看:as的几种固定用法
- python-docx文档
- 读取cpu温度的api_读取CPU核心温度
- 黑苹果常用 工具+Kext+ACPI+UEFI驱动 下载
- A* operator/(A*, A*)‘ must have an argument of class or enumerated type
- 如何从虚拟机复制文件到实体机