掌上报销智能收票对接发票云页面闪回&连接异常解决方案

栏目:云星空知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

掌上报销智能收票对接发票云页面闪回&连接异常解决方案

【问题描述】

1、华为鸿蒙手机,在企业微信平台,使用掌上报销上传发票出现闪回现象,无法上传发票

2、钉钉、企业微信平台,部分手机掌上报销上传发票调用摄像头后(或者手机后台切换应用再切回来)偶发性出现异常提示:与发票云建立连接失败!失败信息:推送服务发送异常



【场景介绍】

  • 业务场景及原因分析:

    目前针对掌上报销智能收票对接发票云,云之家、金蝶云APP使用的是发票云小程序;企业微信、钉钉、Weilink使用的是发票云H5页面。
    针对上面两个问题:
    1、华为鸿蒙手机,在企业微信平台,使用掌上报销上传发票出现闪回现象:原因是企业微信对接发票云H5页面,使用的是iframe页面嵌套的形式,将发票云H5页面嵌套在星空表单,部分手机机制不同,导致上传发票时,会多次触发websocket重连然后重复打开iframe页面导致。
    2、钉钉、企业微信平台,部分手机掌上报销上传发票调用摄像头(或者手机后台切换应用再切回来)偶发性出现异常:经过排查分析,调用摄像头或者手机后台切换应用再切回来,可能会导致websocket长连接断开,会自动尝试调用onOpen重连即可。

  • 问题一出现版本:8.2.0.20240104 / PT-154002 以下版本

  • 已修复的补丁版本:8.2.0.20240104 / PT-154002及以上版本

  • 问题二出现版本:20240627 /  PT-159001以下版本

  • 已修复的补丁版本:20240627 / PT-159001及以上版本

  • 问题出现端:移动端




【解决方案】

出现上述两个问题,可以参考上面描述已修复的补丁版本,私有云客户自行升级对应版本的补丁即可,公有云客户需要提单给到金蝶运维去升级对应星空版本补丁,补丁升级建议升级最新版本。

针对上面描述问题二:标准补丁会在20240627版本修复发布。
公有云客户出现此问题,可尝试将发票拍照存储到相册后,在到发票云H5页面从相册选择发票。

私有云客户可参考下面方案修改相关前端文件修复处理。

待补丁发布后升级补丁即可

一. 主要步骤

  找到星空应用服务器目录:安装目录下website/mobile/template/er/LaunchInvoiceMiniProgram.html,参考下面详细操作方式修改前端文件(注意修改前文件先备份,如有问题,即时还原,前端文件修改无需重启IIS)

二. 详细操作

1. 企业微信平台

1、去掉onError弹窗,websoccket会自动重连;

2、防止websoccket会自动重连刷新iframe页面,通过

var iframeId = document.getElementById('fwy_qywx');

判断iframeId不存在即加载刷新iframe

参考如下代码:

//企业微信调用发票云
        function invokeProgramInWW(cfg) {
            // 防止socket突然重连导致闪退重复打开iframe。
            // 如华为鸿蒙4.0,拍照后或相册选择发票后,就可能会重连,触发多次onOpen,导致闪退重复打开iframe(表象就是闪回首页)
            var isOpenSocket = false;
            var iframe = document.createElement('iframe');
            iframe.width = '100%';
            iframe.height = '100%';
            iframe.style.border = 0;
            iframe.id = "fwy_qywx"
            iframe.style = "border:0;position:fixed;top:0;left:0;z-index:999";
            iframe.frameBorder = 0;
            var invoiceConfig = cfg.invoiceConfig;
            //console调试工具,放开上面的JS引用,再放开这个就可以调试
            //var vConsole = new VConsole();
            var pwyWebsocket = new PwyWebSocket({ //参数说明同文档1.0表格,			
                env: invoiceConfig.env,  //正式环境: prod,     测试环境: test
                tin: invoiceConfig.tin, //tin为获取userKey时的税号
                eid: invoiceConfig.eid, //eid为获取userKey时的用户eid
                client_id: invoiceConfig.client_id, // 发票云分配的client_id
                sign: invoiceConfig.sign, // 签名
				encType: invoiceConfig.encType,
                timestamp: invoiceConfig.timestamp, // 签名时的时间戳            
                name: invoiceConfig.name, // 连接名称,选择发票前获取的linkKey
                onOpen: function () { // 连接成功的回调
                    var socketName = this.name;
                    if (socketName != '') {
                        window.addEventListener('popstate', function (e) {
                            if (this.location.hash.indexOf('pwy') < 0) {
                                var fwy = document.getElementById('fwy_qywx');
                                if (fwy) {
                                    fwy.parentNode.removeChild(fwy);
                                }
                            }
                        }, false);
						var iframeId = document.getElementById('fwy_qywx');
                        //console.log('发票云窗口------', iframeId);
                        if (!isOpenSocket && !iframeId) {
                            window.location.hash += '&pwy' + new Date().getTime();
                            //iframe嵌入发票云地址 model=no不显示扫码 attach=no不显示附件 needhash=1发票云针对星空back                        
                            iframe.src = invoiceConfig.basePath + '&socketName=' + socketName + '&app=' + invoiceConfig.app + '&model=' + invoiceConfig.model + '&attach=' + invoiceConfig.attach;
                            document.body.appendChild(iframe);
                        }
                        isOpenSocket = true;
                    } else {
                        alert("未获取到连接名");
                    }
                },
                onMessage: function (msg) { //从发票云采集完发票点击首页推送返回到当前页面时,此处会接收发票数据
                    var serialNos = "";
                    $.each(msg.data, function (index, vaule) {
                        serialNos += vaule.serialNo + ",";
                    });
                    //数据推到后端后关闭websocket
                    pwyWebsocket.close();
                    if (iframe) {                       
                        window.history.go(-1);                        
                        iframe.parentNode.removeChild(iframe);
                        isOpenSocket = false;
                    }
                    $.KDActs.mobileClientRequest(cfg.callBackId, serialNos.substring(0, serialNos.length - 1))
                },
                onError: function (errText, errCode) { //失败时的回调
                    //console.log('与发票云建立连接失败!失败信息errText---', errText);
					//console.log('与发票云建立连接失败!失败信息errCode---', errCode);
                    isOpenSocket = false;
                }
            });
        };

2. 钉钉平台

直接去掉onError弹窗,websoccket会自动重连



【注意事项】

  1、 如果是手动修改的前端文件,补丁升级到为未解决该问题版本的中间补丁时,前端文件会被覆盖,注意提前备份。 

   建议升级补丁处理。

  2、建议在测试环境先修改测试,没问题在迁移到正式环境

掌上报销智能收票对接发票云页面闪回&连接异常解决方案

【问题描述】1、华为鸿蒙手机,在企业微信平台,使用掌上报销上传发票出现闪回现象,无法上传发票2、钉钉、企业微信平台,部分手机掌上报销...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息