3
votes

Comment convertir un formulaire HTML en C # pour un abonnement PayPal

J'ai le code HTML suivant qui fonctionne bien pour les paiements d'abonnement dans mon environnement de test.

<form action="paypalWebAddress" method="post" target="_top">
    <input type="hidden" name="cmd" value="_xclick-subscriptions"/>                        
    <input type="hidden" name="business" value="myPaypalAccountId"/>
    <input type="hidden" name="paymentaction" value="sale"/>
    <input type="hidden" name="item_name" value="Subscription For abc123"/>
    <input type="hidden" name="currency_code" value="GBP"/>
    <input type="hidden" name="no_note" value="1" />
    <input type="hidden" name="a3" value="50"/>
    <input type="hidden" name="p3" value="6"/>
    <input type="hidden" name="t3" value="M"/>
    <input type="hidden" name="src" value="1" />
    <input type="hidden" name="srt" value="0" /><!--needs to be never ending-->
    <input type="hidden" name="return" value="www."/>
    <input type="hidden" name="notify_url" value="www."/>
    <input type="hidden" name="cancel_url" value="www."/>
    <input type="hidden" name="custom" value="abc123"/>
    <input TYPE="hidden" name="charset" value="utf-8">
    <input type="hidden" name="bn" value="Me_Subscribe_WPS_UK" />
    <input type="submit" name="submit" value="Make Payment"/>
</form>

Je suis sur le point de passer en ligne et je crains que quelqu'un puisse facilement manipuler le DOM et j'envoie soudainement de faux paiements. Je pense qu'il serait plus sûr de publier ces valeurs à partir du code ci-dessous afin que l'utilisateur ne puisse pas les modifier, mais il devra toujours utiliser l'interface PayPal dans son navigateur pour se connecter et s'abonner.

PayPal-NET-SDK propose un démarrage rapide et montre comment commencer . J'ai terminé cela (copié et collé et exécuté en mode débogage) et il s'exécute bien. Cependant, cela ne couvre pas les abonnements, probablement pour la raison expliquée ci-dessus (et les empêcherait probablement d'accéder à l'interface graphique PayPal dans leur navigateur).

J'ai la possibilité dans la zone du tableau de bord PayPal de créer un bouton et une référence par bouton, mais cela ne fonctionnera pas pour moi car je dois pouvoir définir le code personnalisé > champ par abonnement car un utilisateur peut s'abonner à un ou plusieurs services et chaque service est unique à cet utilisateur.

Je ne comprends pas comment y parvenir


5 commentaires

Veuillez expliquer plus en détail votre résultat attendu.


action = "paypalWebAddress" est-il un espace réservé uniquement pour les besoins de la question ou un point de terminaison réel dans votre contrôleur?


Vous pouvez toujours essayer d'utiliser FluentValidation pour valider toutes vos propriétés côté client et serveur.


Vous pouvez créer le même formulaire dans le code et publier la demande. Vous devrez cependant interpréter manuellement les redirections et les renvoyer au client. Vous jouerez essentiellement le rôle du navigateur à partir de votre backend.


@Nkosi l'action peut être n'importe quoi si elle fonctionne :) Elle peut pointer vers un point final paypal ou le mien


4 Réponses :


1
votes

Si je comprends bien, chaque abonnement est unique par client dans votre cas et cela ne fonctionnera pas avec les boutons statiques, l'API semble donc la seule solution.

L'API PayPal couvre les abonnements, ils sont appelés Facturation Plans . Étant donné que chaque abonnement est différent, vous pouvez créer un nouveau plan de facturation pour chaque service unique (ou combinaison de services). Cela peut être fait sans aucun SDK intermédiaire en utilisant HttpClient directement dans leur API.

Alternativement, le PayPal-NET-SDK que vous avez mentionné semble également couvrir les plans de facturation. Leur exemple d'application contient de nombreux exemples sur comment créer, énumérer et émettre des plans de facturation. Assurez-vous de vérifier la collection billing_agreement_tokens dans la classe Payment . Vous pouvez y ajouter plusieurs jetons "service".

Peu importe à quel point vous êtes sur le point de sortir, de nombreux tests semblent toujours être en ordre ici.


0 commentaires

0
votes

Vous pouvez essayer d'utiliser HttpClient, quelque chose comme ça aidera

    HttpContent content = new FormUrlEncodedContent(
            new List<KeyValuePair<string, string>> { 
                new KeyValuePair<string, string>("key1", 
      "value1"),
                new KeyValuePair<string,string>("key2","value2")
            });
        content.Headers.ContentType = new 
       MediaTypeHeaderValue("application/x-www-form- 
       urlencoded");
        content.Headers.ContentType.CharSet = "UTF-8";
        HttpResponseMessage resposne = await 
        client.PostAsync(new Uri("paypalWebAddress"), 
       content);


0 commentaires

0
votes

Vous ne devez pas coder en dur les valeurs dans les formulaires, mais plutôt créer une API dans le backend qui renverra les valeurs correspondantes.Ensuite, vous pouvez créer dynamiquement le formulaire en fonction de la réponse de l'API.

Assurez-vous de créer ce formulaire après avoir reçu la réponse de l'API. Vous pouvez faire une vérification comme si la réponse est nulle, afficher un spinner.

<form action="paypalWebAddress" method="post" target="_top">
    <input type="hidden" name="cmd" value="{response.cmd}"/>                        
    <input type="hidden" name="business" value={response.business}"/>
    <input type="hidden" name="paymentaction" value={response.action}/>
    <input type="hidden" name="item_name" value="{response.item}"/>
 <input type="submit" name="submit" value="Make Payment"/>
</form>


0 commentaires

0
votes
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">

  <!-- Identify your business so that you can collect the payments. -->
  <input type="hidden" name="business" value="herschelgomez@xyzzyu.com">

  <!-- Specify a Buy Now button. -->
  <input type="hidden" name="cmd" value="_xclick">

  <!-- Specify details about the item that buyers will purchase. -->
  <input type="hidden" name="item_name" value="Premium Umbrella">
  <input type="hidden" name="amount" value="50.00">
  <input type="hidden" name="currency_code" value="USD">

  <!-- Prompt buyers to enter the quantities they want. -->
  <input type="hidden" name="undefined_quantity" value="1">

  <!-- Display the payment button. -->
  <input type="image" name="submit" border="0"
    src="https://www.paypalobjects.com/en_US/i/btn/btn_buynow_LG.gif"
    alt="Buy Now">
  <img alt="" border="0" width="1" height="1"
    src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" >

</form>

1 commentaires

C'est un article intéressant, mais je ne le comprends pas assez. Mélangez-vous le bouton paypal (que nous pouvons générer à partir du site PayPal) avec des entrées personnalisées?