<legend id='AKujv'><style id='AKujv'><dir id='AKujv'><q id='AKujv'></q></dir></style></legend>

  • <tfoot id='AKujv'></tfoot>

    <small id='AKujv'></small><noframes id='AKujv'>

      <bdo id='AKujv'></bdo><ul id='AKujv'></ul>
    <i id='AKujv'><tr id='AKujv'><dt id='AKujv'><q id='AKujv'><span id='AKujv'><b id='AKujv'><form id='AKujv'><ins id='AKujv'></ins><ul id='AKujv'></ul><sub id='AKujv'></sub></form><legend id='AKujv'></legend><bdo id='AKujv'><pre id='AKujv'><center id='AKujv'></center></pre></bdo></b><th id='AKujv'></th></span></q></dt></tr></i><div id='AKujv'><tfoot id='AKujv'></tfoot><dl id='AKujv'><fieldset id='AKujv'></fieldset></dl></div>

        贝宝的 curl_setopt cacert.pem

        时间:2023-06-23
        • <bdo id='Zmk2m'></bdo><ul id='Zmk2m'></ul>

            <tbody id='Zmk2m'></tbody>
          1. <small id='Zmk2m'></small><noframes id='Zmk2m'>

            <legend id='Zmk2m'><style id='Zmk2m'><dir id='Zmk2m'><q id='Zmk2m'></q></dir></style></legend>
              • <i id='Zmk2m'><tr id='Zmk2m'><dt id='Zmk2m'><q id='Zmk2m'><span id='Zmk2m'><b id='Zmk2m'><form id='Zmk2m'><ins id='Zmk2m'></ins><ul id='Zmk2m'></ul><sub id='Zmk2m'></sub></form><legend id='Zmk2m'></legend><bdo id='Zmk2m'><pre id='Zmk2m'><center id='Zmk2m'></center></pre></bdo></b><th id='Zmk2m'></th></span></q></dt></tr></i><div id='Zmk2m'><tfoot id='Zmk2m'></tfoot><dl id='Zmk2m'><fieldset id='Zmk2m'></fieldset></dl></div>

                <tfoot id='Zmk2m'></tfoot>
                  本文介绍了贝宝的 curl_setopt cacert.pem的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在尝试为 IPN (paypal) 验证设置回调处理程序.我知道 curl 的作用,但我不知道cacert.pem"是什么(证书...?).

                  I'm trying to set up a callback handler for IPN (paypal) verification. I know what curl does, but I don't know what 'cacert.pem' is (certificate...?).

                  这是 callback.php 文件失败的地方(存在):

                  this is where the callback.php file fails (exists):

                  curl_setopt($ch, CURLOPT_CAINFO, 'cacert.pem');
                  if( !($res = curl_exec($ch)) ) {
                      echo ("Got " . curl_error($ch) . " when processing IPN data");
                      curl_close($ch);
                      exit;
                  }
                  curl_close($ch);
                  

                  带有以下错误消息:

                  设置证书验证位置时出错:CAfile:cacert.pemCApath:处理IPN数据时无

                  Got error setting certificate verify locations: CAfile: cacert.pem CApath: none when processing IPN data

                  所以我下载了 cacert.pem 并复制到 callback.php 文件所在的目录.

                  So I downloaded cacert.pem and copied to the directory where the callback.php file is.

                  这是上面代码前的注释:

                  This is a comment before the code above:

                  // In wamp like environments that do not come bundled with root authority certificates,
                  // please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path 
                  // of the certificate as shown below.
                  

                  我正在使用 XAMPP,这会是问题吗?

                  I'm using XAMPP, this would be the problem?

                  最后,这是直接来自开发人员页面的整个 php 文件:https://www.x.com/developers/PayPal/documentation-tools/code-sample/216623

                  And finally this is the whole php file directly from developer page: https://www.x.com/developers/PayPal/documentation-tools/code-sample/216623

                  <?php
                  
                  // STEP 1: Read POST data
                  
                  // reading posted data from directly from $_POST causes serialization 
                  // issues with array data in POST
                  // reading raw POST data from input stream instead. 
                  $raw_post_data = file_get_contents('php://input');
                  $raw_post_array = explode('&', $raw_post_data);
                  $myPost = array();
                  foreach ($raw_post_array as $keyval) {
                    $keyval = explode ('=', $keyval);
                    if (count($keyval) == 2)
                       $myPost[$keyval[0]] = urldecode($keyval[1]);
                  }
                  // read the post from PayPal system and add 'cmd'
                  $req = 'cmd=_notify-validate';
                  if(function_exists('get_magic_quotes_gpc')) {
                     $get_magic_quotes_exists = true;
                  } 
                  foreach ($myPost as $key => $value) {        
                     if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) { 
                          $value = urlencode(stripslashes($value)); 
                     } else {
                          $value = urlencode($value);
                     }
                     $req .= "&$key=$value";
                  }
                  
                  
                  // STEP 2: Post IPN data back to paypal to validate
                  
                  $ch = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr');
                  curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
                  curl_setopt($ch, CURLOPT_POST, 1);
                  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
                  curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
                  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
                  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
                  curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
                  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
                  
                  // In wamp like environments that do not come bundled with root authority certificates,
                  // please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path 
                  // of the certificate as shown below.
                  curl_setopt($ch, CURLOPT_CAINFO, 'cacert.pem');
                  if( !($res = curl_exec($ch)) ) {
                      echo ("Got " . curl_error($ch) . " when processing IPN data");
                      curl_close($ch);
                      exit;
                  }
                  curl_close($ch);
                  
                  // STEP 3: Inspect IPN validation result and act accordingly
                  
                  if (strcmp ($res, "VERIFIED") == 0) {
                      // check whether the payment_status is Completed
                      // check that txn_id has not been previously processed
                      // check that receiver_email is your Primary PayPal email
                      // check that payment_amount/payment_currency are correct
                      // process payment
                  
                      // assign posted variables to local variables
                      $item_name = $_POST['item_name'];
                      $item_number = $_POST['item_number'];
                      $payment_status = $_POST['payment_status'];
                      $payment_amount = $_POST['mc_gross'];
                      $payment_currency = $_POST['mc_currency'];
                      $txn_id = $_POST['txn_id'];
                      $receiver_email = $_POST['receiver_email'];
                      $payer_email = $_POST['payer_email'];
                  
                      $string = "------------------------
                  ";
                      $string .= "item_name: ".$item_name."
                  ";
                      $string .= "item_number: ".$item_number."
                  ";
                      $string .= "payment_status: ".$payment_status."
                  ";
                      $string .= "payment_amount: ".$payment_amount."
                  ";
                      $string .= "payment_currency: ".$payment_currency."
                  ";
                      $string .= "txn_id: ".$txn_id."
                  ";
                      $string .= "receiver_email: ".$receiver_email."
                  ";
                      $string .= "payer_email: ".$payer_email."
                  ";
                  
                      $fp = fopen('test.log', 'w');
                      fwrite($fp, $string."
                  ");
                      fclose($fp);
                  
                  } else if (strcmp ($res, "INVALID") == 0) {
                      // log for manual investigation
                  }
                  ?>
                  

                  推荐答案

                  根据注释,您需要设置(完整)目录路径,如果 pem 文件与脚本位于同一目录中,则应该可以:

                  As per the comment you need to set the (full) directory path, if the pem file is in the same directory as the script then this should work:

                  curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
                  

                  有关 cacert.pem 文件是什么的说明,请检查这个已接受的答案.

                  For an explanation of what the cacert.pem file is, check this accepted answer.

                  这篇关于贝宝的 curl_setopt cacert.pem的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:将 Paypal 付款拆分为两个帐户 下一篇:PayPal REST API 为信用卡令牌返回 500 服务器错误

                  相关文章

                1. <i id='jrYCF'><tr id='jrYCF'><dt id='jrYCF'><q id='jrYCF'><span id='jrYCF'><b id='jrYCF'><form id='jrYCF'><ins id='jrYCF'></ins><ul id='jrYCF'></ul><sub id='jrYCF'></sub></form><legend id='jrYCF'></legend><bdo id='jrYCF'><pre id='jrYCF'><center id='jrYCF'></center></pre></bdo></b><th id='jrYCF'></th></span></q></dt></tr></i><div id='jrYCF'><tfoot id='jrYCF'></tfoot><dl id='jrYCF'><fieldset id='jrYCF'></fieldset></dl></div>
                2. <tfoot id='jrYCF'></tfoot>

                    1. <legend id='jrYCF'><style id='jrYCF'><dir id='jrYCF'><q id='jrYCF'></q></dir></style></legend>

                      <small id='jrYCF'></small><noframes id='jrYCF'>

                        <bdo id='jrYCF'></bdo><ul id='jrYCF'></ul>