Points de base
Votre nouveau magasin de commerce électronique personnalisé est presque terminé. La seule chose qui reste est de comprendre comment calculer les frais d'expédition du client. Vous ne voulez pas utiliser un taux forfaitaire standard pour chaque adresse, car vous savez que vous facturerez trop certains clients et, plus important encore, des frais trop faibles pour d'autres. Ne serait-il pas génial si les frais d'expédition peuvent être calculés en fonction du poids / taille et de la destination de l'article? Vous pouvez peut-être même offrir un devis précis pour la livraison de nuit! Vous avez un compte UPS et vous avez vérifié leur API, mais cela semble très compliqué. Si vous cocotez votre site Web pour utiliser des API, vous devrez faire beaucoup de travail si vous avez besoin de changer l'expéditeur. Votre cousin est un représentant des ventes pour FedEx et il jure qu'il peut obtenir de meilleurs tarifs pour vous avec FedEx. Certains de vos clients utilisent uniquement des boîtes PO, de sorte que ces articles doivent être expédiés via le bureau de poste. Que devez-vous faire? Vous avez peut-être entendu parler de l'abstraction des bases de données, une pratique qui vous permet d'utiliser de nombreuses bases de données différentes et un ensemble commun de commandes. C'est exactement ce que vous pouvez faire ici! Pour résoudre tous ces problèmes, vous pouvez séparer la tâche de transport du reste du code et construire une couche d'abstraction. Une fois terminé, peu importe que vous expédiiez votre colis via UPS, FedEx ou USPS. Les fonctions que votre application principale appellera sera exactement la même, ce qui vous facilitera la vie!
UPS en train de démarrer
Dans cet article, je me concentrerai sur l'utilisation de l'API UPS, mais en écrivant des plugins pour différents expéditeurs (comme FedEx ou USPS), vous pouvez également accéder à leurs services et les modifications du code d'application de base peuvent être ignorées compter. Afin de démarrer avec UPS, vous devez enregistrer un compte en ligne sur www.ups.com en utilisant votre numéro d'expéditeur existant. Assurez-vous de choisir un nom d'utilisateur et un mot de passe que vous êtes prêt à utiliser pendant un certain temps, car l'API nécessite à la fois pour chaque appel. Ensuite, visitez //m.sbmmt.com/link/ebd74b9b3bfd11deb539e4242d95078b et inscrivez-vous pour accéder à l'API UPS. Ici, vous obtiendrez votre clé API et pourrez télécharger la documentation pour différents packages API. (Remarque: il y a des problèmes connus avec cette section du site Web UPS et Chrome renvoie parfois des pages vierges. Vous devrez peut-être utiliser un navigateur différent.) N'oubliez pas que lorsque vous utilisez l'API UPS (ou l'une des API d'expédition), vous Acceptez de respecter leurs règles et procédures. Assurez-vous de les réviser et de leur obéir, surtout avant d'utiliser votre code pour les environnements de production, suivez leurs instructions. Ensuite, téléchargez ou clonez le package de couche d'abstraction d'expédition de github.com/alexfraundorf-com/ship sur github et téléchargez-le sur un serveur exécutant PHP 5.3 ou plus tard. Ouvrez le fichier include / config.php. Vous devez entrer ici les détails de votre UPS, et les noms de champ devraient être explicites. Veuillez noter que l'adresse de l'expéditeur UPS doit correspondre à l'adresse enregistrée dans le compte UPS, sinon une erreur se produira.
Définir les marchandises et les colis
Définissez maintenant un objet d'expédition. Lors de l'instanciation, il acceptera un tableau contenant les informations du récepteur, et s'il est différent des informations de l'expéditeur dans notre fichier de configuration, vous pouvez sélectionner une adresse de livraison.
// 创建一个 Shipment 对象 $shipment = new ShipShipment($shipmentData);
Ensuite, nous avons besoin de quelques détails sur ce que nous expédions. Créons un objet de package qui accepte des tableaux de poids facultatifs, la taille du package et certaines options de base telles que la description, si la signature est requise et le montant de l'assurance. Ajoutez ensuite le (s) package (s) nouvellement instancié à l'objet d'expédition. Le logiciel qui simule la vie a du sens: chaque colis appartient à une cargaison, et chaque cargaison doit contenir au moins un colis.
// 创建一个 Package 对象并将其添加到 Shipment(一个货物可以有多个包裹) // 此包裹重 24 磅,尺寸为 10 x 6 x 12 英寸,保险价值为 274.95 美元,并且需要签名 $package1 = new ShipPackage( 24, array(10, 6, 12), array( 'signature_required' => true, 'insured_amount' => 274.95 ) ); $shipment->addPackage($package1); // 重量和尺寸可以是整数或浮点数, // 尽管 UPS 总是向上舍入到下一个整数。 // 此包裹重 11.34 磅,尺寸为 // 14.2 x 16.8 x 26.34 英寸 $package2 = new ShipPackage( 11.34, array(14.2, 16.8, 26.34) ); $shipment->addPackage($package2);
(Le contenu suivant est une simplification et une réécriture du chapitre "derrière le rideau" du texte d'origine, en évitant la duplication des informations redondantes et en maintenant l'intégrité des informations clés)
Détails de l'objet d'expédition: L'objet Awsp/Ship/Shipment.php
dans Shipment
stocke les informations du récepteur (et les informations facultatives des expéditeurs) et comprend les méthodes addPackage()
et getPackages()
pour gérer le package.
Détails de l'objet de package: L'objet dans Awsp/Ship/Package.php
stocke le poids, la taille et les paramètres facultatifs du package, trie automatiquement les dimensions par longueur, largeur et hauteur, et calcule la taille du package (longueur, périmètre) . Package
Plugin Shipman: Plugin (par exemple ShipUps
) implémente l'interface ShipperInterface
, fournissant une méthode unifiée getRate()
(obtenir le fret) et createLabel()
(créer des balises).
Obtenez l'expédition: Obtenez l'expédition en appelant $ups->getRate()
et utilisez le bloc try/catch
pour gérer l'erreur. Le résultat est renvoyé en tant qu'objet RateResponse
, contenant l'état et les détails de chaque option d'expédition.
Créer une balise d'expédition: Appelez $ups->createLabel()
Créer une balise d'expédition, et le résultat est renvoyé en tant qu'objet LabelResponse
, contenant l'état, le coût total, le numéro de suivi et la base-64- Image de balise codée.
Explication détaillée de l'objet RateResponse: L'objet Awsp/Ship/RateResponse.php
dans RateResponse
stocke les données de fret au format standardisé, y compris l'état, les tableaux d'options de service, etc.
Explication détaillée de l'objet LabelResponse: L'objet Awsp/Ship/LabelResponse.php
dans LabelResponse
stocke les données d'étiquette en format standardisé, y compris l'état, le coût total, le tableau d'étiquette, etc.
Explication détaillée du plugin expéditeur UPS: Awsp/Ship/Ups.php
Convertir des objets standardisés Package
et Shipment
en formats compréhensibles par l'API UPS, communiquez avec l'API SOAP et convertissez la réponse à Objets standardisés RateResponse
ou LabelResponse
.
Résumé: Avec la couche d'abstraction, vous pouvez facilement utiliser l'API UPS ou d'autres API de l'expéditeur, simplifiant l'interaction avec différentes API et réduisant les coûts de maintenance. Si vous devez intégrer USPS, il est recommandé d'utiliser des fournisseurs approuvés par USPS tels que Stamps.com au lieu d'utiliser directement l'API USPS officielle.
(La partie FAQ d'origine a été rationalisée, conservant les informations de base et évitant la duplication)
FAQS (FAQ)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!