没有合适的资源?快使用搜索试试~ 我知道了~
Java将微信和支付宝支付的个二维码合二为一的方法
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
2.3k 浏览量
2020-08-25
18:50:35
上传
评论
收藏 76KB PDF 举报
主要介绍了Java将微信和支付宝支付的个二维码合二为一的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
资源详情
资源推荐
资源评论

Java将微信和支付宝支付的个二维码合二为一的方法将微信和支付宝支付的个二维码合二为一的方法
主要介绍了Java将微信和支付宝支付的个二维码合二为一的方法,文中通过示例代码介绍的非常详细,对大家
的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
因公司需要将支付宝和微信的二维码合成一个,不管用户用支付宝扫还是微信扫都能打开对应的支付页面,在网上找了一些文
章,很感谢各位大神的经验,我也记录下我是如何将两个二维码合二为一的~。
原理:支付宝或微信生成的二维码中本质都内嵌了一个url,在扫码时实际是定向去访问二维码中内嵌的url,这样我就可以将
这个url指定到我的一个控制器,在控制器中判断是微信还是支付宝软件扫的,然后去唤醒各自的支付即可。
1.首先生成二维码:首先生成二维码:
folderName:存储二维码图片的文件夹名
imageName:二维码图片名称
content:是在二维码中写入的内容,这里我传入的是URL:指定我判断软件类型的控制器
public static String genQRImage(String folderName, String imageName, String content) {
//String filePath = System.getProperty("twtwebapp.root");
String fileName = imageName + ".png";
try {
// 检查是否存在imageQR目录,不存在则先创建
File file = new File(folderName);
if (!file.exists() && !file.isDirectory()) {
file.mkdir();
}
folderName = file.getAbsolutePath();
int width = 200; // 图像宽度
int height = 200; // 图像高度
String format = "png";// 图像类型
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
hints.put(EncodeHintType.MARGIN, 1);
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵
Path path = FileSystems.getDefault().getPath(folderName, fileName);
MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 输出图像
log.info("二维码已经生成," + path);
fileName = path.toString();
} catch (Exception e) {
log.error(e.getMessage(), e);
fileName = null;
}
return fileName;
}
2.定义类型控制器:定义类型控制器:
大家一定都想问是如何判断打开软件的类型,把Request Header Cookie 都看看就明白了,扫码二维码时不会传入任何参数,
但会有一个请求头,就是这个请求头告知了我打开软件的类型。
使用request获取名为User-Agent的请求头,
支付宝的请求头:ucbrowser/1.0.0.100 u3/0.8.0 mobile safari/534.30 alipaydefined(nt:wifi,ws:360|604|3.0)
aliapp(ap/9.9.7.112401) alipayclient/9.9.7.112401 language/zh-hans usestatusbar/true
微信的请求头: mqqbrowser/6.8 tbs/036887 safari/537.36 micromessenger/6.3.31.940 nettype/wifi language/zh_cn
就是根据这两个请求头去判断对应的软件类型,根据不同的软件类型去唤醒不同的支付。
@RequestMapping("qrcallback")
public void qrcallback(HttpServletRequest request, HttpServletResponse response) throws IOException, AlipayApiException {
String agent = request.getHeader("User-Agent").toLowerCase();
System.out.println("响应头的类型:"+agent);
if (agent.indexOf("micromessenger") > 0) {
System.out.println("微信支付");
} else if (agent.indexOf("alipayclient") > 0) {
System.out.println("阿里支付");











资源评论

weixin_38705873
- 粉丝: 7
- 资源: 929

上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助

会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
