/** * Sends an API request. * * This method overrides the parent so that it can modify * the request object before 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 The name of the PHP class that will be created from the XML response. * * @return mixed A response object created from the XML respose. */ protected function callOperation($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::callOperation($name, $request, $responseClass); }
/** * Sends an API request. * * This method overrides the parent so that it can modify * the request object before 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 The name of the PHP class that will be created from the XML response. * * @return mixed A response object created from the XML respose. */ protected function callOperation($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 = '<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:attachment.bin@devbay.net"/>'; } if (!isset($request->fileAttachment->Size)) { $attachment = $request->attachment(); $request->fileAttachment->Size = strlen($attachment['data']); } } return parent::callOperation($name, $request, $responseClass); }
/** * Builds the request body string. * * @param \DTS\eBaySDK\Types\BaseType $request Request object containing the request information. * * @return string The request body. */ private function buildRequestBody(\DTS\eBaySDK\Types\BaseType $request) { if (!$request->hasAttachment()) { return $request->toRequestXml(); } else { return $this->buildXopDocument($request) . $this->buildAttachmentBody($request->attachment()); } }
/** * Helper function that builds the HTTP request headers. * * @param string $name The name of the operation. * @param \DTS\eBaySDK\Types\BaseType $request Request object containing the request information. * @param string $body The request body. * * @return array An associative array of HTTP headers. */ private function buildRequestHeaders($name, $request, $body) { $headers = $this->getEbayHeaders($name); if ($request->hasAttachment()) { $headers['Content-Type'] = 'multipart/related;boundary=MIME_boundary;type="application/xop+xml";start="<*****@*****.**>";start-info="text/xml"'; } else { $headers['Content-Type'] = 'text/xml'; } $headers['Content-Length'] = strlen($body); return $headers; }