聚合支付,实现支付宝微信扫二维码直接跳转支付

具体要实现的功能:手机支付宝或微信扫描同一个二维码,跳转各自的支付

微信使用:jsapi支付

支付宝:wappay

上篇已写了如何实现内网穿透调试就不多叙述

1.判断客户端类型,从request的中将user-agent拉取下来,用contains查看userAgent中是否包含支付宝或者微信的关键字

        HttpServletRequest request = ServletUtils.getRequest();String userAgent = request.getHeader("user-agent");
/*** 支付宝支付头*/
String ALI_PAY_CLIENT = "AlipayClient";/*** 微信支付头*/
String MICRO_MESSENGER = "MicroMessenger";

判断成功后直接相应的代码逻辑,我这边支付是另外一个平台所以要使用response.sendRedirect,必须使用这个去跳转不能使用什么restTemplate不然会报环境错误

2.微信上篇文章写的很清楚了这边着重说支付宝wapwap,手机电脑支付,支付宝相对于微信要简单很多demo如下:

    public Map<String, Object> gotoWAPPay(Map<String, Object> map) {log.info("获取到支付参数====={}",map);AlipayClient alipayClient = AlipayConfiguration.alipayClient(map);log.info("支付客户端信息====={}",alipayClient);// 订单模型String productCode = "QUICK_WAP_WAY";String orderNo = map.get(PayConstants.ORDERNO).toString();BigDecimal amount = new BigDecimal(map.get(PayConstants.AMOUNT).toString());BigDecimal divide = new BigDecimal("100");String remark =  map.get(PayConstants.REMARK).toString();AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();model.setOutTradeNo(orderNo);model.setSubject(remark);model.setTotalAmount(amount.divide(divide).toString());model.setBody("支付测试,共需支付" + (amount.divide(divide).toString()) + "元");model.setProductCode(productCode);//model.setQrPayMode("0");AlipayTradeWapPayRequest wapPayRequest = new AlipayTradeWapPayRequest();wapPayRequest.setReturnUrl("");log.info("异步通知荔付地址为:{}", payProperties.getAliNotifyUrl()+orderNo);wapPayRequest.setNotifyUrl(payProperties.getAliNotifyUrl()+orderNo);wapPayRequest.setBizModel(model);wapPayRequest.setNeedEncrypt(PayConstants.NEED_ENCRYPT);String form = null;try {form = alipayClient.pageExecute(wapPayRequest,"GET").getBody();} catch (AlipayApiException e) {// Handle the exception appropriately, e.g., log or throw a custom exception.e.printStackTrace();}log.info("支付宝手机电脑支付下单回调===={}", form);Map<String, Object> resultMap = new HashMap<>();
//        try {
//            response.sendRedirect(form);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }resultMap.put("url",form);return resultMap;}

这边有个坑,官方说get和post方法都可以,我们是直接让客户端跳转到支付,所以不需要前端,所以必须用get方法,返回的则是一个链接

form = alipayClient.pageExecute(wapPayRequest,"GET").getBody();

拿到链接后直接response.sendRedirect跳转过去即可

3.回调:

记得在之前填参数的时候将订单id带上,其他的就没什么了,相对于微信,支付宝还是简单很多,其他的代码就是自己项目上逻辑的差异

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/658347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Javaweb】【C00157】基于SSM的宠物护理预定系统(论文+PPT)

基于SSM的宠物护理预定系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的宠物护理预订系统 本系统分为前台系统模块、后台管理员模块以及后台会员用户模块 其中前台系统模块&#xff1a;当游客打开系统的网址后&…

springboot(ssm同城上门喂遛宠物系统 宠物预约系统Java系统

springboot(ssm同城上门喂遛宠物系统 宠物预约系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;springboot&#xff08;可改ssm&#xff09; vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&a…

报错找不到msvcp140.dll怎么办?msvcp140.dll缺失的详细修复指南

在计算机系统运行过程中&#xff0c;如果出现msvcp140.dll文件丢失的情况&#xff0c;可能会引发一系列显著的问题和故障。首先&#xff0c;我们需要理解msvcp140.dll究竟是什么以及它在操作系统中扮演何种角色。msvcp140.dll是一个动态链接库&#xff08;DLL&#xff09;文件&…

在线版XD,免费使用,功能全面,设计神器!

Adobe XD是什么软件&#xff1f; Adobe XD软件是一个结合设计和建立原型功能的一站式UX/UI设计平台。在XD软件中&#xff0c;数字团队可以进行移动应用、网页设计和原型制作。与此同时&#xff0c;Adobe XD软件也是一种跨平台设计产品&#xff0c;结合设计和建立原型功能&…

Android悬浮窗实现步骤

最近想做一个悬浮窗秒表的功能&#xff0c;所以看下悬浮窗具体的实现步骤 1、初识WindowManager 实现悬浮窗主要用到的是WindowManager SystemService(Context.WINDOW_SERVICE) public interface WindowManager extends ViewManager {... }WindowManager是接口类&#xff0c…

MySQL-窗口函数

介绍&#xff1a; MSQL8.0新增窗口函数商口函数又被称为开窗函数&#xff0c;与Oracle窗口函数类似&#xff0c;属于MysaL的一大特点 非聚合窗口函数是相对于聚函数来说的。聚合函数是对一组数据计算后返回单个值(即分组)&#xff0c;非聚合函数一次只会处理一行数据。窗口聚…

Unity项目打包的方法(之一)

在 Unity 中&#xff0c;将项目打包成 .unitypackage 文件和直接压缩 Assets、Packages 和 ProjectSettings 目录有几个关键区别&#xff0c;主要体现在打包方式、使用目的和包含的内容上。 打包成 UnityPackage .unitypackage 是 Unity 的一种打包格式&#xff0c;它允许你将项…

leetcode—划分字母区间—贪心算法

题目描述 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度的列表。…

盲盒小程序开发,实现“双收益”

盲盒在我国是一个发展潜力较高的市场&#xff0c;盲盒具有的刺激和收藏价值&#xff0c;深受消费者的喜爱&#xff0c;盲盒的“隐藏款”机制&#xff0c;能够为消费者带来惊喜感。盲盒一般与影视动漫IP合作&#xff0c;推出盲盒商品&#xff0c;这也是深受年轻人追捧的一大特点…

Redis内存设置

通过redis-cli进入Redis命令行 redis权限认证命令&#xff1a;auth 查看redis内存使用情况的命令&#xff1a;info memory 查看最大内存命令&#xff1a;config get maxmemory 设置最大内存命令&#xff1a;config set maxmemory 也可以通过redis.conf配置文件修改最大内存…

Cache Lab:Part A【模拟出使用LRU策略的高速缓存存储器组织结构】

目录 任务描述 知识回顾 实验内容 测试结果 Cache Lab 对应《CS:APP》6.3节至第六章结束的内容。 任务描述 Your job for Part A is to fill in the csim.c file so that it takes the same command line arguments and produces the identical output as the reference …

MySQL事务和SQL优化

目录 1 什么是事务 2 事务的特征 3 MySQL使用事务 实现 示例 4 事务的隔离级别 幻读 解决方法 脏读 不可重复读 幻读和不可重复读两者区别 事物的隔离级别 5 数据库优化 5.1 影响性能因素的优化 服务优化 应用优化 5.2 谁参与优化 5.3 系统优化 软件优化 硬件优…

人力RPO蓝海项目可靠性有多大?

随着全球经济的快速发展&#xff0c;人力资源外包服务逐渐成为企业降低成本、提高效率的重要手段。其中&#xff0c;RPO(招聘流程外包)作为人力资源外包的一种形式&#xff0c;日益受到企业的青睐。然而&#xff0c;对于RPO的可靠性&#xff0c;业界和学界存在不同的看法。本文…

宏景eHR FrCodeAddTreeServlet SQL注入漏洞复现

前言 免责声明&#xff1a;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 一、产…

Spring Boot接收xml参数

学无止境&#xff0c;气有浩然! Spring Boot接收xml参数 前言方案实现代码示例 打完收工&#xff01; 前言 最近工作又要做挡板&#xff0c;挡板的东西有点多&#x1f600;&#xff0c;主要是因为下游是第三方收费的&#xff0c;提供的测试环境的数据不能随心所欲修改&#xf…

mybatisplus-多数据源配置

1. 流程 pom文件yml配置多数据源具体服务添加注解DS(“***”) 1.pom文件 <!--mybatis plus 起步依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.0</vers…

万户 ezOFFICE DocumentEditExcel.jsp SQL注入漏洞

0x01 产品简介 万户OA ezoffice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日…

STM32——智能小车

STM32——智能小车 硬件接线 B-1A – PB0 B-1B – PB1 A-1A – PB2 A-1B – PB10 其余接线参考51单片机小车项目。 1.让小车动起来 motor.c #include "motor.h" void goForward(void) {// 左轮HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET);HAL_GPIO…

一文总结Java的23种设计模式

Java 设计模式是 Java 编程中常用的一些解决问题的模板&#xff0c;它们代表了最佳的实践和经验。设计模式可以帮助我们编写可复用、可维护和可扩展的代码。根据《设计模式&#xff1a;可复用面向对象软件的基础》一书&#xff0c;设计模式主要分为三大类&#xff1a;创建型模式…

js对表格table行排序

function sortTable(type) {// 获取所有行并按第1列进行排序var sortedRows $(#myTbody tr).sort(function (a, b) {// 获取需要排序的列的值&#xff0c;可能是数字或者字符&#xff0c;这个根据自己的需要var indexa Number.parseInt($(a).find(td:eq(0)).text());var inde…