2012-03-02 2 views

Répondre

7

Le système souhaité est appelé SagePay Form en ce qui concerne la similarité avec le bouton BuyNow de PayPal + le processus PDT. Tout d'abord, vous devez créer un formulaire comme ceci:

<form action="https://live.sagepay.com/gateway/service/vspform-register.vsp" method="POST" id="SagePayForm" name="SagePayForm"> 
    <input type="hidden" name="VPSProtocol" value="2.23" /> 
    <input type="hidden" name="TxType" value="PAYMENT" /> 
    <input type="hidden" name="Vendor" value="<?= $YOUR_VENDOR_LOGIN_NAME ?>" /> 
    <input type="hidden" name="Crypt" value="<?= $PAYMENT_CRYPT ?>">  
    <input type="image" src="images/buynow-sagepay.png" /> 
</form> 

(On peut échanger l'URL en temps réel avec un test d'un ici: https://test.sagepay.com/gateway/service/vspform-register.vsp)

Quant au PAYMENT_CRYPT $, vous devez d'abord créer une chaîne comme ceci:

VendorTxCode=406227821909 
&Amount=32.00 
&Currency=USD 
&Description=1 ACME Widget 
&SuccessURL=http://example.com/success.php 
&FailureURL=http://example.com/fail.php 
&BillingSurname=Smith 
&BillingFirstnames=John 
&BillingAddress1=123 Main Street 
&BillingCity=Anywhere 
&BillingPostCode=29555 
&BillingCountry=USA 
&DeliverySurname=Smith 
&DeliveryFirstnames=John 
&DeliverAddress1=123 Main Street 
&DeliveryCity=Anywhere 
&DeliveryPostCode=29555 
&DeliveryCountry=USA 

Il est un peu stupide pourquoi ils ont besoin certaines de ces informations lorsque PayPal ne est pas, mais oh bien. Les docs disent clairement que la chose commettra une erreur si elle ne reçoit pas des valeurs légitimes comme un vrai code postal qui valide pour cette ville et ce pays, et elle est aussi utilisée pour l'arbitrage des conflits. Notez dans mon exemple qu'il n'y a pas de taxe ou d'expédition comme PP, donc vous aurez besoin de l'afficher si nécessaire avant d'afficher ce bouton BuyNow, ou peut-être sur votre page de confirmation ou email de confirmation que vous envoyez. Ils ont un "& Basket =" paramètre où la taxe peut être spécifiée, mais il est redondant à ce que vous pouvez afficher sur votre page de formulaire et pas nécessaire. Par conséquent, la valeur & Montant doit être la valeur brute et non nette. Il n'y a pas non plus de valeur de quantité (que le paramètre de panier & peut être utilisé pour spécifier). Plus que probablement, vous trouverez le paramètre Panier & juste redondant à ce que vous pouvez déjà afficher sur votre propre formulaire au cours du processus de commande. Donc, c'est pourquoi mon exemple ne l'incluait pas. Comme pour le VendorTxCode, c'est quelque chose que vous créez afin que vous puissiez suivre la commande au client approprié. Ce $ PAYMENT_CRYPT est ensuite chiffré en utilisant le codage XOR + Base64, en utilisant le mot de passe de chiffrement fourni par SagePay. Ils ont une option de chiffrement AES + Binhex, mais c'est trop et votre serveur doit avoir la bibliothèque mcrypt activée. Certains plans d'hébergement partagé STILL n'ont pas encore activé! Ils fournissent un exemple XOR, mais c'est un exemple typique de cours en informatique où vous parcourez chaque code ASCII du mot de passe et chaque code ASCII des données et prenez le complément de l'autre (le processus XOR). Une fois cela fait, alimentez-le via le codage Base64 pour un transfert POST sécurisé. L'encodage Base64 utilise la fonction intégrée de PHP.

La réponse de ceci est plus proche du processus PDT de PayPal que du processus IPN de PayPal. Ils dirigent quelqu'un à success.php et fail.php avec une réponse URL cryptée via GET que vous pouvez déchiffrer et analyser (base64 decode + XOR), mais la difficulté est que le client peut fermer le formulaire avant d'attendre la page pour réorienter. Dans ce cas, on verra cela dans leur panneau de contrôle dans SagePay et devrez remplir la transaction manuellement pour le client.

Sur les success.php et fail.php, c'est à vous de décider ce que vous voulez faire. Une fois que la chaîne de requête & est cryptée, vous pouvez analyser si la transaction est terminée ou non en regardant "OK".

Notez que vous ne devez pas aller directement à success.php. Vous pouvez le rendre comme success.php? Custom = value pour transmettre des informations supplémentaires sur la transaction que vous pouvez analyser.Leur code va automatiquement comprendre ceci et virer sur le paramètre crypt = & à la fin. La même chose vaut avec fail.php.

Ils ont des moyens pour que SagePay envoie des emails au client et au vendeur, mais c'est vraiment exagéré parce que vous pouvez faire la même chose dans votre propre code PHP avec l'instruction mail() lors de la commande.

REFERENCE: Notez que l'URL de doc suivante peut changer dans le futur. Pour obtenir la dernière version du document, visitez le site Web, inscrivez-vous en tant que développeur (un processus de 1 minute), et effectuez une recherche sur "protocole de formulaire".

http://www.sagepay.com/sites/default/files/downloads/sagepayformprotocolandintegrationguidelines_0.pdf

EDIT: New Link (25 octobre 2017)-https://www.sagepay.co.uk/file/25041/download-document/FORM_Integration_and_Protocol_Guidelines_270815.pdf

+0

lien mort bas. J'obtiens l'erreur - 5080: l'enregistrement de transaction de formulaire a échoué. En utilisant l'exemple ci-dessus. Y a-t-il un moyen de déboguer? Y at-il des exemples de travail? Est-ce que la chaîne peut être ajoutée directement dans le formulaire ou doit-on en faire plus? – Jon