当前位置: 首页 > 知识库问答 >
问题:

Paypal IPN失败

杨超
2023-03-14
    // Read the notification from PayPal which comes in the form of a POST array and create the acknowledgement response
    $req = 'cmd=_notify-validate';               // add 'cmd' to beginning of the acknowledgement you send back to PayPal

    foreach ($_POST as $key => $value) 
    { // Loop through the notification NV pairs
    $value = urlencode(stripslashes($value));  // Encode the values
    $req .= "&$key=$value";                    // Add the NV pairs to the acknowledgement
    }


    // Assign the paypal payment notification values to local variables
    if($_POST){
    $item_name = $_POST['item_name'];
    $item_number = $_POST['item_number'];
    $payment_status = $_POST['payment_status'];
    $payment_amount = $_POST['mc_gross'];
    $payment_currency = $_POST['mc_currency'];
    $txn_id = $_POST['txn_id'];
    $receiver_email = $_POST['receiver_email'];
    $payer_email = $_POST['payer_email'];}

    //Set up the acknowledgement request headers (this is the updated version for http 1.1)
    $header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Host: www.paypal.com\r\n";
    $header .= "Connection: close\r\n";
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
    //Open a socket for the acknowledgement request
    $fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);

    if(!$fp){
        echo "HTTP ERROR";
    }
    else
    {//start 1

    // Post request back to PayPal for validation
    fputs ($fp, $header . $req);

    //once paypal receives the acknowledgement response, another message will be send containing the single word VERIFIED or INVALID

    while (!feof($fp)) 
        { //start 2, while not EndOfFile
    $res = fgets ($fp, 1024); // Get the acknowledgement response
    $res = trim($res);
        if (strcmp ($res, "VERIFIED") == 0) 
            {// start 3, Response is OK

            if ($payment_status == "Completed")
                {//start 4

                //send email announcing success

                $from = "Rupert Heath Literary Agency";
                $to = $payer_email;
                $subject = "Ebook";
                $body = "It works";
                mail($to, $subject, $body, $from);

                }//end 4
            }//end 3
            else if(strcmp ($res, "INVALID") == 0)
                {//start 5

                //send email announcing failure
                //$error_log .= 'Line 57'

                $from = "Guide Test Page";
                $to = $payer_email;
                $subject = "INVALID IPN";
                $body = "Doesn't work";
                mail($to, $subject, $body, $from);
                }//end 5


    } //end 2
fclose ($fp);  //close file pointer
} //end 1

即时付款通知(IPN)详细信息

消息ID69025489S2598613V

创建日期/时间18/07/2013 23:22 PDT

IPN消息mc_gross=0.01&protection_eligibility=合格&address_status=confirment&payer_id=c3usv8a4q2qdw&tax=0.00&address_street=ramsey House 34 Fowlers road&payment_date=23:22:44 2013年7月18日pdt&payment_status=completed&charset=windows-1252&address_zip=sp1 2qu&first_name=michael&mc_fee=0.01&address_country_code=gb&address_name=michael heath&notify_version=3.7&custom=&payer_status=verified英国&address_city=salisbury&quantity=1&verify_sign=ahkychsfiy2frgznoqmghq3lhkmabowejqzzycdqp30hb7b99tf.04a&payer_email=msheath@btinternet.com&txn_id=4d0877596n038120y&payment_type=instant&last_name=heath&address_state=wiltshire&receiver_email=emailage@rupertheath.com&payment_fee=&receiver_id=brm2tymp4acz8&txn_type=web_accept&item_name=eBook mc_currency=GBP&item_number=&residence_country=GB&handling_amount=0.00&transaction_subject=eBook&payment_gross=&shipping=0.00&ipn_track_id=b0a3b4ae3c51c

有谁能帮我调试一下这个问题吗?

共有1个答案

吕承福
2023-03-14

这条线很可能是一个问题:

$value = urlencode(stripslashes($value));

具体地说,在那里使用stripslashs。如果您的PHP配置有(上帝保佑您)神奇的引号,您只需要包含stripslashs。值得庆幸的是,从PHP5.4开始,神奇的引号已经被删除,因此您可能可以安全地从该行中删除stripslashs,使其成为:

$value = urlencode($value);

信不信由你,Paypal允许用户数据包含反斜杠。因此,如果IPN有任何反斜杠,并且您使用stripslashes删除它们,那么当您将IPN数据发布回PayPal以进行验证时,PayPal将给您无效的响应,因为数据将不匹配。

 类似资料:
  • 我尝试运行这个gradle任务(通过gradlew) 它使用cucmber jvm 并收到此错误 当我从cmd中的同一路径运行同一行时: 更新1: 这个cmd在shell控制台中工作: ./构建/发行版/WebLarge测试/bin/WebLargeTests-f html:构建/报告/cucumber/-f json:构建/报告/cucumber/report.json--胶水com.waze.

  • 在两台不同的笔记本电脑上使用maven构建相同的项目。一个是运行良好,一个是显示错误。 状态:两个系统的配置相同。 使用的命令:mvn clean install-DskipTests=true 错误: 我什至尝试删除所有内容,例如再次创建. m2文件夹。

  • 问题内容: 我的程序使用该类(系统偏好设置,而不是用户)将加密的产品密钥数据保存到计算机。问题是,在Windows和Linux上(尚未在OSX上进行测试,但可能是相同的),如果我不使用具有管理员权限的程序运行该程序,则在尝试读取或读取该程序时,它将发出异常或警告。保存数据。 显然,要求用户以“管理员”权限运行程序是不切实际的。理想情况下,我希望操作系统请求用户许可。 这很愚蠢,并且消除了的一半目的

  • 问题内容: 当我使用getFromLocationName调用时,我得到一个IOException,描述为“ grpc failed”。 运行的代码 错误的控制台输出: Android SDK版本(API级别):25 Android Studio插件是最新的。 提前致谢! 编辑: 问题现在似乎已经解决,这是我的解决方案。 问题答案: 更新: 该问题现在似乎已解决。我不确定问题是否就此解决了,因此,

  • 我写了一个方便的屏幕键盘模块,当我在电脑上编写打算以平板模式运行的程序时,我可以导入和使用它。因为我想在未来的许多程序中导入和使用这个实用程序,我想存储当前鼠标位置和在模块开始时鼠标可见性状态,然后在模块退出时恢复那些条件。mouse.get_pos()命令工作正常,但是.mouse.get_visible()命令失败,返回错误消息:AtiniteError:模块'pygame.mouse'没有属

  • 我正在尝试构建我的Android应用程序与Gradle在控制台。但关于任务“:app:TransformClasseSandResourcesWithProGuardForRelease”的获取以下错误: ./gradlew构建--堆栈跟踪 这是我收到的例外情况:

  • “:App:TransformClassesWithDexForDebug”。>com.android.build.transform.api.transformException:当我在studio项目中添加Facebook最新SDK时 Android Studio TransformException:错误:任务“:app:TransformClassesWithDexForDebug”执行失