Paypal 自适应支付返回 url 调用了两次

Posted

技术标签:

【中文标题】Paypal 自适应支付返回 url 调用了两次【英文标题】:Paypal adaptive payment return url is calling twice 【发布时间】:2013-04-26 14:23:08 【问题描述】:

我已经实施了贝宝自适应支付方式并使用了网络流程。 付款后,当我明确点击返回按钮时,返回 url 会调用两次,但如果我等待自动重定向,那么它只会调用一次。

我无法理解为什么 return url 调用了两次。

请指教。

我正在使用下面的代码。

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; // "anuj_merchant@xicom.biz";

    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 
    ;

【问题讨论】:

我可以验证这一点。我的特定设置是 Ruby 1.9.3 / Rails 3.2.13 并使用“paypal-sdk-adaptivepayments”gem。 @Oshuma:你有没有得到任何解决方案,或者这是贝宝的错误? 【参考方案1】:

@jitendra,我遇到了同样的问题,发现 paypal 使用了服务器端脚本,该脚本在一段时间后将用户重定向到返回 url,当我们明确点击返回按钮时,paypal 服务器脚本再次点击单独返回 url,因此我们在返回 url 上得到两个响应/命中。

我们可以通过检查/维护在贝宝上付款后收到的回复数来解决这个问题。

我们可以使用 cookie 在客户端或服务器上使用会话或其他类似的东西来维护它。

希望这会有所帮助。

【讨论】:

以上是关于Paypal 自适应支付返回 url 调用了两次的主要内容,如果未能解决你的问题,请参考以下文章

Paypal 自适应支付重定向 URL GET 变量

自适应支付 paypal - 没有支付 api 操作的 pdt 数据

PayPal自适应支付链式支付错误

Paypal 自适应支付 - IPN 和成功的返回响应

Paypal 自适应支付 IPN 回调:如何返回完整未更改的 ipn 消息

PayPal 自适应支付延迟链式支​​付的接收方配置