【问题标题】:PayPal ipnNotificationUrl Turned off and not sending notifications to URLPayPal ipnNotificationUrl 已关闭且不向 URL 发送通知
【发布时间】:2015-08-19 16:28:10
【问题描述】:

我正在使用 paypal 自适应支付 API,直到上个月一切都还好。

问题是 ipnNotificationUrl 没有向我在代码中提供的 URL 发送任何通知。

这里是支付宝自适应支付的代码,

<?php

class Paypal{



    private $api_user;

    private $api_pass;

    private $api_sig;

    private $app_id;

    private $apiUrl = 'https://svcs.sandbox.paypal.com/AdaptivePayments/';

    private $paypalUrl="https://www.sandbox.paypal.com/webscr?cmd=_ap-payment&paykey=";

    private $headers;



    public function setDetails($api_u, $api_p, $api_s, $api_id){



        $this->api_user = $api_u;

        $this->api_pass = $api_p;

        $this->api_sig = $api_s;

        $this->app_id = $api_id;



        $this->headers = array(

            "X-PAYPAL-SECURITY-USERID: ".$this->api_user,

            "X-PAYPAL-SECURITY-PASSWORD: ".$this->api_pass,

            "X-PAYPAL-SECURITY-SIGNATURE: ".$this->api_sig,

            "X-PAYPAL-REQUEST-DATA-FORMAT: JSON",

            "X-PAYPAL-RESPONSE-DATA-FORMAT: JSON",

            "X-PAYPAL-APPLICATION-ID: ".$this->app_id,

        );



    }



    public function getPaymentOptions($paykey){

        $pack = array(

            "requestEnvelope" => array(

                "errorLanguage" => "en_US",

                "detailLevel" => "ReturnAll",

            ),

            "payKey" => $paykey

        );

        return $this->_paypalSend($pack, "GetPaymentOptions");

    }



    public function setPaymentOptions(){



    }



    public function _paypalSend($data,$call){

        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $this->apiUrl.$call);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));

        curl_setopt($ch, CURLOPT_HTTPHEADER, $this->headers);

        $response = json_decode(curl_exec($ch),true);

        return $response;



    }

    public function splitPay($currency, $r1_email, $r2_email, $r1_amount, $r2_amount, $returnUrl, $cancelUrl, $product_name, $indentifier){



        $createPacket = array(

            "actionType" =>"PAY",

            "currencyCode" => $currency,

            "receiverList" => array("receiver" => 

                array(

                    array(

                        "amount"=> $r1_amount,

                        "email"=> $r1_email

                    ),

                    array(

                        "amount"=> $r2_amount,

                        "email"=> $r2_email

                    )

            )

            ),

            "returnUrl" => $returnUrl,

            "cancelUrl" => $cancelUrl,

            "ipnNotificationUrl" => URL::to('/adaptive_payments'),

            "requestEnvelope" => array(

                "errorLanguage" => "en_US",

                "detailLevel" => "ReturnAll",

            ),

        );



        $response = $this->_paypalSend($createPacket,"Pay");



        $paykey = $response['payKey'];



        $detailsPack = array(

            "requestEnvelope" => array(

                "errorLanguage" => "en_US",

                "detailLevel" => "ReturnAll",

            ),

            "payKey" => $paykey,

            "receiverOptions" => array(

                array(

                    "receiver" => array("email" => $r1_email),

                    "invoiceData" => array(

                        "item" => array(

                            array(

                                array(

                                    "name" => $product_name,

                                    "price" => $r1_amount,

                                    "identifier" => $indentifier

                                )

                            )

                        )

                    )

                ),

                array(

                    "receiver" => array("email" => $r2_email),

                    "invoiceData" => array(

                        "item" => array(

                            array(

                                array(

                                    "name" => "product 2",

                                    "price" => $r2_amount,

                                    "identifier" => "p2"

                                )

                            )

                        )

                    )

                )

            )

        );



        $response = $this->_paypalSend($detailsPack, "SetPaymentOptions");



        $dets = $this->getPaymentOptions($paykey);



        return $this->paypalUrl.$paykey;



    }

}

这是我得到的回应,

array(3) { ["responseEnvelope"]=> array(4) { ["timestamp"]=> string(29) "2015-06-04T14:04:07.395-07:00" ["ack"]=> string(7) "Success" ["correlationId"]=> string(13) "6c472863c4053" ["build"]=> string(8) "15743565" } ["payKey"]=> string(20) "AP-5LN44020A0587750B" ["paymentExecStatus"]=> string(7) "CREATED" } 

这很好,我可以使用 paykey,但 ipnNotificationUrl 无法正常工作。它根本不会在 URL 上发送任何内容。

试图解决问题的方法,

1) 确实更改了 ipnNotificationUrl 的 URL,甚至进行了硬编码

2) 用 IPN 模拟器(监听器)测试,为测试工作

3) 更改返回 URL 并取消 URL 以测试其他人是否正常工作,同时确保我正在使用正确的文件和代码

请帮忙!

【问题讨论】:

  • 您是否尝试过登录您的 PayPal 帐户并查看所有 IPN 通知尝试的结果? PayPal 是否曾尝试向您的 URL 发送任何内容?
  • 不,我没有,现在去检查一下,谢谢你的建议!
  • 是的,它确实尝试将 IPN 发送到 URL 并显示状态为 Queued

标签: php paypal paypal-adaptive-payments


【解决方案1】:

代码运行良好,不是因为 paypal 已将 IPN 排在队列中。

更多详情在这里https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNOperations/

希望这个答案对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 2020-05-12
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 1970-01-01
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多