QBWC Logfile and server logs not matching, cannot connect application to QBWC

Trying to add an application to QBWC and the server logs show a successful connection:

 2024-07-24 12:18:32 serverVersion called
 2024-07-24 12:18:32 clientVersion called with version: 34.0.1001.27
 2024-07-24 12:18:32 authenticate called with username: Admin, password: 0Jltest1
 2024-07-24 12:18:32 Authentication successful, ticket: 66a0f118a2ff0

However QBWC fails with this error:

 20240724.12:21:56 UTC  : QBWebConnector.SOAPWebService.do_authenticate() : QBWC1012: 
 Authentication failed due to following error message.
 Object reference not set to an instance of an object.
 More info:
 StackTrace =    at QBWebConnector.WebService.do_authenticate(String& ticket, String& companyFileName)

here is the full QBWC logfile:

 20240724.12:21:55 UTC  : QBWebConnector.WebServiceManager.DoUpdateSelected() : 
 updateWS() for application = 'OJL QuickBooks Integrator Main' has STARTED
 20240724.12:21:55 UTC  : QBWebConnector.RegistryManager.getUpdateLock() : HKEY_CURRENT_USERSoftwareIntuitQBWebConnectorUpdateLock = FALSE
 20240724.12:21:55 UTC  : QBWebConnector.RegistryManager.setUpdateLock() : HKEY_CURRENT_USERSoftwareIntuitQBWebConnectorUpdateLock has been set to True
 20240724.12:21:55 UTC  : QBWebConnector.RegistryManager.setUpdateLock() : ********************* Update session locked *********************
 20240724.12:21:55 UTC  : QBWebConnector.SOAPWebService.instantiateWebService() : Initiated connection to the following application.
 20240724.12:21:55 UTC  : QBWebConnector.SOAPWebService.instantiateWebService() : AppName: OJL QuickBooks Integrator Main
 20240724.12:21:55 UTC  : QBWebConnector.SOAPWebService.instantiateWebService() : AppUniqueName (if available): OJL QuickBooks Integrator Main
 20240724.12:21:55 UTC  : QBWebConnector.SOAPWebService.instantiateWebService() : AppURL: https://ojlforklifts.com/wp-content/themes/responsive-mobile-child/inc/qb/qbwc_handler.php
 20240724.12:21:55 UTC  : QBWebConnector.SOAPWebService.do_serverVersion() : *** Calling serverVersion().
 20240724.12:21:55 UTC  : QBWebConnector.SOAPWebService.do_serverVersion() : Received from serverVersion() following parameter:<serverVersionRet="">
 20240724.12:21:55 UTC  : QBWebConnector.SOAPWebService.do_serverVersion() : This application sent a null for server version. Allowing update operation.
 20240724.12:21:55 UTC  : QBWebConnector.SOAPWebService.do_clientVersion() : *** Calling clientVersion() with following parameter:<productVersion="34.0.1001.27">
 20240724.12:21:56 UTC  : QBWebConnector.SOAPWebService.do_clientVersion() : Received from clientVersion() following parameter:<clientVersionRet="">
 20240724.12:21:56 UTC  : QBWebConnector.SOAPWebService.do_clientVersion() : This application agrees with the current version of QBWebConnector. Allowing update operation.
 20240724.12:21:56 UTC  : QBWebConnector.SOAPWebService.do_authenticate() : Authenticating to application 'OJL QuickBooks Integrator Main', username = 'Admin'
 20240724.12:21:56 UTC  : QBWebConnector.SOAPWebService.do_authenticate() : *** Calling authenticate() with following parameters:<userName="Admin"><password=<MaskedForSecurity>
 20240724.12:21:56 UTC  : QBWebConnector.SOAPWebService.do_authenticate() : QBWC1012: 
  Authentication failed due to following error message.
  Object reference not set to an instance of an object.
  More info:
  StackTrace =    at QBWebConnector.WebService.do_authenticate(String& ticket, String& companyFileName)
  Source = QBWebConnector
  20240724.12:21:56 UTC : QBWebConnector.RegistryManager.setUpdateLock() : HKEY_CURRENT_USERSoftwareIntuitQBWebConnectorUpdateLock has been set to False
  20240724.12:21:56 UTC : QBWebConnector.RegistryManager.setUpdateLock() : ********************* Update session unlocked *********************
  20240724.12:21:56 UTC : QBWebConnector.WebServiceManager.DoUpdateSelected() : Update completed with errors. See log (QWClog.txt) for details.

here is my QWC file ojlmain.qwc:

<?xml version="1.0"?>
<QBWCXML>
<AppName>OJL QuickBooks Integrator Main</AppName>
<AppID>OJL Main App</AppID>
<AppURL>https://mydomain//inc/qb/qbwc_handler.php</AppURL>
<AppDescription>OJL Quickbooks</AppDescription>
<AppSupport>https://mydomain/inc/qb/support.php</AppSupport>
<UserName>Admin</UserName>
<OwnerID>{6a342688-24f0-4435-b3f7-b1597948b0f7}</OwnerID>
<FileID>{57F3B9B6-86F1-4FCC-B1FF-684DE28867R6}</FileID>
<CertURL>https://ojlforklifts.com/</CertURL>
<QBType>QBFS</QBType>
<Style>Document</Style>
<IsReadOnly>false</IsReadOnly>
</QBWCXML>

Here is my handler code

<?php
 class QuickBooksHandler
 {
private $username = 'Admin';
private $password = '0JlFork#1';
private $logFile;

public function __construct() {
    // Create a log file if it doesn't exist and set permissions
    $this->logFile = __DIR__ . '/qbwc.log';
    if (!file_exists($this->logFile)) {
        file_put_contents($this->logFile, '');
        chmod($this->logFile, 0666);
    }
}

private function log($message) {
    file_put_contents($this->logFile, date('Y-m-d H:i:s') . ' ' . $message . PHP_EOL, FILE_APPEND);
}

public function authenticate($username, $password)
{
    $this->log("authenticate called with username: $username, password: $password");

    if ($username == $this->username && $password == $this->password) {
        $ticket = uniqid();
        $this->log("Authentication successful, ticket: $ticket");
        return [
            'authenticateResult' => [
                'string' => [$ticket, '', '', '']
            ]
        ];
        
    } else {
        $this->log("Authentication failed");
        return [
            'authenticateResult' => [
                'string' => ['nvu']
            ]
        ];
    }
}

public function sendRequestXML($ticket, $strHCPResponse, $strCompanyFileName, $qbXMLCountry, $qbXMLMajorVers, $qbXMLMinorVers)
{
    $this->log("sendRequestXML called with ticket: $ticket, company file: $strCompanyFileName");

    $qbxml = '<QBXML>
                  <QBXMLMsgsRq onError="stopOnError">
                       
                  </QBXMLMsgsRq>
              </QBXML>';
    $this->log("Request XML: $qbxml");
    return ['string' => $qbxml];
}

public function receiveResponseXML($ticket, $response, $hresult, $message)
{
    $this->log("receiveResponseXML called with ticket: $ticket, response: $response, hresult: $hresult, message: $message");

    return ['int' => 100]; // 100% done
}

public function serverVersion()
{
    $this->log("serverVersion called");
    return ['string' => '1.0'];
}

public function clientVersion($strVersion)
{
    $this->log("clientVersion called with version: $strVersion");
    return ['string' => '']; // return empty string if client version is supported
}

public function closeConnection($ticket)
{
    $this->log("closeConnection called with ticket: $ticket");
    return ['string' => 'Connection closed'];
}

public function __call($method, $args)
{
    $this->log("Method $method not found");
    return new SoapFault("Server", "Method not found");
}
}
$options = [
'uri' => 'https://mydomain/inc/qb/qbwc.wsdl',
'encoding' => 'UTF-8'
];
$server = new SoapServer(null, $options);
$server->setClass('QuickBooksHandler');
$server->handle();

No matter what changes i make, the server logfile will always show successful along with a ticket number, but QBWC always shows the same error.

I have searched for a few days on this even asked the question on Intuit Developer site, no answers and i cant find a specific article about my particular problem, i have tried several changes, verbose logging registry changes and server changes, to no avail.

Any help would be appreciated, thanks in advance.

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật