mirror of
https://gitee.com/liuxioabin/fengketrade.git
synced 2026-04-17 12:57:32 +08:00
'ios支付'
This commit is contained in:
parent
927c970a42
commit
87fe0569d6
@ -484,115 +484,100 @@ const CcbLifePlatform = {
|
||||
try {
|
||||
// #ifdef H5
|
||||
const isIOS = this.isIOS();
|
||||
console.log('[建行收银台] 设备类型:', isIOS ? 'iOS' : 'Android');
|
||||
console.log('[建行收银台] 设备:', isIOS ? 'iOS' : 'Android');
|
||||
|
||||
if (isIOS) {
|
||||
// ⭐ iOS: 使用官方文档的URL Scheme(5.3.1章节)
|
||||
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
|
||||
});
|
||||
}
|
||||
this._callIOSCashier(options.payment_string, resolve, reject);
|
||||
} else {
|
||||
// ⭐ Android: 使用官方文档的JSBridge方法(5.3.1章节)
|
||||
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'
|
||||
});
|
||||
}
|
||||
}
|
||||
this._callAndroidCashier(options.payment_string, resolve, reject);
|
||||
}
|
||||
// #endif
|
||||
|
||||
// #ifndef H5
|
||||
console.error('[建行收银台] ❌ 非H5环境');
|
||||
reject({
|
||||
code: -1,
|
||||
msg: '仅支持H5环境'
|
||||
});
|
||||
reject({ code: -1, msg: '仅支持H5环境' });
|
||||
// #endif
|
||||
} catch (error) {
|
||||
console.error('[建行收银台] ❌ 调起失败:', error);
|
||||
console.error('[建行收银台] 错误类型:', error.name);
|
||||
console.error('[建行收银台] 错误信息:', error.message);
|
||||
console.error('[建行收银台] 错误堆栈:', error.stack);
|
||||
reject({
|
||||
code: -1,
|
||||
msg: error.message || '调起支付失败'
|
||||
});
|
||||
console.error('[建行收银台] ❌ 调起异常:', error.message);
|
||||
reject({ code: -1, msg: error.message || '调起支付失败' });
|
||||
}
|
||||
|
||||
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
|
||||
*/
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user