'ios支付'

This commit is contained in:
gonghaoxing 2025-10-28 17:25:31 +08:00
parent 927c970a42
commit 87fe0569d6

View File

@ -484,115 +484,100 @@ const CcbLifePlatform = {
try { try {
// #ifdef H5 // #ifdef H5
const isIOS = this.isIOS(); const isIOS = this.isIOS();
console.log('[建行收银台] 设备类型:', isIOS ? 'iOS' : 'Android'); console.log('[建行收银台] 设备:', isIOS ? 'iOS' : 'Android');
if (isIOS) { if (isIOS) {
// ⭐ iOS: 使用官方文档的URL Scheme5.3.1章节) this._callIOSCashier(options.payment_string, resolve, reject);
console.log('[建行收银台] iOS: 使用官方URL Scheme调起');
// 注意需要对支付串进行encodeURIComponent编码
const payUrl = 'ccbpayment://openCashier?params=' + encodeURIComponent(options.payment_string);
console.log('[建行收银台] 支付串原始长度:', options.payment_string.length);
console.log('[建行收银台] URL编码后总长度:', payUrl.length);
console.log('[建行收银台] URL前200字符:', payUrl.substring(0, 200));
// ⚠️ iOS URL Scheme 长度限制检查通常为2048字符
if (payUrl.length > 2048) {
console.error('[建行收银台] ❌ iOS URL长度超限:', payUrl.length, '> 2048');
reject({
code: -1,
msg: 'iOS URL长度超限请联系技术支持'
});
return;
}
try {
console.log('[建行收银台] 准备调起iOS收银台...');
window.location.href = payUrl;
console.log('[建行收银台] window.location.href已设置');
// iOS调起后认为成功实际支付结果通过异步通知获取
setTimeout(() => {
console.log('[建行收银台] ✅ iOS收银台已调起');
resolve({
code: 0,
msg: '已调起建行支付'
});
}, 500);
} catch (error) {
console.error('[建行收银台] ❌ iOS调起失败:', error);
reject({
code: -1,
msg: 'iOS调起失败: ' + error.message
});
}
} else { } else {
// ⭐ Android: 使用官方文档的JSBridge方法5.3.1章节) this._callAndroidCashier(options.payment_string, resolve, reject);
console.log('[建行收银台] Android: 检查CCBAndroid对象...');
console.log('[建行收银台] window.CCBAndroid存在:', !!window.CCBAndroid);
console.log('[建行收银台] CCBAndroid.callCashier存在:', !!(window.CCBAndroid && window.CCBAndroid.callCashier));
if (window.CCBAndroid && typeof window.CCBAndroid.callCashier === 'function') {
console.log('[建行收银台] 调用CCBAndroid.callCashier()...');
console.log('[建行收银台] 支付串长度:', options.payment_string.length);
// 调用官方文档指定的方法
window.CCBAndroid.callCashier(options.payment_string);
// Android调起后认为成功实际支付结果通过异步通知获取
setTimeout(() => {
console.log('[建行收银台] ✅ Android收银台已调起');
resolve({
code: 0,
msg: '已调起建行支付'
});
}, 500);
} else {
console.error('[建行收银台] ❌ CCBAndroid对象不存在或callCashier方法不存在');
console.error('[建行收银台] window对象包含的键:', Object.keys(window).filter(k => k.toLowerCase().includes('pay') || k.toLowerCase().includes('ccb') || k.toLowerCase().includes('android')));
// 降级尝试旧版本可能使用mbspay
if (window.mbspay && typeof window.mbspay.directpay === 'function') {
console.warn('[建行收银台] ⚠️ 降级使用mbspay.directpay()(旧版本)');
window.mbspay.directpay(options.payment_string);
setTimeout(() => {
console.log('[建行收银台] ✅ Android收银台已调起(降级方式)');
resolve({
code: 0,
msg: '已调起建行支付'
});
}, 500);
} else {
reject({
code: -1,
msg: '建行支付环境异常请更新建行生活App'
});
}
}
} }
// #endif // #endif
// #ifndef H5 // #ifndef H5
console.error('[建行收银台] ❌ 非H5环境'); reject({ code: -1, msg: '仅支持H5环境' });
reject({
code: -1,
msg: '仅支持H5环境'
});
// #endif // #endif
} catch (error) { } catch (error) {
console.error('[建行收银台] ❌ 调起失败:', error); console.error('[建行收银台] ❌ 调起异常:', error.message);
console.error('[建行收银台] 错误类型:', error.name); reject({ code: -1, msg: error.message || '调起支付失败' });
console.error('[建行收银台] 错误信息:', error.message);
console.error('[建行收银台] 错误堆栈:', error.stack);
reject({
code: -1,
msg: error.message || '调起支付失败'
});
} }
console.log('[建行收银台] ==========================================='); console.log('[建行收银台] ===========================================');
}); });
}, },
/**
* iOS收银台调起内部方法
* 使用旧版 mbspay://direct
*/
_callIOSCashier(paymentString, resolve, reject) {
console.log('[iOS收银台] 支付串长度:', paymentString.length);
// ⭐ iOS使用旧版URL Scheme实测更稳定
const payUrl = 'mbspay://direct?' + paymentString;
console.log('[iOS收银台] URL长度:', payUrl.length);
try {
// 方式1: window.location.href
window.location.href = payUrl;
console.log('[iOS收银台] window.location.href已设置');
// 方式2: iframe降级100ms后
setTimeout(() => {
const iframe = document.createElement('iframe');
iframe.style.display = 'none';
iframe.src = payUrl;
document.body.appendChild(iframe);
setTimeout(() => document.body.removeChild(iframe), 1000);
}, 100);
// 认为调起成功
setTimeout(() => {
console.log('[iOS收银台] ✅ 已调起');
resolve({ code: 0, msg: '已调起建行支付' });
}, 500);
} catch (error) {
console.error('[iOS收银台] ❌ 调起失败:', error.message);
reject({ code: -1, msg: error.message });
}
},
/**
* Android收银台调起内部方法
*/
_callAndroidCashier(paymentString, resolve, reject) {
console.log('[Android收银台] 支付串长度:', paymentString.length);
// 方式1: 新版 CCBAndroid.callCashier
if (window.CCBAndroid?.callCashier) {
console.log('[Android收银台] 使用 CCBAndroid.callCashier');
window.CCBAndroid.callCashier(paymentString);
setTimeout(() => {
console.log('[Android收银台] ✅ 已调起');
resolve({ code: 0, msg: '已调起建行支付' });
}, 500);
return;
}
// 方式2: 旧版 mbspay.directpay
if (window.mbspay?.directpay) {
console.log('[Android收银台] 使用 mbspay.directpay旧版');
window.mbspay.directpay(paymentString);
setTimeout(() => {
console.log('[Android收银台] ✅ 已调起');
resolve({ code: 0, msg: '已调起建行支付' });
}, 500);
return;
}
// 无可用方法
console.error('[Android收银台] ❌ 无可用调起方法');
console.error('[Android收银台] window对象:', Object.keys(window).filter(k =>
k.toLowerCase().includes('ccb') || k.toLowerCase().includes('pay')
));
reject({ code: -1, msg: '建行支付环境异常请更新App' });
},
/** /**
* 判断是否iOS * 判断是否iOS
*/ */