2013-08-22 55 views
8

在我的應用程序中,我需要使用paypal高級設置定期結算部分,並使用付款部分來執行相同操作。我需要Pay with PayPal按鈕流程(快速結帳流程)和信用卡付款才能創建定期配置文件。我最初的要求是這樣的:Paypal高級定期結算使用快速結帳和使用託管頁面的信用卡付款

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

一旦這個過程完成後,我已經設置了網址的iframe,它被嵌入在我在我的MVC項目的景色之一。當IFrame被加載時,它有兩個問題。

1)頁面被重定向到頂層。這意味着瀏覽器窗口被重定向到IFrame url。我選擇了佈局C作爲託管結帳頁面。當我使用演示項目中提供的憑證時,瀏覽器導航已解決;即Iframe在我的視圖中正確加載。 Paypal管理員設置中是否有任何設置來防止這種情況發生?我試圖通過沙盒頂級導航來解決這個問題,但是這不會讓我通過點擊「使用PayPal簽出」按鈕重定向到PayPal網站。

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

這工作得很好,並在創建重複配置文件:

2)用信用卡付款,一旦交易成功,我將在現有的交易通過轉換爲輪廓。

但是,當我點擊「使用PayPal簽出」按鈕時,這將帶我到PayPal頁面,在那裏我可以使用我的Paypal憑證登錄到PayPal,然後當我點擊「paynow」按鈕時,它會從我的帳戶中扣除資金。這也有一個PNERF值,當我使用上面相同的代碼通過將Tender替換爲P來將事務轉換爲循環配置文件時,但它向我顯示了一條響應消息,即「找不到與此id對應的事務ID」。 PayPal結帳過程不顯示任何有關用戶要進入付款部分的信息。

此外,我跟着Express Checkout with recurring billing來完成任務,但我在DoExpressCheckout步驟中將BAID作爲空值。

我需要同時使用paypal付款和使用我的網站上的信用選項付款,因此我應該使用哪些參數來完成此操作?

在此先感謝。

+1

我只是告訴你我做了什麼,因爲我沒有完全遵循你所說的話。我爲客戶創建了一個網站和一個網絡應用程序,並且該用戶在網站上註冊,並使用貝寶定期付款進行支付。 PayPal的服務器將IPN(即時付款通知)發送回我網站託管的監聽器URL。此監聽器URL(Listener.aspx.cs)後面的代碼負責從PayPal響應中提取數據,包括姓名,電子郵件地址等。然後,我的代碼根據該信息創建了一個用戶並將其插入到數據庫中。 –

+0

現在,鑑於我所說的話,我不太清楚我的理解你的問題。 –

+0

如果您想要特定的步驟說明我是如何做到這一點的,我會很樂意做到這一點 - 只需告訴我! –

回答

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` 

嘗試使用此代碼....沒有DLL需要請求貝寶付款。

相關問題