/// <summary>
    /// Recupera os dados da transação usando a operação GetExpressCheckoutDetails e, então, utiliza a
    /// operação DoExpressCheckout para completar a transação.
    /// </summary>
    /// <param name='token'>
    /// O Token enviado pelo PayPal após o redirecionamento do cliente.
    /// </param>
    /// <param name='PayerID'>
    /// O id do cliente no PayPal, recebido após o redirecionamento do cliente.
    /// </param>
    /// <exception cref='Exception'>
    /// Se a transação falhar, uma exceção é disparada.
    /// </exception>
    public static ResponseNVP finalize(string token, string PayerID)
    {
        GetExpressCheckoutDetailsOperation GetExpressCheckout = expressCheckout().GetExpressCheckoutDetails(
            token
            );

        execute(GetExpressCheckout);                 //Executa a operação GetExpressCheckout

        //NVP da resposta do GetExpressCheckout
        ResponseNVP responseNVP = GetExpressCheckout.ResponseNVP;

        if (GetExpressCheckout.ResponseNVP.Ack == Ack.SUCCESS)
        {
            DoExpressCheckoutPaymentOperation DoExpressCheckout = expressCheckout().DoExpressCheckoutPayment(
                token, PayerID, PaymentAction.SALE
                );

            DoExpressCheckout.PaymentRequest(0).Amount = responseNVP.GetDouble("PAYMENTREQUEST_0_AMT");

            configureLocalization(DoExpressCheckout);       //Configura moeda e idioma
            execute(DoExpressCheckout);                     //Executa a operação DoExpressCheckout

            //if (DoExpressCheckout.ResponseNVP.Ack != Ack.SUCCESS) {
            //    throw new Exception();
            //}
        }

        return(responseNVP);
    }
        public ActionResult Finalize(string token, string PayerId)
        {
            Cart cart = new Cart();

            ResponseNVP nvp = cart.Finalize(token, PayerId);

            if (nvp.Get("ACK") == "Success")
            {
                string status = nvp.Get("PAYMENTINFO_0_PAYMENTSTATUS");

                if (status == "Completed" || status == "Pending")
                {
                    //regras de negócio da aplicação
                }

                return(Redirect("/Cart/Success"));
            }
            else
            {
                //alguma coisa aconteceu errado, você deverá verificar mensagens de
                //erro para ver o que aconteceu.

                return(Redirect("/Cart/Fail"));
            }
        }
예제 #3
0
            public virtual Operation execute()
            {
                responseNVP = ec.execute(requestNVP);

                return(this);
            }