Как преобразовать HTML-форму в C # для подписки PayPal - PullRequest
0 голосов
/ 13 января 2019

У меня есть следующий HTML, который хорошо работает для оплаты подписки в моей тестовой среде.

<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>

Я собираюсь начать работу и обеспокоен тем, что кто-то может легко манипулировать DOM, и я внезапно отправляю поддельные платежи. Я чувствую, что было бы безопаснее как-то публиковать эти значения из кода, чтобы пользователь не мог подделать значения, но пользователю все равно нужно будет использовать интерфейс PayPal в своем браузере для входа и подписки.

PayPal-NET-SDK имеет быстрый старт и показывает, как начать работу. Я завершил это (скопировал и вставил и запустил в режиме отладки), и он работает нормально. Однако это не распространяется на подписки, вероятно, по причине, описанной выше (и, вероятно, не позволит им получить доступ к интерфейсу PayPal в своем браузере).

Я получаю возможность в области панели PayPal создать кнопку и ссылку за кнопкой, но это не сработает для меня, поскольку мне нужно иметь возможность установить поле custom для каждой подписки, так как пользователь может подписаться до 1 или более сервисов, и каждый сервис уникален для этого пользователя.

Я не могу понять, как этого достичь

Ответы [ 4 ]

0 голосов
/ 22 января 2019
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
  <input type="hidden" name="cmd" value="_xclick">
  <input type="hidden" name="business" value="business.test.com">
  <input type="hidden" name="item_name" value="Memory Stick">
  <input type="hidden" name="item_number" value="MEM32507725">
  <input type="hidden" name="amount" value="3">
  <input type="hidden" name="tax" value="1">
  <input type="hidden" name="quantity" value="1">
  <input type="hidden" name="currency_code" value="USD">

  <!-- Enable override of buyers's address stored with PayPal . -->
  <input type="hidden" name="address_override" value="1">
  <!-- Set variables that override the address stored with PayPal. -->
  <input type="hidden" name="first_name" value="John">
  <input type="hidden" name="last_name" value="Doe">
  <input type="hidden" name="address1" value="345 Lark Ave">
  <input type="hidden" name="city" value="San Jose">
  <input type="hidden" name="state" value="CA">
  <input type="hidden" name="zip" value="95121">
  <input type="hidden" name="country" value="US">
  <input type="image" name="submit"
    src="https://www.paypalobjects.com/en_US/i/btn/btn_buynow_LG.gif"
    alt="PayPal - The safer, easier way to pay online">
</form>

Нажмите на покупку сейчас:

<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>
0 голосов
/ 20 января 2019

Вы можете попробовать использовать HttpClient, что-то вроде этого поможет

    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 голосов
/ 22 января 2019

Вы не должны жестко кодировать значения в формах, вместо этого вы должны создать API в бэкэнде, который будет возвращать соответствующие значения. Затем вы можете динамически создавать форму на основе ответа API.

Убедитесь, что вы создали эту форму после того, как получили ответ от API. У вас может быть проверка, например, если ответ нулевой, покажите какой-нибудь счетчик.

<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 голосов
/ 19 января 2019

Если я правильно понимаю, каждая подписка уникальна для каждого клиента в вашем случае, и это не будет работать со статическими кнопками, поэтому API кажется единственным выходом.

API PayPal покрывает подписки, они называются Тарифные планы . Поскольку каждая подписка отличается, вы можете создать новый тарифный план для каждой уникальной услуги (или комбинации услуг). Это можно сделать без какого-либо промежуточного SDK, используя HttpClient непосредственно к их API.

В качестве альтернативы PayPal-NET-SDK, о котором вы упомянули, также, по-видимому, покрывает тарифные планы. Их Пример приложения содержит довольно много примеров того, как создавать, перечислять и составлять тарифные планы. Убедитесь, что вы ознакомились с коллекцией billing_agreement_tokens класса Payment. Вы можете добавить несколько токенов "service".

Независимо от того, насколько вы близки к выпуску, многие тесты, похоже, все еще здесь.

...