我一直在与皇家邮件运输肥皂api争斗一段时间,我没有到达任何地方。我得到的错误是验证错误,但它并没有告诉我什么是不对的。
我尝试了皇家邮政提供的示例代码,但似乎也没有正常工作。
有没有人有一个真正基本的xml示例来创建货件?
由于
答案 0 :(得分:0)
<?php
ini_set('soap.wsdl_cache_enabled', 1);
ini_set('soap.wsdl_cache_ttl', 1);
class royalmaillabelRequest
{
private $apiapplicationid = "application id";
private $api_password = "password ";
private $api_username = ""; //"rxxxxxAPI"
private $locationforrequest = 'https://api.royalmail.net/shipping/v2';
private $api_service_enhancements = "";
private function preparerequest()
{
//PASSWORD DIGEST
$api_password = "";
$clientId = ""; //royal mail credentials
$clientSecret = "";
$time = gmdate('Y-m-d\TH:i:s');
$created = gmdate('Y-m-d\TH:i:s\Z');
$creationDate = gmdate('Y-m-d\TH:i:s\Z');
$nonce = mt_rand();
$nonce_date_pwd = $nonce . $creationDate . base64_encode(sha1($api_password, TRUE));
$passwordDigest = base64_encode(sha1($nonce_date_pwd, TRUE));
$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: ' . $clientId,
'X-IBM-Client-Secret: ' . $clientSecret
))
)
));
$soapclient_options['trace'] = true;
$soapclient_options['ssl_method'] = 'SOAP_SSL_METHOD_SSLv3';
$soapclient_options['location'] = $this->locationforrequest;
$soapclient_options['soap_version'] = 'SOAP_1_1';
//launch soap client
$client = new SoapClient(dirname(__FILE__) . "/SAPI/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-D8D094FC22716E3EDE14258880881317">
<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;
}
public function PrintDocument($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,
'documentName' => 'CN22',
'documentCopies' => '1',
'documentFormat' => 'PDF'
);
$type = 'printDocument';
$response = $this->makerequest($type, $request);
return $response->internationalDocument;
}
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($e);
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
),
'recipientAddress' => array(
'addressLine1' => $data->shipping_address1,
'addressLine2' => $data->shipping_address2,
'addressLine3' => $data->shipping_county,
'stateOrProvince' => array(
stateOrProvinceCode => array(
name => $data->shipping_county
)
),
'postTown' => $data->shipping_town,
'postcode' => $data->shipping_postcode,
'country' => array(
'countryCode' => array(
'code' => 'US'
)
)
),
'items' => array(
'item' => array(
'numberOfItems' => $data->order_tracking_boxes,
'weight' => array(
'unitOfMeasure' => array(
'unitOfMeasureCode' => array(
'code' => 'g'
)
),
'value' => $data->order_tracking_weight
)
)
),
// 'internationalInfo' => array('parcels' => array('parcel' => array( 'weight' => array( 'unitOfMeasure' => array('unitOfMeasureCode' => array('code' => 'g')),
// 'value' => $data->parcel_weight)),
// 'purposeOfShipment'=> '999',
// 'contentDetails' => $data->content
// )
// ),
'senderReference' => $data->sendersReference
//'signature' => 0,
)
);
if ($data->api_service_enhancements == 6 && $data->api_service_type == 1) {
$request['requestedShipment']['serviceEnhancements'] = array(
'enhancementType' => array(
'serviceEnhancementCode' => array(
'code' => $data->api_service_enhancements
)
)
);
}
return $request;
}
}
// $new= new royalmaillabelRequest();
// $data['order_tracking_id']="";
// $data['api_service_type']="";
// echo $data['api_service_code']="";
// $data['api_service_format']="";
// $data['shipping_name']="";
// $data['shipping_company']="";
// $data['shipping_address1']="";
// $data['shipping_address2']="";
// $data['shipping_town']="";
// $data['shipping_postcode']="";
// $data['order_tracking_boxes']="";
// $data['order_tracking_weight']="";
// $data['api_service_enhancements']="";
// $data['value']="600";
// $data['shipping_postcode']="123456";
// $data['serviceEnhancementCode']="";
// $new->CreateShippiment($data);
?>