更新vBulletin产品的旧付款脚本

如何解决更新vBulletin产品的旧付款脚本

我正在尝试从 vBulletin 产品更新旧的付款脚本。我设法使所有款项都付清了。我能够完成购买,但是当我单击"Return to merchant" PayPal按钮时,它不会执行购买验证。购买的商品确实存储在我的数据库中的"ma_purchases"表下,但其他信息一旦经过验证就应插入其他表中,并且不会插入。然后,(如果正确地阅读了此脚本)一旦购买返回经过验证,就应该切换用户的用户组并将购买详细信息插入其他位置。

    <?php
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~ E_NOTICE);

// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT','mem_payment');
define('CSRF_PROTECTION',false);
define('SKIP_SESSIONCREATE',1);

// #################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array('subscription');

// get special data templates from the datastore
$specialtemplates = array();

// pre-cache templates used by all actions
$globaltemplates = array();

// pre-cache templates used by specific actions
$actiontemplates = array();

// ######################### REQUIRE BACK-END ############################
define('VB_AREA','Subscriptions');
define('CWD',(($getcwd = getcwd()) ? $getcwd : '.'));
require_once (CWD . '/includes/init.php');
require_once (CWD . '/includes/class_vbma.php');
$vbma = new vbma($vbulletin,$vbphrase);
$vbulletin->input->clean_array_gpc('p',array(
    'item_number'    => TYPE_STR,'business'       => TYPE_STR,'receiver_email' => TYPE_STR,'tax'            => TYPE_STR,'txn_type'       => TYPE_STR,'payment_status' => TYPE_STR,'mc_currency'    => TYPE_STR,'mc_gross'       => TYPE_STR,'txn_id'         => TYPE_STR    
));
$transaction_id = $vbulletin->GPC['txn_id'];
$id = $vbulletin->GPC['item_number'];
$mc_gross = doubleval($vbulletin->GPC['mc_gross']);
$tax = doubleval($vbulletin->GPC['tax']);

$query = 'cmd=_notify-validate';
foreach ($_POST as $key => $value)
{
    $value = urlencode(stripslashes($value));
    $query .= "&$key=$value";
}

$used_curl = false;
//If you are ever messing around with Paypal it's a good idea to use the sandbox.
$usesandbox = false;
if ($usesandbox)
{
    $script = 'www.sandbox.paypal.com';
}
else
{
    $script = 'www.paypal.com';
}
if (function_exists('curl_init') and $ch = curl_init())
{
    curl_setopt($ch,CURLOPT_URL,'https://' . $script . '/cgi-bin/webscr');
    curl_setopt($ch,CURLOPT_TIMEOUT,15);
    curl_setopt($ch,CURLOPT_POST,true);
    curl_setopt($ch,CURLOPT_POSTFIELDSIZE,0);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$query);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,CURLOPT_USERAGENT,'vBulletin via cURL/PHP');
    $result = curl_exec($ch);
    curl_close($ch);
    if ($result !== false)
    {
        $used_curl = true;
    }
}
if (!$used_curl)
{
    $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
    $header .= "Host: " . $script . "\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " . strlen($query) . "\r\n\r\n";
    if ($fp = fsockopen($script,80,$errno,$errstr,15))
    {
        socket_set_timeout($fp,15);
        fwrite($fp,$header . $query);
        while (!feof($fp))
        {
            $result = fgets($fp,1024);
            if (strcmp($result,'VERIFIED') == 0)
            {
                break;
            }
        }
        fclose($fp);
    }
}
if ($result == 'VERIFIED')
{
    $purchase = $vbulletin->db->query_first("SELECT * FROM " . TABLE_PREFIX .
        "ma_purchases WHERE id = '" . $id . "'");
    $order = unserialize($purchase['order']);
    if ($order[0] !== $vbulletin->GPC['business'])
    {
        $status_code = '503 Service Unavailable';
        // Paypal likes to get told its message has been received
        if (SAPI_NAME == 'cgi' or SAPI_NAME == 'cgi-fcgi')
        {
            header('Status: ' . $status_code);
        }
        else
        {
            header('HTTP/1.1 ' . $status_code);
        }
    }
    unset($order[0]);
    if ($purchase and !in_array($order[1],array('renew','upgrade')))
    {
        $product = $vbulletin->db->query_read("SELECT pur_group FROM " . TABLE_PREFIX .
            "ma_products WHERE id = '" . $order[1] . "'");
        $userinfo = fetch_userinfo($purchase['userid']);
        $vbma->setCustomerNumber(unserialize($purchase['info']),$product['pur_group'],false,$userinfo);
        $rand = rand($vbulletin->options['memarea_numstart'],$vbulletin->options['memarea_numend']);
        $licnum = substr(md5($prodid . rand(0,20000) . $rand . $rand),rand(10,$vbulletin->
            options['memarea_custnumleng']));
        $licensedm = datamanager_init('License',$vbulletin,ERRTYPE_ARRAY);
        $licensedm->setr('userid',$userinfo['userid']);
        $licensedm->setr('productid',$order[1]);
        $licensedm->setr('licensenum',$licnum);
        $licensedm->set('dateline',TIMENOW);
        $licensedm->set('status',2);
        $licensedm->pre_save();
        if (!empty($licensedm->errors))
        {
            var_dump($licensedm->errors);
        }
        else
        {
            $licensedm->save();
        }
    } elseif ($purchase and $order[1] == 'renew')
    {
        $licenseinfo = $vbma->getLicense($order[2],'',false);
        $licensedm = datamanager_init('License',ERRTYPE_ARRAY);
        $licensedm->set_existing($licenseinfo);
        $licensedm->set('dateline',2);
        $licensedm->pre_save();
        if (!empty($licensedm->errors))
        {
            var_dump($licensedm->errors);
        }
        else
        {
            $licensedm->save();
        }
    } elseif ($purchase and $order[1] == 'upgrade')
    {
        $licenseinfo = $vbma->getLicense($order[2],ERRTYPE_ARRAY);
        $licensedm->set_existing($licenseinfo);
        $licensedm->set('upgrades',serialize($order[3]));
        $licensedm->pre_save();
        if (!empty($licensedm->errors))
        {
            var_dump($licensedm->errors);
        }
        else
        {
            $licensedm->save();
        }
    }
    $vbma->sendOutNewSaleEmail();
    $vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX .
        "ma_purchases WHERE id = '" . $id . "'");
    $status_code = '200 OK';
    // Paypal likes to get told its message has been received
    if (SAPI_NAME == 'cgi' or SAPI_NAME == 'cgi-fcgi')
    {
        header('Status: ' . $status_code);
    }
    else
    {
        header('HTTP/1.1 ' . $status_code);
    }
    exit;
}
$status_code = '503 Service Unavailable';
// Paypal likes to get told its message has been received
if (SAPI_NAME == 'cgi' or SAPI_NAME == 'cgi-fcgi')
{
    header('Status: ' . $status_code);
}
else
{
    header('HTTP/1.1 ' . $status_code);
}
?>

可能需要更多帮助来解决这个问题,但我只是想问问,自2008年编写以来,有人认为该付款脚本有任何冲突。

解决方法

  • 您需要使用HTTP / 1.1
  • URL to post back to现在为https://ipnpb.paypal.com/cgi-bin/webscr,基本上是ipnpb代替了www
  • 您的服务器/环境可能没有最新的根证书,因此无法验证paypal.com的主机并形成用于回发的安全HTTPS SSL连接,因此无法启动连接并收到“已验证”回应
  • 您的服务器/环境还必须具有TLS 1.2功能

由于理智,请尽快停止使用IPN并升级到基于v2/orders/checkout APIs(设置/捕获交易)和server approval flow的版本。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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-