IOS唤醒支付宝APP的协议和安卓稍有区别,需要整个json数据进行urlencode来拼接到协议url内
在IOS内,QQ浏览器和其他浏览器有区别,需要另外的支付宝唤醒url
//唤起客户端快捷参数
var data = {"requestType":"SafePay","fromAppUrlScheme":"alipays","dataString":"h5_route_token=\"RZ41QkLuzjZPgEfvTaAM2Vses2JgbtmobilecashierRZ41\"&is_h5_route=\"true\""};
if(isAndroid) {
var alipaysUrl = 'alipays://platformapi/startApp?appId=20000125&orderSuffix=' + o.android +'#Intent;scheme=alipays;package=com.eg.android.AlipayGphone;end';
}
//fix for iOS QQ browser
else if (ua.indexOf('mqqbrowser') > -1) {
var alipaysUrl = 'alipay://alipayclient/?' + o.android;
}
else {
var alipaysUrl = 'alipay://alipayclient/?' + o.ios;
}
在IOS中,需要注意的地方是 safari浏览器 会对打开新窗口判断是否为恶意,并且不能通过iframe来唤醒APP,只能通过新开窗口打开 唤醒的url 进行唤醒,然而在苹果端不能直接用js进行了ajax回调后打开新窗口,它的安全策略是 只能是用户点击的js逻辑内 ajax 回调的逻辑前 才能执行,也就意味着 需要用户点击 唤醒支付的事件后 先打开 新窗口然后执行ajax 回调 进行支付宝app唤醒。
代码:
// js点击后的执行逻辑
// 苹果端safari浏览器使用时,先打开一个窗口预用于唤醒支付宝APP
if(!/Windows/.test(navigator.userAgent) && /Safari/.test(navigator.userAgent) && broker_type == 'ios') {
// 如果是苹果平板的QQ浏览器,则提示下载APP或者推荐自带浏览器使用
if(/mqbhd/.test(navigator.userAgent.toLowerCase())) {
alert("请下载游戏APP进行充值")
return false;
}
if(!/mqqbrowser/.test(navigator.userAgent.toLowerCase())) {
// 其他苹果设备正常执行
iphone_open_w_id = window.open();
}
}
// ajax回调后的执行逻辑
if((!/mqqbrowser/.test(navigator.userAgent.toLowerCase()) && /Safari/.test(navigator.userAgent)) && !/Chrome/.test(navigator.userAgent)) {
// 如果客户端是苹果的safari浏览器,则打开窗口后关闭返回原网页执行支付唤醒
var w_obj = iphone_open_w_id;
w_obj.location = 'alipay://alipayclient/?'+url.ios;
var t1 = window.setTimeout(function() {
// 1秒钟之后执行了
w_obj.close()
window.clearTimeout(t1) // 去除定时器
},1000)
} else {
if(/mqqbrowser/.test(navigator.userAgent.toLowerCase())) {
// 苹果端的QQ浏览器
aliwap_url = 'alipay://alipayclient/?'+url.android
} else {
// 非苹果端的浏览器,即安卓浏览器
aliwap_url = 'alipays://platformapi/startApp?appId=20000125&orderSuffix=' + url.android +'#Intent;scheme=alipays;package=com.eg.android.AlipayGphone;end';
}
}
注:平板是走手机端的逻辑,也就是可以通过 APP协议进行 支付宝唤醒支付