IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Comment faire des achats en ligne via l'API PayPal

Date de publication : 23/03/2011.


IV. Paiement par PayPal
IV-A. Code
IV-B. Conclusion


IV. Paiement par PayPal


IV-A. Code

Tout d'abord, importez les namespaces suivants:
Imports com.paypal.soap.api
	Imports com.paypal.sdk.profiles
	Imports com.paypal.sdk.services
L'achat d'article via Paypal se fait en différentes étapes:

  • 1e étape: SetExpressCheckout, qui renvoie un Token
  • 2e étape: GetExpressCheckoutDetails, qui renvoie les informations sur l'utilisateur PayPal
  • 3e étape: DoExpressCheckoutPayment, qui renvoie le résultat de la Transaction
Dans l'exemple suivant l'utilisateur Paypal réalise un achat de 3 articles:
Public Property panier As Panier

    Public ReadOnly Property Action As String
        Get
            Return Request.QueryString("action")
        End Get
    End Property

    Public ReadOnly Property Token As String
        Get
            Return Request.QueryString("token")
        End Get
    End Property

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Page.IsPostBack Then
            LoadData()
            If String.IsNullOrEmpty(Action) Then
                Dim token As String = PaiementParPayPal_Etape1()
                Dim payPalUrl As String = String.Format(My.Settings.PayPalIdentificationURL, token)
                Response.Redirect(payPalUrl)

            ElseIf Action = "return" Then
                Response.Write(PaiementParPayPal_Etape3)

            ElseIf Action = "cancel" Then
                Response.Write("Transaction annulée")
            End If
        End If
    End Sub

    Private Sub LoadData()
        Dim prd1 As Produit = New Produit(1, "Visual Studio", 1000, 10)
        Dim prd2 As Produit = New Produit(2, "MSDN", 500, 5)
        Dim prd3 As Produit = New Produit(3, "Formation", 100, 1)

        panier = New Panier(prd1, prd2, prd3)
    End Sub

    Public Function PaiementParPayPal_Etape1() As String
        'Profile Paypal
        Dim profile As IAPIProfile = ProfileFactory.createSignatureAPIProfile()
        profile.APIUsername = My.Settings.Username
        profile.APIPassword = My.Settings.Password
        profile.APISignature = My.Settings.Signature
        profile.Environment = My.Settings.Environment

        'Pays
        Dim paysPayPal As CountryCodeType
        If [Enum].IsDefined(GetType(CountryCodeType), "FR") Then
            paysPayPal = CType([Enum].Parse(GetType(CountryCodeType), "FR"), CountryCodeType)
        End If

        'Client
        Dim client As New PersonNameType
        client.Salutation = "M"
        client.FirstName = "Jean"
        client.LastName = "Dupont"

        Dim addresse As New AddressType
        addresse.Name = client.Salutation + " " + client.FirstName + " " + client.LastName
        addresse.Street1 = "22 rue du Paradis"
        addresse.Street2 = ""
        addresse.CityName = "Mérignac"
        addresse.PostalCode = "33700"
        addresse.CountryName = "France"
        addresse.Country = paysPayPal
        addresse.CountrySpecified = True

        Dim payeur As New PayerInfoType
        payeur.Payer = "jean.dupont@test.fr"
        payeur.PayerID = ""
        payeur.PayerStatus = PayPalUserStatusCodeType.unverified
        payeur.PayerCountry = paysPayPal
        payeur.PayerCountrySpecified = True
        payeur.Address = addresse
        payeur.PayerName = client

        Dim codeMonnaiePayPal As CurrencyCodeType
        If [Enum].IsDefined(GetType(CurrencyCodeType), "EUR") Then
            codeMonnaiePayPal = CType([Enum].Parse(GetType(CurrencyCodeType), "EUR"), CurrencyCodeType)
        End If

        Dim montantHT As New BasicAmountType
        montantHT.currencyID = codeMonnaiePayPal
        montantHT.Value = panier.GetMontantHT.ToString("N")

        Dim montantTaxe As New BasicAmountType
        montantTaxe.currencyID = codeMonnaiePayPal
        montantTaxe.Value = panier.GetMontantTaxe.ToString("N")

        Dim montantTTC As New BasicAmountType
        montantTTC.currencyID = codeMonnaiePayPal
        montantTTC.Value = panier.GetMontantTTC.ToString("N")

        Dim panierPaypal As New List(Of PaymentDetailsItemType)
        For Each produit As Produit In panier.Produits
            Dim quantite As Integer = panier.Produits.Where(Function(p) p.ID = produit.ID).Count

            Dim produitPayPal As New PaymentDetailsItemType
            produitPayPal.Number = produit.ID.ToString
            produitPayPal.Name = produit.Nom
            produitPayPal.Quantity = quantite.ToString

            produitPayPal.Amount = New BasicAmountType
            produitPayPal.Amount.currencyID = codeMonnaiePayPal
            produitPayPal.Amount.Value = produit.Prix.ToString("N")

            produitPayPal.Tax = New BasicAmountType
            produitPayPal.Tax.currencyID = codeMonnaiePayPal
            produitPayPal.Tax.Value = produit.Taxe.ToString("N")

            panierPaypal.Add(produitPayPal)
        Next

        Dim appel As New CallerServices
        appel.APIProfile = profile

        Dim detailsPaiement As New PaymentDetailsType
        detailsPaiement.ItemTotal = montantHT
        detailsPaiement.TaxTotal = montantTaxe
        detailsPaiement.OrderTotal = montantTTC
        detailsPaiement.PaymentDetailsItem = panierPaypal.ToArray

        Dim requestDetails As New SetExpressCheckoutRequestDetailsType
        requestDetails.PaymentAction = PaymentActionCodeType.Sale
        requestDetails.PaymentDetails = New PaymentDetailsType() {detailsPaiement}
        requestDetails.OrderTotal = montantTTC
        requestDetails.CancelURL = My.Settings.CancelURL
        requestDetails.ReturnURL = My.Settings.ReturnURL
        requestDetails.Address = addresse

        Dim request As New SetExpressCheckoutRequestType
        request.Version = My.Settings.Version
        request.SetExpressCheckoutRequestDetails = requestDetails

        Dim response As New SetExpressCheckoutResponseType
        response = CType(appel.Call("SetExpressCheckout", request), SetExpressCheckoutResponseType)

        If response.Errors IsNot Nothing Then
            Throw New PayPalPaymentException(response.Errors)
        End If

        Return response.Token
    End Function

    Public Function PaiementParPayPal_Etape2() As String
        'Profile Paypal
        Dim profile As IAPIProfile = ProfileFactory.createSignatureAPIProfile()
        profile.APIUsername = My.Settings.Username
        profile.APIPassword = My.Settings.Password
        profile.APISignature = My.Settings.Signature
        profile.Environment = My.Settings.Environment

        Dim appel As New CallerServices
        appel.APIProfile = profile

        Dim requete As New GetExpressCheckoutDetailsRequestType
        requete.Version = My.Settings.Version
        requete.Token = Token

        Dim reponse As New GetExpressCheckoutDetailsResponseType
        reponse = CType(appel.Call("GetExpressCheckoutDetails", requete), GetExpressCheckoutDetailsResponseType)

        If reponse.Errors IsNot Nothing Then
            Throw New PayPalPaymentException(reponse.Errors)
        End If

        Return reponse.GetExpressCheckoutDetailsResponseDetails.PayerInfo.PayerID
    End Function

    Public Function PaiementParPayPal_Etape3() As String
        'Profile Paypal
        Dim profile As IAPIProfile = ProfileFactory.createSignatureAPIProfile()
        profile.APIUsername = My.Settings.Username
        profile.APIPassword = My.Settings.Password
        profile.APISignature = My.Settings.Signature
        profile.Environment = My.Settings.Environment

        Dim codeMonnaiePayPal As CurrencyCodeType
        If [Enum].IsDefined(GetType(CurrencyCodeType), "EUR") Then
            codeMonnaiePayPal = CType([Enum].Parse(GetType(CurrencyCodeType), "EUR"), CurrencyCodeType)
        End If

        Dim montantHT As New BasicAmountType
        montantHT.currencyID = codeMonnaiePayPal
        montantHT.Value = panier.GetMontantHT.ToString("N")

        Dim montantTaxe As New BasicAmountType
        montantTaxe.currencyID = codeMonnaiePayPal
        montantTaxe.Value = panier.GetMontantTaxe.ToString("N")

        Dim montantTTC As New BasicAmountType
        montantTTC.currencyID = codeMonnaiePayPal
        montantTTC.Value = panier.GetMontantTTC.ToString("N")

        Dim panierPaypal As New List(Of PaymentDetailsItemType)
        For Each produit As Produit In panier.Produits
            Dim quantite As Integer = panier.Produits.Where(Function(p) p.ID = produit.ID).Count

            Dim produitPayPal As New PaymentDetailsItemType
            produitPayPal.Number = produit.ID.ToString
            produitPayPal.Name = produit.Nom
            produitPayPal.Quantity = quantite.ToString

            produitPayPal.Amount = New BasicAmountType
            produitPayPal.Amount.currencyID = codeMonnaiePayPal
            produitPayPal.Amount.Value = produit.Prix.ToString("N")

            produitPayPal.Tax = New BasicAmountType
            produitPayPal.Tax.currencyID = codeMonnaiePayPal
            produitPayPal.Tax.Value = produit.Taxe.ToString("N")

            panierPaypal.Add(produitPayPal)
        Next

        Dim detailsPaiement As New PaymentDetailsType
        detailsPaiement.ItemTotal = montantHT
        detailsPaiement.TaxTotal = montantTaxe
        detailsPaiement.OrderTotal = montantTTC
        detailsPaiement.PaymentDetailsItem = panierPaypal.ToArray

        Dim detailsRequete As New DoExpressCheckoutPaymentRequestDetailsType
        detailsRequete.Token = Token
        detailsRequete.PayerID = PaiementParPayPal_Etape2()
        detailsRequete.PaymentAction = PaymentActionCodeType.Sale
        detailsRequete.PaymentActionSpecified = True
        detailsRequete.PaymentDetails = New PaymentDetailsType() {detailsPaiement}

        Dim requete As New DoExpressCheckoutPaymentRequestType
        requete.Version = My.Settings.Version
        requete.DoExpressCheckoutPaymentRequestDetails = detailsRequete

        Dim appel As New CallerServices
        appel.APIProfile = profile

        Dim reponse As New DoExpressCheckoutPaymentResponseType
        reponse = CType(appel.Call("DoExpressCheckoutPayment", requete), DoExpressCheckoutPaymentResponseType)

        If reponse.Errors IsNot Nothing Then
            Throw New PayPalPaymentException(reponse.Errors)
        End If

        Return reponse.DoExpressCheckoutPaymentResponseDetails.Token
    End Function

IV-B. Conclusion

L'article est terminé, si vous avez besoin de plus d'information, télécharger le projet PayPal.

 

Valid XHTML 1.0 TransitionalValid CSS!

Copyright © 2011 Cédric Arnould. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.