如何在自定义支付wordpress插件中修复PHP调用未定义的错误消息?

时间:2016-02-02 11:21:43

标签: php wordpress curl wordpress-plugin

我正在为我当地的银行制作自定义付款wordpress插件。在处理付款时,我收到了错误消息,例如“通知未定义索引:.......第4行”,如下面的截图: error message

来自上面屏幕截图的

index.php脚本

<?php
ini_set('display_errors',1);  error_reporting(E_ALL);
$data = array(
           'MerchantID' => $_POST['MerchantID'],     
            'TransactionID' => $_POST['TransactionID'],   
            'RequestDate' =>  $_POST['RequestDate'], 
            'Amount' => $_POST['Amount'],    
            'CurrencyCode' =>$_POST['CurrencyCode'],   
            'Tax' => $_POST['Tax'],    
            'Signature' => $_POST['Signature'],   
            'Description' =>$_POST['Description'],       
            'CallbackURL' => $_POST['CallbackURL'], 
            'UserSession'  => $_POST['UserSession'],   
            'TransactionNote' => $_POST['TransactionNote']  
);

$url_send ="http://simpg.sprintasia.net:8779/bcasakuku/bak/InquiryProc";
$str_data = json_encode($data);

function sendPostData($url, $post){
  $ch = curl_init($url);
  $curl_header = array('Accept: application/json', 'Content-Type: application/json');
  curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_header);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");  
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  $result = curl_exec($ch);
  curl_close($ch);  // Seems like good practice
  return $result;
}


echo " " . sendPostData($url_send, $str_data);

?>

有关详细信息,请尝试this product并使用BCA sakuku作为付款选项,如下面的截图: bca sakuku payment option

它很奇怪,因为这些插件在localhost中的魅力不像dev.galerigadget.com

我该如何解决?

干杯

2016年2月2日更新

它的新脚本index.php基于another question,但仍然没有运气

<?php
ini_set('display_errors',1);  error_reporting(E_ALL);

//Checking to fix error
$MerchantID  = $_POST['MerchantID'];
if (!isset($MerchantID)) $MerchantID = '';
$TransactionID = $_POST['TransactionID'];
if (!isset($TransactionID)) $TransactionID = '';
$RequestDate = $_POST['RequestDate'];
if (!isset($RequestDate)) $RequestDate = '';
$Amount = $_POST['Amount'];
if (!isset($Amount)) $Amount = '';
$CurrencyCode = $_POST['CurrencyCode'];
if (!isset($CurrencyCode)) $CurrencyCode = '';
$Tax = $_POST['Tax'];
if (!isset($Tax)) $Tax = '';
$Signature = $_POST['Signature'];
if (!isset($Signature)) $Signature = '';
$Description = $_POST['Description'];
if (!isset($Description)) $Description = '';
$CallbackURL = $_POST['CallbackURL'];
if (!isset($CallbackURL)) $CallbackURL = '';
$UserSession = $_POST['UserSession'];
if (!isset($UserSession)) $UserSession = '';
$TransactionNote = $_POST['TransactionNote'];
if (!isset($TransactionNote)) $TransactionNote = '';

$data = array(
           'MerchantID' => $MerchantID,     
            'TransactionID' => $TransactionID,   
            'RequestDate' =>  $RequestDate, 
            'Amount' => $Amount,    
            'CurrencyCode' => $CurrencyCode,   
            'Tax' => $Tax,    
            'Signature' => $Signature,   
            'Description' => $Description,       
            'CallbackURL' => $CallbackURL, 
            'UserSession'  => $UserSession,   
            'TransactionNote' => $TransactionNote, 
);

$url_send ="http://simpg.sprintasia.net:8779/bcasakuku/bak/InquiryProc";
$str_data = json_encode($data);

function sendPostData($url, $post){
  $ch = curl_init($url);
  $curl_header = array('Accept: application/json', 'Content-Type: application/json');
  curl_setopt($ch, CURLOPT_HTTPHEADER, $curl_header);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");  
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  $result = curl_exec($ch);
  curl_close($ch);  // Seems like good practice
  return $result;
}


echo " " . sendPostData($url_send, $str_data);

?>

4 个答案:

答案 0 :(得分:0)

如果在localhost上一切正常,可能是因为没有正确执行迁移。请尝试阅读本文的codex https://codex.wordpress.org/Moving_WordPress

  

当您的域名或网址发生变化时,还会有其他问题。可以移动文件和数据库,但是对旧域名或位置的引用将保留在数据库中,这可能会导致链接或主题显示出现问题。

     

如果您对整个数据库进行搜索和替换以更改URL,则可能会导致数据序列化问题,因为某些主题和窗口小部件会存储标记了URL长度的值。当这种情况发生变化时,事情就会破裂。

或者使用此脚本确保您在所有数据库更改时正确迁移。

https://interconnectit.com/products/search-and-replace-for-wordpress-databases/

答案 1 :(得分:0)

如果您移动了网站,则序列化数据和网址地址可能会出错,并且会发生类似这样的事情。

要正确迁移网站,您应该安装该插件 WP Migrate DB - 它处理序列化数据并通过指定要搜索的URL以及应该替换它来更改数据库中的URL。

答案 2 :(得分:0)

  

$MerchantID = $_POST['MerchantID'];
  if (!isset($MerchantID)) $MerchantID = '';
  $_POST['MerchantID']

如E_NOTICE消息中所述......

  

注意:未定义的索引:MerchantID   E_NOTICE是因为

MerchantID未设置。换句话说,$_POST数组的$MerchantID = isset($_POST['MerchantID']) ? $_POST['MerchantID'] : ''; 索引未定义。看来数据还没有POST(提交)到这个脚本?

您应该为您的数据分配如下内容:

If (empty($MerchantID)) {
    /* ABORT! */
}

这将解决您的E_NOTICE消息的直接问题,但是,它不能解决为什么您的数据尚未提交的更大问题。

稍后您仍需要进行某种验证检查......

friendly_id :slug_candidates, use: :slugged

 def slug_candidates
   [
     [parent.try(:slug), :title]
   ]
 end

答案 3 :(得分:0)

最后,我的插件向我的网站主办客户服务部门报告,我的网站连接到第三方服务器的端口已经被阻止。