2013-12-16 46 views
1

我动态enrypting我的PayPal按钮,但在“订阅”按钮,我从贝宝收到的错误时,点击“调度错误,请检查更多信息的日志文件”。加密PayPal按钮

我使用生成我的按钮的代码:

<form id="suf" onsubmit="return newUser();" action="<?php echo $PPBtnURL; ?>" method="POST"> 
    <?php 
     $form = array(); 
     $form['business']=$PPbtnUser; 
     $form['itemname']=$_POST['item_name']; 
     $form['itemnumber']=$_POST['item_number']; 
     $form['currency_code']="USD"; 
     $skip_a2 = ($res['a2'] <= $res['a1']); 
     foreach($res as $k=>$v){ 
      if($skip_a2 && ($k == "a2" || $k=="p2" || $k=="t2")){continue;} 
      if($k == "trial1" || $k == "trial2"){continue;} 
      $form[$k]=$v;         
     } 
     $form['src']=1; 
     $form['rm']=2; 
     $form['return']="https://www.mysite.com/signup2.php"; 
     $form['cancel_return']="https://www.mysite.com/"; 
     $form['bname']=$_POST['bname']; 
     $form['fname']=$_POST['fname']; 
     $form['lname']=$_POST['lname'];       
     $form['pwone']=$_POST['pwone']; 
     $form['pwtwo']=$_POST['pwtwo']; 

     $encrypted = paypal_encrypt($form); 

     function paypal_encrypt($hash){ 
      global $MY_KEY_FILE; 
      global $MY_CERT_FILE; 
      global $PAYPAL_CERT_FILE; 
      global $OPENSSL; 

      // private key file to use 
      $MY_KEY_FILE = "/home/mysite/mysite.com/prvkey.pem"; 
      // public certificate file to use 
      $MY_CERT_FILE = "/home/mysite/mysite.com/a62ecbe3015a2165c8859b953753038a-pubcert.pem"; 
      // Paypal's public certificate 
      $PAYPAL_CERT_FILE = "/home/mysite/mysite.com/paypal_cert.pem"; 
      // path to the openssl binary 
      $OPENSSL = "/usr/bin/openssl"; 

      if (!file_exists($MY_KEY_FILE)) { 
       echo "ERROR: MY_KEY_FILE $MY_KEY_FILE not found\n"; 
      } 
      if (!file_exists($MY_CERT_FILE)) { 
       echo "ERROR: MY_CERT_FILE $MY_CERT_FILE not found\n"; 
      } 
      if (!file_exists($PAYPAL_CERT_FILE)) { 
       echo "ERROR: PAYPAL_CERT_FILE $PAYPAL_CERT_FILE not found\n"; 
      } 

      //Assign Build Notation for PayPal Support 
      $hash['bn']= 'StellarWebSolutions.PHP_EWP2'; 

      $data = ""; 
      foreach ($hash as $key => $value) { 
       if ($value != "") { 
        $data .= "$key=$value\n"; 
       } 
      } 
      $openssl_cmd = "($OPENSSL smime -sign -signer $MY_CERT_FILE -inkey $MY_KEY_FILE " . 
       "-outform der -nodetach -binary <<_EOF_\n$data\n_EOF_\n) | " . 
       "$OPENSSL smime -encrypt -des3 -binary -outform pem $PAYPAL_CERT_FILE"; 
      exec($openssl_cmd, $output, $error); 
      if(!$error){ 
       return implode("\n",$output); 
      }else{ 
       return "ERROR: encryption failed"; 
      } 
     }; 
    ?> 
    <input type="hidden" name="cmd" value="_s-xclick"> 
    <input type="hidden" name="encrypted" value="<?PHP echo $encrypted; ?>"> 
    <input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/btn_subscribeCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"> 
    <img alt="" border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1"> 
</form> 

我遵循的步骤和最常用的示例代码here

什么可能导致此错误?我从PHP没有错误。

奖金问题:贝宝提到什么日志文件?

+0

你的服务器日志? – Grumpy

+0

哪个服务器登录?我的ipn日志中没有任何内容,并且没有任何内容来自php,就像我说的。除了paypal如何访问我的服务器上的任何日志? –

回答

1

有点晚了,但如果有帮助:我得到的是同样的错误,以下相同的教程后,虽然我不能看到你的代码的问题,我发现,每当有什么东西在我会得到这个错误$表单被传递到PayPal不喜欢的paypal_encrypt()中。

TL;博士:在$形式的无效数据可以触发这个“有用”的错误

此外,要知道,你是从$ _ POST传递数据直接进入$ openssl_cmd没有逃脱它。