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

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

微信使用: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.hqwc.cn/news/442871.html

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

相关文章

【音视频】http-flv直播分发协议的延迟效果

一、前言 直播电商和新型直播社交已成为风口&#xff0c;市场上主流APP有60%以上都会有直播的内容。以前是以文本和图片为主&#xff0c;当前视频和直播这类流式传输已经成为网络传输中的主要流量。 本文主要针对http-flv这个直播分发协议&#xff0c;测试在不同云产商的延迟…

数据结构——并查集

1.并查集的定义 并查集其实也是一种树形结构&#xff0c;在使用中通常用森林的方式来表示 并查集的逻辑结构其实就是集合 并查集一般可以通过双亲写法&#xff08;顺序结构&#xff09;来完成&#xff0c;即通过一个数组存储父亲结点的下标 int s[10005]; int main() {for(…

代码随想录算法训练营29期|day36任务以及具体安排

第八章 贪心算法 part05 435. 无重叠区间 class Solution {public int eraseOverlapIntervals(int[][] intervals) {Arrays.sort(intervals, (a,b)-> {return Integer.compare(a[0],b[0]);});if(intervals.length 1) return 0;int result 0;for(int i 1 ; i < interva…

spring整合mybatis的底层原理

spring整合mybatis的底层原理 原理&#xff1a; FactoryBean的自定义对象jdk动态代理Mapper接口对象 一、手写一个spring集成mybatis 目录结构&#xff1a; 1.1 入口类 public class Test {public static void main(String[] args) {AnnotationConfigApplicationContext co…

大数据开发之离线数仓项目(用户行为采集平台)(可面试使用)

第 1 章&#xff1a;数据仓库概念 数据仓库&#xff0c;是为企业指定决策&#xff0c;提供数据支持的&#xff0c;可以帮助企业&#xff0c;改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括&#xff1a;业务数据、用户行为数据和爬虫数据等。 业务数据&#xff1a…

HiveSQL题——数据炸裂和数据合并

目录 一、数据炸裂 0 问题描述 1 数据准备 2 数据分析 3 小结 二、数据合并 0 问题描述 1 数据准备 2 数据分析 3 小结 一、数据炸裂 0 问题描述 如何将字符串1-5,16,11-13,9" 扩展成 "1,2,3,4,5,16,11,12,13,9" 且顺序不变。 1 数据准备 with da…

【原创】VMware创建子网,并使用软路由获得访问互联网的能力,并通过静态路由让上层网络访问位于虚拟机的子网

前言 一看标题就很离谱&#xff0c;确实内容也有点复杂&#xff0c;我的初衷是为后面搞软路由做准备&#xff0c;先通过VMware进行可行性验证&#xff0c;确定方案是否可行&#xff0c;再做下一步的计划。结论当然可以的&#xff0c;能通能访问&#xff0c;强的不行。 网络拓…

2023强网杯复现

强网先锋 SpeedUp 要求2的27次方的阶乘的逐位之和 在A244060 - OEIS 然后我们将4495662081进行sha256加密 就得到了flag flag{bbdee5c548fddfc76617c562952a3a3b03d423985c095521a8661d248fad3797} MISC easyfuzz 通过尝试输入字符串判断该程序对输入字符的验证规则为9…

回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小支持向量机的数据多输入单输出回归预测

回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小支持向量机的数据多输入单输出回归预测 目录 回归预测 | Matlab基于OOA-LSSVM鱼鹰算法优化最小支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab基于OOA-LSSVM鱼鹰算法优化最小…

Unix/Linux上的五种IO模型

a.阻塞 blocking 调用者调用了某个函数&#xff0c;等待这个函数返回&#xff0c;期间什么也不做&#xff0c;不停的去检查这个函数有没有返回&#xff0c;必须等这个函数返回才能进行下一步动作。 注意&#xff1a;阻塞并不是函数的行为&#xff0c;而是跟文件描述符有关。通…

HTM标签 - 2

HTM标签 超链接标签 超链接标签&#xff1a;<a> 文本或图片 </a> 用法1&#xff1a;在页面中使用超链接标签跳转到另一个页面 属性描述href页面跳转的地址&#xff0c;相对地址或绝对地址&#xff1b;###&#xff1a;空连接&#xff1b;#&#xff1a;跳转到当前…

树和二叉树基础

树和二叉树基础 1.1树的概念 树是在数据结构中第一次接触到的非线性结构。 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它 叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&am…