-2
イムはロイヤルメールAPI V2を使用しようと、私は火星のコードのためのいくつかの部分@flowersを変更します、と私はこのエラーを見ている「E0004は、スキーマ検証を失敗しました」ロイヤルメールAPI V2
ロイヤルメールのAPIを使用して、任意の1 V2?
は、あなたが注文追跡ID空プット何かを置くとチェックカント
stdClass Object
(
[exceptionDetails] => stdClass Object
(
[exceptionCode] => E0004
[exceptionText] => Failed Schema Validation
)
)
<?php
//ini_set('soap.wsdl_cache_enabled', '1');
ini_set('default_socket_timeout', 120);
ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);
class royalmaillabelRequest
{
private $apiapplicationid = "xxxx1";
private $api_password = "xxxxx!";
private $api_username = "xxxx"; //"mailAPI"
private $api_certificate_passphrase = "xxx";
private $clientid = 'xxxx';
private $api_service_enhancements = "";//14 "E-Mail Notification"
private $DigestPass = '';
private $locationforrequest = 'https://api.royalmail.net/shipping/v2';
private function preparerequest(){
//PASSWORD DIGEST
$date = gmdate('Y-m-d\TH:i:s\Z');
$nonce = mt_rand();
$nonce_date_pwd = pack("A*",$nonce) . pack("A*",$date) . pack("H*", sha1($DigestPass));
$passwordDigest = base64_encode(pack('H*',sha1($nonce_date_pwd)));
$ENCODEDNONCE = base64_encode($nonce);
//SET CONNECTION DETAILS
$soapclient_options = array();
$soapclient_options['cache_wsdl'] = 'WSDL_CACHE_NONE';
$soapclient_options['stream_context']= stream_context_create(
array(
'http' =>
array(
'header' => implode(
"\r\n",
array(
'Accept: application/soap+xml',
'X-IBM-Client-Id: ' . $this->clientid,
'X-IBM-Client-Secret: ' . $this->api_certificate_passphrase,
)
),
),
)
);
#
#
$soapclient_options['trace'] = true;
$soapclient_options['ssl_method'] = 'SOAP_SSL_METHOD_SSLv3';
$soapclient_options['location'] = $this->locationforrequest;
$soapclient_options['soap_version'] = 'SOAP_1_1';// SOAP_1_2
#
#
//launch soap client
$client = new SoapClient(dirname(__FILE__) . "/ShippingAPI_V2_0_9/ShippingAPI_V2_0_9.wsdl", $soapclient_options);
$client->__setLocation($soapclient_options['location']);
#
#
//headers needed for royal mail//D8D094Fd2716E3Es142588808s317
$HeaderObjectXML = '<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-SFSDFSDFY123200401">
<wsse:Username>'.$this->api_username.'</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">'.$passwordDigest.'</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">'.$ENCODEDNONCE.'</wsse:Nonce>
<wsu:Created>'.$created.'</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>';
//push the header into soap
$HeaderObject = new SoapVar($HeaderObjectXML, XSD_ANYXML);
//push soap header
$header = new SoapHeader('http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd', 'Security', $HeaderObject);
$client->__setSoapHeaders($header);
return $client;
}
public function CreateShippiment($data){
$request = $this->buildCreateshippiment($data);
$type = 'createShipment';
return $this->makerequest($type, $request);
}
public function PrintLabel($shipmentNumber,$order_tracking_id){
$time = gmdate('Y-m-d\TH:i:s');
$request = array(
'integrationHeader' => array(
'dateTime' => $time,
'version' => '2',
'identification' => array(
'applicationId' => $this->apiapplicationid,
'transactionId' => $order_tracking_id
)
),
'shipmentNumber' => $shipmentNumber,
'outputFormat' => 'PDF',
);
$type = 'printLabel';
$response = $this->makerequest($type, $request);
return $response->label;
}
private function makerequest($type, $request){
$client = $this->preparerequest();
$response = false;
$times = 1;
while(true){
try {
$response = $client->__soapCall($type, array($request), array('soapaction' => $this->locationforrequest));
//echo "REQUEST:\n" . htmlentities($client->__getLastResponse()) . "\n";
break;
}catch (Exception $e) {
print_r($client->__getLastRequest());
if($e->detail->exceptionDetails->exceptionCode == "E0010" && $times <= 25){
sleep(1.5);
$times++;
continue;
}else{
echo $e->getMessage();
echo "<pre>";
print_r($e->detail);
echo $client->__getLastResponse();
echo "REQUEST:\n" . htmlentities($client->__getLastResponse()) . "\n";
break;
}
}
break;
}
return $response;
}
private function buildCreateshippiment($data2) {
$time = gmdate('Y-m-d\TH:i:s');
$data = new ArrayObject();
foreach ($data2 as $key => $value)
{
$data->$key = $value;
}
$request = array(
'integrationHeader' => array(
'dateTime' => $time,
'version' => '2',
'identification' => array(
'applicationId' => $this->apiapplicationid,
'transactionId' => $data->order_tracking_id
)
),
'requestedShipment' => array(
'shipmentType' => array('code' => 'Delivery'),
'serviceOccurrence' => 1,
'serviceType' => array('code' => $data->api_service_type),
'serviceOffering' => array('serviceOfferingCode' => array('code' => $data->api_service_code)),
'serviceFormat' => array('serviceFormatCode' => array('code' => $data->api_service_format)),
'shippingDate' => date('Y-m-d'),
'recipientContact' => array('name' => $data->shipping_name, 'complementaryName' => $data->shipping_company, 'telephoneNumber' => array('countryCode' => '0044', 'telephoneNumber' => $data->telephoneNumber), 'electronicAddress' => array('electronicAddress'=>$data->electronicAddress)),
'recipientAddress' => array('addressLine1' => $data->shipping_address1, 'postTown' => $data->shipping_town, 'postcode' => $data->shipping_postcode, 'country'=>array('countryCode'=>array('code'=>$data->countryCode))),
'items' => array('item' => array(
'numberOfItems' => $data->order_tracking_boxes,
'weight' => array('unitOfMeasure' => array('unitOfMeasureCode' => array('code' => 'g')),
'value' => $data->order_tracking_weight,
),
//'offlineShipments'=>array('itemID'=>$data->itemID, 'status'=>array('status' => array('statusCode'=>$data->statusCode), 'validFrom'=>$time)),
)
),
//'signature' => 0,
'customerReference' => $data->customerReference,
'senderReference' => $data->senderReference
)
);
//if($data->api_service_enhancements == 6 && $data->api_service_type == 1){
if($api_service_enhancements != "" && strlen($data->electronicAddress)>5) {
$request['requestedShipment']['serviceEnhancements'] = array('enhancementType' => array('serviceEnhancementCode' => array('code' => $data->api_service_enhancements)));
}
return $request;
}
}
$array = array(
'order_tracking_id' =>'',
'api_service_type' =>'T', /// serviceOccurrence
'api_service_code' =>'TPN', // TPN => 24 Tracked, TPS => 48 Tracked
'api_service_format' =>'N', // serviceFormat
#
#
'countryCode' =>'GB',
'order_tracking_boxes' =>'1',
'order_tracking_weight' =>'990',
#
#
'shipping_name' =>'MR John Doe',
'shipping_company' =>'Doe',
'shipping_address1' =>'12 gascony avenue',
'shipping_town' =>'London',
'shipping_postcode' =>'nw6 4na',
#
#
'telephoneNumber' => '07234345500',
'electronicAddress' => '[email protected]',
'customerReference' => 'BY00001',
'senderReference' => 'BY00002'
);
$request = new royalmaillabelRequest();
$response = $request->CreateShippiment($array);
?>
作業コードは変更されました '。$ created。' wsu:Created> to => '。$ date。' wsu:Created> –
Jem