PayPal API一直无法正常工作

如何解决PayPal API一直无法正常工作

我们的大多数API调用都可以成功工作并存储到我们的数据库中,但很少有。我已经收集了一些日志,我们收到了“错误400错误的请求”。

-

[29-Sep-2020 08:04:48 UTC]未验证错误101:HTTP / 1.1 400错误的请求

[29-Sep-2020 08:04:48 UTC]未验证错误101:连接:关闭

[2020年9月29日UTC]未验证错误101:内容长度:11

[2020年9月29日UTC]未验证错误101:内容类型:文本/纯文本; charset = utf-8

[2020年9月29日UTC]未验证错误101:

[29-Sep-2020 08:04:48 UTC]未验证错误101:错误的请求

-

日志:https://pastebin.com/hRjrgWGd

代码:

    $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:443\r\n";
$header .= "Connection close\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";

$fp = fsockopen ('ssl://www.paypal.com',443,$errno,$errstr,30);
//$fp = fsockopen ('ipnpb.paypal.com',30);

if (!$fp)
{
    // HTTP ERROR
    echo "error";
    error_log("FAILED line 53");

} else {
    // NO HTTP ERROR

    fputs ($fp,$header . $req);


    while (!feof($fp))
    {
        $res = fgets($fp,1024);

        if (strcmp (trim($res),"VERIFIED") == 0) {
            //Setup Required Variables
            $txn_id = $_POST['txn_id'];
            $first_name = $_POST['first_name'];
            $last_name = $_POST['last_name'];
            $cust_name = $first_name .' '. $last_name;
            $cust_email = $_POST['payer_email'];
            $cust_id = $_POST['auction_buyer_id'];
            $cust_status = $_POST['payer_status'];
            $payment_date = $_POST['payment_date'];
            $currency = $_POST['mc_currency'];

            $address_street = $_POST['address_street'];
            $address_city = $_POST['address_city'];
            $address_state = $_POST['address_state'];
            $address_zip = $_POST['address_zip'];
            $address_country = $_POST['address_country'];
            $address_status = $_POST['address_status'];

            $g_ref = "";

            if (isset($_POST['fulfillment_order_reference_number'])) {
                $g_ref = $_POST['fulfillment_order_reference_number'];
                $address_street = $_POST['fulfillment_address_line1'];
                $address_city = $_POST['fulfillment_address_city'];
                $address_state= $_POST['fulfillment_address_state'];
                $address_zip = $_POST['fulfillment_address_zip'];
            }

            $item_count = $_POST['num_cart_items'];

            //Misc Variables Requried for Authentication
            $payment_status = $_POST['payment_status'];
            $receiver_email = $_POST['receiver_email'];
            $our_email = '###'; #PP EMAIL HERE
            $our_email_2 = '###'; #PP EMAIL HERE

            if (($payment_status == 'Completed') && (($receiver_email == $our_email) || ($receiver_email == $our_email_2)))
            {
                //Check Transaction Not Already Processed
                //  $check = $db_query->duplicate_check($txn_id);
                //  if ($check != 0) { exit(); }

                //Distinguish between accounts
                if ($receiver_email == $our_email) {
                    $pp_acc = "CB";
                } else if ($receiver_email == $our_email_2) {
                    $pp_acc = "IK";
                }

                for ($n=1;$n<=$item_count;$n++) {
                    $item_name = $_POST['item_name'. $n];
                    $item_quantity = $_POST['quantity'. $n];
                    $item_number = $_POST['item_number'. $n];
                    $total_paid = $_POST['mc_gross_'. $n];
                    error_log("HIT ADD ORDER tx: $txn_id");

                    //Add Order to DB (Removed)
                }
            }
        }
        else if (strcmp ($res,"INVALID") == 0) {
            error_log("Invalid Error 102");

        }
        else {
            // This is where it seems to be hitting
            error_log("not verified Error 101: " . $res);
        }
    }
}

fclose ($fp);

似乎feof($ fp)读到请求数据的末尾,但是那些没有保存到数据库的数据并没有命中VERIFIED的'if'语句,而是'else'。

我已经检查了PayPal IPN历史记录,并且所有请求都已成功发送,因此这绝对是我们的服务器问题。在2016年至2018年这不是问题,但是从那以后,我们就一直没有将其保存到数据库中。

有什么想法吗?

解决方法

IPN Integration Guide中所述,请确保在请求标头中包含一个User-Agent: 字段,该字段的值应是大于7个字符的任何字符串

您还应该使用到ipnpb.paypal.com的HTTPS / SSL连接(标准端口443),不确定为什么代码使用旧的www.paypal.com端点进行IPN。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-