2013-08-22 11 views
8

W mojej aplikacji potrzebuję ustawić powtarzającą się sekcję billingową przy użyciu paypal advanced i używam sekcji payflow do zrobienia tego samego. Aby utworzyć profil cykliczny, potrzebuję zarówno przycisku Zapłać za pomocą przycisku PayPal (proces ekspresowej realizacji transakcji), jak i płatności kartą kredytową. Moje pierwsze żądanie jest tak:Paypal Advanced Rachunki okresowe z Express Checkout i płatności kartą kredytową za pomocą hostowanych stron

public static PayPalRedirectAdv PayFlow() 
{ 

    NameValueCollection requestArray = new NameValueCollection() 
    { 

     {"PARTNER", "PayPal"},    // You'll want to change these 4 
     {"VENDOR", "merchantname"},   // To use your own credentials 
     {"USER", "username"}, 
     {"PWD", "abcdenfg"}, 
     {"TRXTYPE", "A"}, 
     {"AMT", "1.00"}, 
     {"CURRENCY", "USD"}, 
     {"CREATESECURETOKEN", "Y"}, 
     {"SECURETOKENID", "tokenId generated"}, 
     {"RETURNURL", UrlReturn}, 
     {"CANCELURL", UrlCancel}, 
     {"ERRORURL", lUrlError}, 
     {"BILLINGTYPE","RecurringBilling"} 

    }; 

    NameValueCollection resp = run_payflow_call(requestArray); // Will call the payflow end point via HttpWebRequest 
    if (resp["RESULT"] == "0") 
    { 
     string mode = "TEST"; 
     return new PayPalRedirectAdv 
     { 
      Url = "https://payflowlink.paypal.com?SECURETOKEN=" + resp["SECURETOKEN"] + "&SECURETOKENID=" + resp["SECURETOKENID"] + "&MODE=" + mode 
     }; 
    } 
    else 
    { 
     return new PayPalRedirectAdv { Url = string.Empty }; 
    } 
} 

Gdy proces się zakończy, mam ustawić adres URL do ramki IFrame i jest osadzony w jednym z moich widoków w moim projekcie mvc. Po wczytaniu ramki IFrame występują dwie problemy.

1) Strona jest przekierowana na najwyższy poziom. Oznacza to, że okno przeglądarki jest przekierowywane do URL-a IFrame. Wybrałem Layout C jako moją stronę hostowanej kasy. Kiedy używam referencji dostarczonych w projekcie demonstracyjnym, nawigacja w przeglądarce jest rozwiązana; tzn. prawidłowo wstawiono iframe do mojego widoku. Czy jest jakieś ustawienie w ustawieniach menedżera Paypal, aby temu zapobiec? Próbowałem to naprawić, pikując na najwyższym poziomie nawigację, ale to nie pozwoli mi przekierować na stronę PayPal, klikając przycisk "Sprawdź za pomocą Paypal".

2) W przypadku płatności kartą kredytową, gdy transakcja się powiedzie, będę przekształcić istniejącą transakcję do profilu przez:

"TRXTYPE=R&TENDER=C&PARTNER=PayPal&VENDOR=Acme&USER=Acme&PWD=a1b2c3d4&ACTION=A&PROFILENAME=RegularSubscription&ORIGID=<PNREF>&START=12012002&PAYPERIOD= 
WEEK&TERM=12&OPTIONALTRX=S&OPTIONALTRXAMT=2.00&COMMENT1=First-time 
customer&AMT=42.00" 

To działa prawidłowo i powtarzające profil jest tworzony.

Po kliknięciu przycisku "Sprawdź za pomocą Paypal" przejdę na stronę Paypal, gdzie mogę zalogować się do Paypal, korzystając z moich danych Paypal, a po kliknięciu przycisku "Paynow" odliczyć pieniądze z mojego konta. Ma również wartość PNERF i kiedy użyłem tego samego kodu powyżej, aby przekonwertować transakcję na powtarzający się profil, zastępując Tender jako P, ale pokazuje mi komunikat odpowiedzi, że "nie znaleziono identyfikatora transakcji odpowiadającego temu identyfikatorowi". Proces realizacji Paypal nie pokazuje żadnych informacji o tym, że użytkownik wybiera sekcję ponownego generowania płatności.

Wykonałem także następujące czynności: Express Checkout with recurring billing, ale w kroku DoExpressCheckout uzyskałem BAID jako wartość zerową.

Potrzebuję zarówno zapłaty z paypal, jak i płatności za pomocą opcji kredytowych na mojej stronie, więc jakich parametrów należy użyć, aby to osiągnąć?

Z góry dziękuję.

+1

Powiem ci tylko, co zrobiłem, ponieważ nie podążam za tym, co mówisz. Stworzyłem stronę internetową i aplikację internetową dla klienta, a także użytkownika zarejestrowanego na stronie internetowej, opłaconego z powtarzalną płatnością PayPal. Serwery PayPal wysłały IPN (powiadomienie o natychmiastowej płatności) z powrotem do mojego URL odbiornika umieszczonego na stronie internetowej. Kod znajdujący się na tym adresie URL odbiornika (Listener.aspx.cs) zajmował się wyodrębnianiem danych z odpowiedzi PayPal, w tym nazwą, adresem e-mail, adresem itp. Mój kod następnie utworzył użytkownika na podstawie tych informacji i wstawił go do bazy danych. –

+0

Teraz, biorąc pod uwagę to, co powiedziałem, nie jestem pewien, czy rozumiem twoje pytanie. –

+0

Jeśli potrzebujesz szczegółowych instrukcji krok po kroku, w jaki sposób to zrobiłem, będę szczęśliwy, że to zrobię - daj mi znać! –

Odpowiedz

1
string strUsername = "<<paypal_username>>"; 
    string strPassword = "<<paypal_password>>"; 
    string strSignature = "<<paypal_signature>>"; 
    string strCredentials = "USER=" + strUsername + "&PWD=" + strPassword + "&SIGNATURE=" + strSignature; 

    string strNVPSandboxServer = "https://api-3t.sandbox.paypal.com/nvp"; 
    string strAPIVersion = "2.3"; 
    //4456193676582624                 4025609244685781 
    string strNVP = strCredentials + "&METHOD=DoDirectPayment" + 
     "&CREDITCARDTYPE=VISA" + 
     "&ACCT=<<CARDNO>>" + 
     "&EXPDATE=<<EXPDATE>>" + 
     "&CVV2=<<CVV>" + 
     "&AMT=<<AMOUNT>>" + 
     "&FIRSTNAME=<<CUST_NAME>>" + 
     "&LASTNAME=<<CUST_LASTNAME>>" + 
     "&CURRENCYCODE=<<CURRENCY_CODE>>" + 
     "&IPADDRESS=<<USER_IP>>" + 
     "&STREET=<<ADDRESS>>" + 
     "&CITY=<<CITY>>" + 
     "&STATE=<<STATE>>" + 
     "&COUNTRY=<<COUNTRY>>" + 
     "&ZIP=<<XIPCODE>>" + 
     "&COUNTRYCODE=<<COUNTRY>>" + 
     "&PAYMENTACTION=SALE" + 
     "&L_NAME0=item1&L_DESC0=test1description&L_AMT0=1&L_QTY0=1" + 
     "&L_NAME1=item2&L_DESC1=test2description&L_AMT1=2&L_QTY1=2" + 
     "&L_NAME2=item3&L_DESC2=test3description&L_AMT2=3&L_QTY2=3" + 
     "&VERSION=" + strAPIVersion; 
    //strNVP = Server.UrlEncode(strNVP); 
    try 
    { 
     //Create web request and web response objects, make sure you using the correct server (sandbox/live) 
     HttpWebRequest wrWebRequest = (HttpWebRequest)WebRequest.Create(strNVPSandboxServer); 
     wrWebRequest.Method = "POST"; 
     StreamWriter requestWriter = new StreamWriter(wrWebRequest.GetRequestStream()); 
     requestWriter.Write(strNVP); 
     requestWriter.Close(); 

     // Get the response. 
     HttpWebResponse hwrWebResponse = (HttpWebResponse)wrWebRequest.GetResponse(); 
     StreamReader responseReader = new StreamReader(wrWebRequest.GetResponse().GetResponseStream()); 

     //and read the response 
     string responseData = responseReader.ReadToEnd(); 
     responseReader.Close(); 

     string result = Server.UrlDecode(responseData); 

     string[] arrResult = result.Split('&'); 
     Hashtable htResponse = new Hashtable(); 
     string[] responseItemArray; 
     foreach (string responseItem in arrResult) 
     { 
      responseItemArray = responseItem.Split('='); 
      htResponse.Add(responseItemArray[0], responseItemArray[1]); 
     } 

     string strAck = htResponse["ACK"].ToString(); 

     if (strAck == "Success" || strAck == "SuccessWithWarning") 
     { 
      string strAmt = htResponse["AMT"].ToString(); 
      string strCcy = htResponse["CURRENCYCODE"].ToString(); 
      string strTransactionID = htResponse["TRANSACTIONID"].ToString(); 
      //ordersDataSource.InsertParameters["TransactionID"].DefaultValue = strTransactionID; 

      string strSuccess = "Thank you, your order for: $" + strAmt + " " + strCcy + " has been processed."; 
      Response.Write(strSuccess); 
      //successLabel.Text = strSuccess; 
     } 
     else 
     { 
      string strErr = "Error: " + htResponse["L_LONGMESSAGE0"].ToString(); 
      string strErrcode = "Error code: " + htResponse["L_ERRORCODE0"].ToString(); 
      //errLabel.Text = strErr; 
      //errcodeLabel.Text = strErrcode; 
      return; 
     } 
    } 
    catch (Exception ex) 
    { 
     // do something to catch the error, like write to a log file. 
     Response.Write("error processing"); 
    }`enter code here` 

spróbuj użyć tego kodu .... nie trzeba biblioteki DLL, aby poprosić o płatność PayPal.