salamek / pplmyapi Goto Github PK
View Code? Open in Web Editor NEWProfessional Parcel Logistic MyApi PHP client implementation with PDF and ZPL label generator
License: GNU Lesser General Public License v3.0
Professional Parcel Logistic MyApi PHP client implementation with PDF and ZPL label generator
License: GNU Lesser General Public License v3.0
Sender for package is not required, but constructor of Package need it. @Salamek Do you want I send PR ?
DepoCode need update request. Currently the system only supports ranges 1 to 24. Request to add support for the following: 41, 44, 46, 48, 61, 62, 65, 66, 67, 96, 98, T2 or rework the setDepoCode method so that it does not throw exception
Hi,
i trying to send a EXPORT package with DOB in the same way "createPackages" for CZ Privat and CZ Business with DOB.
The problem is that the reply message is NULL without error but the package was not created.
Can someone check this or test is if he has the same?
Thank you
Dominik
I was inspire from this video: https://www.youtube.com/watch?v=WcbmBzAWR84 , where we should create validators (classes) for every type of validate (max length, wrong value, ..).
What do you say ?
I will create it ;)
Line 188 in 812b3c3
Nema tady byt ParcelShopCode?
nedari se mi zprovoznit komunikaci s PPL. Pokud otestuji komunikaci dle prikladu
`use Salamek\PplMyApi\Api;
$pplMyApi = new Api();
if ($pplMyApi->isHealthy())
{
echo 'Healthy :)' . PHP_EOL;
}
else
{
echo 'Ill :( --- proste neco je f ....' . PHP_EOL;
}
`
dozvim se, ze je to Healthy :).
Pokud se ale podle prikladu pokusim vytvorit balik
`
use Salamek\PplMyApi\Api;
use Salamek\PplMyApi\Model\Package;
use Salamek\PplMyApi\Model\Recipient;
use Salamek\PplMyApi\Enum\Country;
use Salamek\PplMyApi\Enum\Product;
$username = 'my_api_username';
$password = 'my_api_password';
$customerId = 'my_api_customer_id';
$pplMyApi = new Api($username, $password, $customerId);
$recipient = new Recipient('Olomouc', 'Adam Schubert', 'My Address', '77900', '[email protected]', '+420123456789', 'https://www.salamek.cz', Country::CZ, 'My Compamy a.s.');
$packageNumber = '40950000114';
/* Or you can use Tools::generatePackageNumber to get this number only from $packageSeriesNumberId like 114
$packageSeriesNumberId = 114;
$packageNumberInfo = new PackageNumberInfo($packageSeriesNumberId, Product::PPL_PARCEL_CZ_PRIVATE, Depo::CODE_09);
$packageNumber = Tools::generatePackageNumber($packageNumberInfo); //40950000114
*/
$package = new Package($packageNumber, Product::PPL_PARCEL_CZ_PRIVATE, 'Testovaci balik', $recipient);
try
{
$pplMyApi->createPackages([$package]);
}
catch (\Exception $e)
{
echo $e->getMessage() . PHP_EOL;
}
`
(samozrejme ze mam vyplnene realne prihlasovaci udaje) na strance se nevypise nic ale v error logu ctu tuto zpravu:
PHP Catchable fatal error: Argument 5 passed to Salamek\PplMyApi\Model\Package::__construct() must be an instance of Salamek\PplMyApi\Model\ICityRouting, none given, called in /data/www/domeny/xxx.cz/www/adresar/ppl-test-balik.php on line 44 and defined in /data/www/domeny/xxx.cz/vendor/salamek/ppl-my-api/src/Model/Package.php on line 91
Dekuji z radu.
"DEN"/"Večer" labels are only for PRIVATE packages according to feedback from PPL. I'm willing to contribute if the community is open?
PHP 5.5 <= is no longer supported - http://php.net/supported-versions.php
Up to php 5.6 ? :)
Ahoj,
trosku jsem se ted zapotil, zadaval jsem packageNumber do tridy Package jako cislo ne jako string.
Vim ze tam mas v dokumentaci string, ale nejak jsem to prehledl.
Kvuli tomu kazdopadne zacalo dochazet k chybe TCPDF v souboru tcpdf_barcodes_1d.php, funkce checksum_s25.
Kdyz se tvori stitek tak pouzivas carovy kod typ I25+ coz je I25 i s checksumem, ktery se prave dela ve funkci uvedene vyse checksum_s25 a ta potrebuje aby packageNumber byl string.
Tak mam jen takovy navrh na zlepseni pro hlupaky jako ja ve tride Package kdyztak typecast na string pokud by to tam nekdo zadal jako cislo.
Mi trvalo snad 2 hodiny nez jsem zjistil, co je v carovem kodu spatne a tim vsim prolezl abych si vsiml ze chyba je na moji strane.
PPL již MyAPI nepodporuje, provoz neschválí. Přešli na CPL - API. Štítky už generují na své straně.
Constructor Package requires 6 mandatory arguments, the sixth being "ICityRouting $cityRouting".
But what should I put there, if I am creating Package without routing? https://github.com/Salamek/PplMyApi/blob/master/README.md#create-packages
Hi,
https://github.com/Salamek/PplMyApi/blob/master/src/Api.php#L292
The column name for Order Reference ID is "OrdRefId", not "OrdRefID" (https://myapi.ppl.cz/MyAPI.svc?singleWsdl).
The current field name results in a response "OrdRefId is a mandatory field".
Line 173 in 812b3c3
na konci mas :array ... kdyz to u sebe zmenim na :mixed tak mi to funguje, jinak to vraci chybu Return value must be of type array, stdClass returned
Need test routes for CreatePackages like #14
See notes in https://github.com/Salamek/PplMyApi/blob/master/src/Enum/ReturnCode.php
Critical is
PplMyApi/src/Enum/ReturnCode.php
Line 65 in 28fb964
Where in PDF DOC on page 38 section CreatePackages there is duplicate ID for return code 1054
Hi,
in Sender.php and Recipient.php, there is an issue with setXXXX() functions in case when diacritics are included in the string.
Function strlen() counts 1 character with diacritic as 2 characters, which can lead to the issues.
strlen('Dukelských bojovníků 155/3638'); //32
mb_strlen('Dukelských bojovníků 155/3638'); //29
I'm not sure whether PPL counts with the diacritics or not, but I would recommend either using mb_strlen() instead of strlen() or stripping the diacritics off from all the user input data.
Thanks for the fix.
Login doesn't work? "Fatal error: Uncaught Salamek\PplMyApi\Exception\SecurityException: Pokus o přihlášení byl neúspěšný, zkontrolujte uživatelské jméno a heslo"
pri createPackages sa neodesila PackageSet, tedy hodnoty packageCount a packagePosition
jiz se to resilo v issue #38 , tehdy to nebylo povinne, nyni je tato polozka PPL vyzadovana
Dobry den, je na vas nejake emailove spojeni? Integruju ppl import do nasi aplikace a spolupracuju u toho s integracnim specialistou z ppl a pouzivam vase api a par veci mu na tom vadi. Napriklad ve funkci Tools:generatePackageNumber kde predgenerujete ctyri cisla podle typu produktu, id depa, dobirka-bez dobirky pry neni aktualni. Je mozne ze to pouzivam spatne. Diky.
SSL cert on *.ppl.cz is valid! remove hack from Api.php
https://github.com/Salamek/PplMyApi/blob/master/src/Api.php#L127
to improve security
Pokud použiji vlastní $storage při inicializaci Api (abych mohl pracovat s více auth tokeny - více userů), tak mi tam knihovna na konec přidá /Api a pak dostanu tuhle chybu...
Message: file_put_contents(/tmp/PPL_2/Api): failed to open stream: No such file or directory
Řešením je buď odstanit to přidávání /Api nebo změnit lomítko, obojí funguje:
Na etiketách nemáte uvedený výstupní směr depa tento výstupní smě získáváte z metody Get CitiesRouting
zde je umístění, kde by ten depo code měl být https://1drv.ms/u/s!AoyEPGbZnge3q69edkga0qtF0eDEdw?e=peOFEQ
Podľa pokynov chcem pridať balík pomocou metódy createPackages. Na mojej strane vyzerá všetko OK, pri výpise mi však balík nenájde a tým pádom request zrejme neprechádza
výber kódu
$recipient = new Salamek\PplMyApi\Model\Recipient('Olomouc', 'Adam Schubert', 'My Address', '77900', '[email protected]', '+420123456789', 'http://www.salamek.cz', Country::CZ, 'My Compamy a.s.');
$package = new Salamek\PplMyApi\Model\Package($packageNumber, Product::PPL_PARCEL_CZ_PRIVATE, $weight, 'Testovaci balik', Depo::CODE_09, $recipient);
$pplMyApi->createPackages([$package]);
nevyskočí mi žiadna chyba. testovacie údaje mám z podpory. uvádzam request aj response
REQUEST HEADERS:
POST /MyAPI.svc HTTP/1.1
Host: myapi.ppl.cz
Connection: Keep-Alive
User-Agent: PHP-SOAP/7.1.22
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://myapi.ppl.cz/v1/IMyApi2/CreatePackages"
Content-Length: 1541
REQUEST BODY:
RUFBQUFJakpFWllfdHBKbmxhTzlsVDQ0TFJqWW90X1hrSzh2MWxBV1hrQnVnYjl1cGU4cnpDdlBSOFpwX1hMd0JheEFnaURwS0wzRTVwM0VLLTdlOTZvZEVINXJxTkhrZDRTSTlURzZYazZEdEljdlVrSFQ5T2tQUXA2Q3V5T2c5dl9ZYXB2cy1CcWQxQ24wRnlIOEVZWXluMmc0NjBHa21UM2FBMVJlSDJiMkh6N2M4YzVtbEk0NThjUzlhZzBWdlplckdONkxZakxKUVlEWWh0ckI2QjlSSjV6ZEY0cFU4cFJpX2tSTHNFdU9jY3BvSmVtclByZmV2X3lmTjc0ay1YSUZydzI=4005058832913Testovaci balik09Olomouchttp://[email protected] SchubertMy Compamy a.s.+420123456789My Address77900
RESPONSE HEADERS:
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Length: 763
Content-Type: text/xml; charset=utf-8
Server:
Strict-Transport-Security: max-age=31536000
X-Frame-Options: DENY
X-Powered-By:
X-Powered-By:
Date: Mon, 01 Oct 2018 20:13:50 GMT
RESPONSE BODY:
RUFBQUFCY3FWNkg3cTBka0EtSU9zTTZmN2Fmcmxvd25YX2szTFNNNHd1QTZaQ0lZaEp4Q2xBRVU4MTJWT0xDSlJ2ejFGRXk1Zkd3RC1HVWkwRTZMcTE2d1VNUV80c05DSk1scHFOdlRnakpTUFExSEhzc05UT2NkT1oyekw0YlVXd3JTUk1QaGswMS05VXVVR0VTOWh5d1IxSFRhdEhoSm04a2xQTVhsY1VBS0s1TFpMWnBTZG9KNlNuQmRjNWxzeFZlV242cDFfVW5kb2FHWlZ0OVd3SUtCd2VmODVBVENMdF9ZQU5oUkNMSVRSMllHWnFpdThIdDdzTDBkZG9mcy1WTm5aQTI=040050588329)
viete prosím poradiť čo robím zle?
U exportů balíků pomocí metody createPackages nelze nastavit adresu pro vrácení při neúspěšném doručení. Podle dokumentace by to v requestu položka AddressesForServices.
I noticed there's a minor typo in the createPickupOrders method within the Api.php class.
The soap request parameter 'MyApiPickUpOrderIn' should be 'MyApiPickupOrderIn' based on the official PPL myApi documentation.
Would it be possible to fix it ?
I'm using v1.3.3 for project compatibility reasons (can't use the newest version, don't have the PHP v7 support), anyway as a browse the code, the problem occurs in the newest version as well.
In Api.php
file on line 475, key name should be WeightedPackageInfo
instead of WeightedPackageInfoIn
. I've checked it against the current WSDL version.
Currently, the WeightedPackageInfo
is not sent to API at all.
When I changed it manually in my project, it worked.
Would it be possible to update the file?
Thank you.
Use getMockFromWsdl
?
Hello, I encountered such a problem, I want to create a package and do everything according to your documentation, but the package does not meet (at least it does not appear on https://klient.ppl.cz/zasilka.aspx), the server is responding (Code : "0", ITEMKEY: "40950942614", Message: null). Tell me what am I doing wrong !? Thank you in advance
$recipient = $this->getRecipient();
$sender = $this->getSender();
$weight = 0.5;
$packageSeriesNumberId = 942614;
$packageNumberInfo = new PackageNumberInfo($packageSeriesNumberId,
Product::PPL_PARCEL_CZ_BUSINESS_COD, Depo::CODE_09);
$packageNumber = Tools::generatePackageNumber($packageNumberInfo);
$package = new Package($packageNumber, Product::PPL_PARCEL_CZ_PRIVATE,
$weight, null, Depo::CODE_09, $recipient, $sender);
try
{
dump($this->ppl->createPackages([$package]));
}
catch (\Exception $e)
{
echo $e->getMessage() . PHP_EOL;
}
Ahoj, proc z Api zmizela metoda getParcelShopsByCity? Potrebuji vytahovat jen parcelshopy pro dane mesto a prislo mi to fajn. Dik
Dobrý den,
moc prosím, proč toto nefunguje? (přihlašovací údaje zde samozřejmě neuvádím)
<?php
/*
* přidá novou zásilku do PPLka
*/
mb_internal_encoding("UTF-8");
$mojeID = '';
$mojeHeslo = '';
$mojePrihlasovaciJmeno = '';
/*
* dotaz - logování pro získání HASHe k provedení následných úkonů
*/
$xmlProHash = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:v1=\"http://myapi.ppl.cz/v1\"> <soapenv:Header/>
<soapenv:Body>
<v1:Login> <v1:Auth>
<v1:CustId>$mojeID</v1:CustId>
<v1:Password>$mojeHeslo</v1:Password>
<v1:UserName>$mojePrihlasovaciJmeno</v1:UserName>
</v1:Auth> </v1:Login>
</soapenv:Body> </soapenv:Envelope>";
$url = 'https://myapi.ppl.cz/v1/IMyApi2/Login';
function sendXmlOverPost($url, $xml) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
// For xml, change the content-type.
curl_setopt ($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // ask for results to be returned
// Send to remote and return data to caller.
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
/*
* test výstupu
*/
$result = sendXmlOverPost($url, $xmlProHash);
echo '<pre>';
var_dump($result);
$a = simplexml_load_string($result);
var_dump($a);
pri createPackages sa neodosiela PackageSet, teda hodnoty packageCount a packagePosition
I would like to be able to set first label position on page when generating labels using quarter decomposition.
When you print only one label, use it and later on you would like to reuse the rest of the paper, you have to start printing labels from 2nd, 3rd or 4th position on the paper. It would be useful to allow configuration of the starting position in function call.
Currently it's hardcoded like that:
$quarterPosition = LabelPosition::TOP_LEFT;
It would be useful to move it to method parameter with default value.
Zdravím,
chci se zeptat proč po dvou dnes testování mi najednou API hází tento error? (do API contructoru jsem si jen přidal error message). Na kód sem od včera nijak nesahal, najednou toto.
Failed to build soap client: SOAP-ERROR: Parsing WSDL: Couldn't load from 'https:\/\/myapi.ppl.cz\/MyApi.svc?singleWsdl' : failed to load external entity \"https:\/\/myapi.ppl.cz\/MyApi.svc?singleWsdl\"\n
Díky, Rukes :)
Obchoďák stále není spokojen a vymýšlí hlouposti v metode CreatePackages chybí tyto věci:
<Flags> <MyApiFlag> <Code>SL</Code> <Value>1</Value> </MyApiFlag> </Flags>
Dále vícekusé balíky - i když balík není vícekusý a nebudeme je používat, podle dokumentace je to pole povinné: PackageSet a MasterPackNumber
Zdravím přátelé,
Integruji do svého eshopu PPL a chtěl bych využít tohle řešení ke generování a tisknutí štítků k objednávkám. Úspěšně sem tedy prošel nastavením všeho potřebného až sem se dostal k samotnému generování ZPL a PDF souboru obsahující objednávku. Vše se povedlo v pořádku jediný problém mám že když přečtu barcode (at už ten example co je v testu nebo ikdyž si udělám vlastní PDF , ZPL) tak tam mám vždy nakonci nějakou číslici navíc. Zkoušel sem čtečku přes mobil zkoušel sem i kod vyříznout a zkoušel to protáhnout barcode readery online a vždy tam mám číslo navíc.
Zde screenshot:
https://imgur.com/a/t6Ilg6W
číslo té objednávky by mělo být 40950000196
Nevím proč tam je ta nula navíc. Můžete mi prosím případně někdo říct kde je chyba případně ověřit že se nejedná o bug?
Děkuji moc jinak skvělá práce.
Did you ever used ZPL labels?
https://pastebin.com/dpd70REX -> http://labelary.com/viewer.html
How to contribute? Extend Label class, or create new ZplLabel class?
Když si pomocí Tools::generatePackageNumber chci vygenerovat package number pro parcelshop (product type 46/47) tak dostanu exception Unknown packageProductType
V Enum/Product jsou to konstanty PPL_PARCEL_CZ_SMART a PPL_PARCEL_CZ_SMART_COD
Jinak pro parcelshopy jsme dostali číselnou řadu 71200042447 a pro dobírku 71280086080 (podle dokumenatce 8 a 9 znamená dobírku ... tady je zrovna ten případ kdy tam místo 9 dají 8 a pro nedobírku 0)
Tak pan obchoďák nám to zase nechce uznat...vadí mu, že označení parcelshopu (name2) máme dole u telefonního čísla. Má být pod jménem příjemce.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.