2013-05-02 13 views
6

I wprowadziły paypal adaptacyjną metodę płatności i stosując przepływ internetowej. Po dokonaniu płatności, gdy wyraźnie kliknę przycisk "Wróć", adres URL wywołania dwa razy, ale jeśli czekam na automatyczne przekierowanie, to dzwoni tylko raz.Paypal adaptacyjne url zwrot płatności dzwoni dwa razy

nie jestem w stanie zrozumieć, dlaczego powrót url dzwoni dwa razy.

Proszę o poradę.

Używam poniżej kodu.

public static ActionOutput MakeTransactionUsingPaypal(PaymentDetails payment, ShopCart shop_cart) 
{ 
    ReceiverList receiverList = new ReceiverList(); 
    receiverList.receiver = new List<Receiver>(); 
    string action_type = "PAY_PRIMARY"; 
    decimal amnt_to_admin = ((shop_cart.TotalAmountToBePaid * 10)/100); 

    /*Total Amount to Admin Account */ 
    Receiver rec1 = new Receiver(shop_cart.TotalAmountToBePaid); 
    rec1.email = Config.AdminPaypalBusinessAccount; 
    rec1.primary = true; 

    /*Amount after deducting to Admin Commision to Seller */ 
    Receiver rec2 = new Receiver(Math.Round((shop_cart.TotalAmountToBePaid - amnt_to_admin), 2, MidpointRounding.ToEven)); 
    rec2.email = payment.PaypalEmail; // "[email protected]"; 

    receiverList.receiver.Add(rec1); 
    receiverList.receiver.Add(rec2); 
    PayRequest req = new PayRequest(new RequestEnvelope("en_US"), action_type, Config.PaypalCancelURL, "USD", receiverList, Config.PaypalReturnURL); 

    // All set. Fire the request    
    AdaptivePaymentsService service = new AdaptivePaymentsService(); 

    PayResponse resp = null; 
    //TransactionDetail details = new TransactionDetail(); 

    resp = service.Pay(req); 
    String PayKey = resp.payKey; 
    String PaymentStatus = resp.paymentExecStatus; 
    ResponseEnvelope ResponseEnvelope = resp.responseEnvelope; 
    PayErrorList errorList = resp.payErrorList; 
    List<ErrorData> errorData = resp.error; 
    if (errorData.Count > 0) 
    { 
     return new ActionOutput 
     { 
      Status = ActionStatus.Error, 
      Message = errorData[0].message 
     }; 
    } 
    FundingPlan defaultFundingPlan = resp.defaultFundingPlan; 
    WarningDataList warningDataList = resp.warningDataList; 
    string redirectUrl = null; 
    if (!(resp.responseEnvelope.ack == AckCode.FAILURE) && 
     !(resp.responseEnvelope.ack == AckCode.FAILUREWITHWARNING)) 
    { 
     redirectUrl = ConfigurationManager.AppSettings["PAYPAL_REDIRECT_URL"] + "_ap-payment&paykey=" + resp.payKey; 

    } 
    return new ActionOutput 
    { 
     Status = ActionStatus.Successfull, 
     Message = "Redirecting to paypal...", 
     Results = new List<string> { redirectUrl, resp.payKey } 
    }; 
} 
+1

Mogę to zweryfikować. Moją szczególną konfiguracją jest Ruby 1.9.3/Rails 3.2.13 i używanie klejnotu "paypal-sdk-adaptivepayments". –

+0

@Oshuma: Czy otrzymałeś jakieś rozwiązanie lub jest to błąd na końcu Paypal? –

Odpowiedz

2

@jitendra, miałem ten sam problem i okazało się, że paypal wykorzystuje skrypt po stronie serwera, który przekierowuje użytkownika do adresu URL powrót po jakimś czasie i kiedy jawnie kliknij przycisk powrotu, wówczas serwer paypal Skrypt ponownie sam wywołuje zwrotny adres URL, dzięki czemu otrzymujemy dwie odpowiedzi/odwiedziny na naszym powracającym adresie URL.

Możemy to przezwyciężyć, sprawdzając/zachowując brak odpowiedzi, które otrzymujemy po dokonaniu płatności na paypal.

Możemy zachować to za pomocą plików cookie na końcu klienta lub na serwerze przy użyciu sesji lub czegoś podobnego.

Nadzieja to pomaga również.

Powiązane problemy