绕过微信支付宝 H5 支付拦截验证的方法及后端解决

2024-06-05
来源:网络整理

如何绕过微信或支付宝的H5支付拦截验证?下面我们就从本质来讲解如何解决这个问题。

微信、支付宝H5支付订单下单成功后,会返回跳转支付的URL链接,通过此链接可以使用微信或支付宝进行支付操作。

如果直接访问的话,支付宝会有中间页面,微信有麻烦的验证问题;那么能不能跳过这一步,直接拉起微信和支付宝来支付呢?

网上的教程大多是让和iOS开发者拦截微信、支付宝地址并处理,但这种内嵌网页,尤其是直接通过前端HTML代码生成多终端的网页,前端开发者操作难度非常大,所以这个工作需要后端开发者的辛勤努力去解决(ง•_•)ง。

首先你要知道每一个手机APP都有一个唯一的URL地址,访问这个地址就可以打开对应的APP,基于这个原理,微信、支付宝的支付也必须基于此来拉起自己的APP,让用户支付。

所以让后端处理支付地址,直接返回能拉起微信、支付宝的支付网址,这样就可以直接使用,省去微信验证。

首先是微信H5支付

通过程序直接请求微信H5支付下单返回的支付链接如下(以下为返回的部分HTML代码):

Html代码中有一个以://开头的链接,://就是微信的URL,这个就是我们接下来要调用微信支付的链接,在手机浏览器上打开这个链接就可以调用微信支付进行支付。

也就是说微信并没有在这个页面上做其他的花招,那些拦截只是一些简单的前端拦截。那么我们就可以通过后端程序直接请求微信返回H5支付链接,然后在返回的HTML中提取微信支付URL直接返回给前端。

以下是 Java 示例代码

HttpHeaders headers = new HttpHeaders(); headers.add("Host", "wx.tenpay.com"); headers.add("Accept-Language", "en, zh-CN; q=0.8,zh; q=0.6,en-US; q=0.4"); headers.add("Accept", "text/html,application/xhtml+xml, application/xml ; g=0. 9 ,image/webp,*/* ; q=0.8"); headers.add("Upgrade-Insecure-Requests", "1"); // 这个地方写你自己在微信支付后台配置的安全域名 headers.add("Referer", "https://www.baidu.com"); HttpEntity<String> httpEntity = new HttpEntity<>(headers); try{ // 使用spring的 RestTemplate; mweb_url是微信的H5支付链接 ResponseEntity<String> exchange = this.restTemplate.exchange(mweb_url, HttpMethod.GET

分享