code: protected function callOperationAsync($name, \DTS\eBaySDK\Types\BaseType $request, $responseClass)
      {
          /**
           * Modify the request object to add xop:Include element.
           */
          if ($name === 'uploadFile' && $request->hasAttachment()) {
              /**
               * Don't modify a request if the file attachment already exists.
               */
              if (!isset($request->fileAttachment)) {
                  $request->fileAttachment = new \DTS\eBaySDK\FileTransfer\Types\FileAttachment();
              }
  
              if (!isset($request->fileAttachment->Data)) {
                  $request->fileAttachment->Data = new \DTS\eBaySDK\FileTransfer\Types\Data([
                      'xopInclude' => new \DTS\eBaySDK\FileTransfer\Types\XopInclude([
                          'href' => 'cid:attachment.bin@devbay.net'
                      ])
                  ]);
              }
  
              if (!isset($request->fileAttachment->Size)) {
                  $attachment = $request->attachment();
                  $request->fileAttachment->Size = strlen($attachment['data']);
              }
          }
  
          return parent::callOperationAsync($name, $request, $responseClass);
      }
docs: Sends an API request.
  
  This method overrides the parent so that it can modify
  the request object before it is handled by the parent class.
  
  @param string $name The name of the operation.
  @param \DTS\eBaySDK\Types\BaseType $request Request object containing the request information.
  @param string $responseClass The name of the PHP class that will be created from the XML response.
  
  @return \GuzzleHttp\Promise\PromiseInterface A promise that will be resolved with an object created from the XML response.