php - PayPal cURL 登录自一个月前起不再运行

标签 php curl paypal

几个月前,一位自由编码员为我编写了一些自定义 PHP cURL,用于登录我的企业 PayPal 帐户并通过加拿大邮政打印运输标签。

大约一个月前,登录过程开始失败。请参阅下面的代码。它每次都无法通过健全性检查。有一天这段代码有效,第二天就不行了。编码器找不到问题的根源。这里的任何人都可以看到这段代码有什么问题吗?

////
// 1. INITIALIZE

cp_progress(1, 'Initializing');

if (file_exists(PAYPAL_COOKIE_FILE)) {
unlink(PAYPAL_COOKIE_FILE); // delete old cookie file
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_REFERER, '');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  //Windows 2003 Compatibility 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:19.0) Gecko/20100101 Firefox/19.0');
curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch, CURLOPT_COOKIEFILE, PAYPAL_COOKIE_FILE);
curl_setopt($ch, CURLOPT_COOKIEJAR, PAYPAL_COOKIE_FILE);

////
// 2. LOG IN

cp_progress(2, 'Logging in');

$response = cp_get_page($ch, 'https://www.paypal.com/ca/cgi-bin/webscr?cmd=_ship-now');
// echo '<br /><br /><br /><br /> Response = ',$response,'<br /><br /><br /><br />'; // exit;

cp_sanity_check($response, '<title>Login - PayPal</title>');

$matches = '';
// preg_match("/<form method=\"post\" name=\"login_form\" target=\"paypal\" action=\"([^\"]*)\"/siU", $response, $matches);
preg_match("/<form method=\"post\" name=\"login_form\" action=\"([^\"]*)\"/siU", $response, $matches);
$form_action = $matches[1];

$matches = '';
preg_match("/<input type=\"hidden\" id=\"CONTEXT_CGI_VAR\" name=\"CONTEXT\" value=\"([^\"]*)\"/siU", $response, $matches);
$form_context = $matches[1];

// echo "form_action = $form_action<br>";
// echo "form_context = $form_context<br>";

/*$query_string = "CONTEXT=$form_context&login_email=" . PAYPAL_EMAIL . "&login_password=" . PAYPAL_PASSWORD
. "&login_cmd=&login_params=&submit.x=Log%20In&operating_system=Linux&form_charset=UTF-8&browser_name=Firefox&browser_version=3";*/  

$query_string = "CONTEXT=$form_context&login_email=" . PAYPAL_EMAIL . "&login_password=" . PAYPAL_PASSWORD
. "&login_cmd=&login_params=&submit.x=Log%20In&operating_system=Windows%2NT&form_charset=UTF-8&browser_name=Firefox&browser_version=19";
// echo '$form_action = ',$form_action;
// echo '$query_string = ',$query_string; exit;
$response = cp_post_page($ch, $form_action, $query_string);
// echo '<br /><br /><br /><br /> Response = ',$response,'<br /><br /><br /><br />'; // exit;

cp_sanity_check($response, '<title>Canada Post - Create Your Shipping Label - PayPal</title>');

$matches = '';
preg_match("/<form method=\"post\" name=\"shippingForm\" action=\"([^\"]*)\"/siU", $response, $matches);
$form_action = $matches[1];

$matches = '';
preg_match("/<input type=\"hidden\" id=\"CONTEXT_CGI_VAR\" name=\"CONTEXT\" value=\"([^\"]*)\"/siU", $response, $matches);
$form_context = $matches[1];

$matches = '';
preg_match("/<input name=\"auth\" type=\"hidden\" value=\"([^\"]*)\"/siU", $response, $matches);
$form_auth = $matches[1];

// echo $form_auth; exit;
////

最佳答案

Paypal 已更新此登录页面中的字段。替换代码:

$matches = '';
preg_match("/<input type=\"hidden\" id=\"CONTEXT_CGI_VAR\" name=\"CONTEXT\" value=\"([^\"]*)\"/siU", $response, $matches);
$form_context = $matches[1];

// echo "form_action = $form_action<br>";
// echo "form_context = $form_context<br>";

/*$query_string = "CONTEXT=$form_context&login_email=" . PAYPAL_EMAIL . "&login_password=" . PAYPAL_PASSWORD
. "&login_cmd=&login_params=&submit.x=Log%20In&operating_system=Linux&form_charset=UTF-8&browser_name=Firefox&browser_version=3";*/  

$query_string = "CONTEXT=$form_context&login_email=" . PAYPAL_EMAIL . "&login_password=" . PAYPAL_PASSWORD
. "&login_cmd=&login_params=&submit.x=Log%20In&operating_system=Windows%2NT&form_charset=UTF-8&browser_name=Firefox&browser_version=19";

与:

//changed

$matches = '';
preg_match("/<input type=\"hidden\" id=\"CONTEXT_CGI_VAR\" name=\"CONTEXT\" value=\"([^\"]*)\"/siU", $response, $matches);
$form_context = html_entity_decode($matches[1]);


$matches = '';
preg_match("/<input name=\"auth\" type=\"hidden\" value=\"([^\"]*)\"/siU", $respone, $matches);
$form_auth = urlencode($matches[1]);

//echo "form_action = $form_action<br>";
//echo "form_context = $form_context<br>";

$query_string = "CONTEXT=$form_context&login_email=" . PAYPAL_EMAIL . "&login_password=" . PAYPAL_PASSWORD
            . "&login_cmd=&login_params=&submit.x=Log%20In&operating_system=Linux&form_charset=UTF-8&browser_name=Firefox&browser_version=3&auth=$form_auth";
//end changed

您正在添加一个新的 preg_match 行和 $form_auth

关于php - PayPal cURL 登录自一个月前起不再运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16814002/

相关文章:

c - Libcurl 如何不显示所有这些信息

asp.net - Paypal Integration 后处理信息

php - 在 PHP 中使用 POST 响应

php 如果小写字母前面没有空格,则将字符串分解为大写

php - 具有数据库表插入、更新的模型

php - 删除行会留下空单元格吗?

php - 编译 php-cpp main.cpp 文件时出错

javascript - 如何使用 PHP/CURL/Javascript 等从 mca.gov.in 获取公司详细信息?

php - 如何在 opencart 结帐时使 paypal 标准付款选项可见