微信H5支付跳转问题

官方文档:微信支付-开发者文档

官方说法:服务端调用下单接口后,将返回的 mweb_url 链接返回给客户端,让客户端调用该链接拉起微信支付,需要配置跳转地址的话,在链接后面带上 &redirect_url=跳转地址,不带则默认返回当前页面(iOS有问题,会跳域名,不带接口)

处理iOS 跳转问题:

服务端调用下单接口后,将返回的 mweb_url 链接在服务端请求一次,请求的时候要带请求头参数 Referer 值必须是你申请的支付白名单,会返回一个html页面,通过正则表达式获取 deeplink 后面的链接给客户端使用,会变成直接拉起微信支付,没跳中间页。

可以

    private String readUrl(String mweb_url) throws Exception{

        String regex = "deeplink : \"[^\"]+\"";
        Pattern pattern = Pattern.compile(regex);

        URL payUrl = new URL(mweb_url);
        URLConnection con = payUrl.openConnection();
        con.setRequestProperty("Referer", "https://aaa.com"); // 加referer防盗链,必须是你申请的支付白名单

        BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"UTF-8"));
        String result = "";
        String realLineStr = null;
        while((realLineStr = br.readLine()) != null){
            Matcher matcher = pattern.matcher(realLineStr); // 一行行查找
            if(matcher.find()){
                result = matcher.group(); // 匹配deeplink
                break; // 跳出循环
            }
        }
//deeplink:weixin://wap/pay?prepayid%3Dwx13204624745902b7939b944d06f8420000&package=953378881&noncestr=1663073184&sign=af6078942315921b9935480dd0836a77
        //截取deeplink 的值,或者改一下正则表达式一次性获取
        if(StringUtils.isEmpty(result) || result.length() < 11){
            result = mweb_url;
        }else{
            String deeplink = result.substring(11).replace("\"","");
            result = deeplink;
        }
        return result;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值