官方文档:微信支付-开发者文档
官方说法:服务端调用下单接口后,将返回的 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(); // 匹配deeplinkbreak; // 跳出循环}}
//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;}