Avatar billede Jakie Juniormester
19. marts 2013 - 15:44 Der er 2 kommentarer

Paypal integration?

Hej Eksperter

Jeg prøver at lave et betalingssytem med paypal, men det virker ikke.

Jeg har en form, hvor brugeren selv kan bestemme, hvor mange penge, man vil sætte ind:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
   
    <input type="hidden" name="cmd" value="_xclick">
    <input type="hidden" name="business" value="jgg@live.dk">

    Kroner <input type="text" name="amount">
     
    <input type="hidden" name="no_shipping" value="0">
    <input type="hidden" name="no_note" value="1">
    <input type="hidden" name="currency_code" value="DKK">
    <input type="hidden" name="lc" value="AU">
    <input type="hidden" name="bn" value="PP-BuyNowBF">

    <input type="hidden" name="email" value="<?php echo Session::get('bruger_email'); ?>">
    <input type="hidden" name="navn" value="<?php echo Session::get('bruger_navn'); ?>">
    <input type="hidden" name="brugernavn" value="<?php echo Session::get('bruger_brugernavn'); ?>">
    <input type="hidden" name="brugerid" value="<?php echo Session::get('bruger_id'); ?>">
    <input type="hidden" name="brugerefternavn" value="<?php echo Session::get('bruger_efternavn'); ?>">

    <input type="hidden" name="return" value="http://www.cc.com/partner/payment_complete">


    <br />
    <input type="submit" class="submit" value="Pay with PayPal!">


Jeg har så sat url min ipn url inde i paypal, som skal køre dette sript:

        // 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.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, dirname(__FILE__) . '/cacert.pem');
        if( !($res = curl_exec($ch)) ) {
            // error_log("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['amount'];
            $payment_currency             = $_POST['currency_code'];
            $txn_id                     = $_POST['txn_id'];
            $receiver_email             = $_POST['business'];
            $payer_email                 = $_POST['email'];
            $bruger_email                     = $_POST['email'];
            $bruger_navn                     = $_POST['navn'];
            $brugernavn                     = $_POST['brugernavn'];
            $brugerid                         = $_POST['brugerid'];
            $brugerefternavn                 = $_POST['efternavn'];
            $date                             = date("Y-m-d H:i:s"); 

            $this->db->insert('partner_indbetalinger', array(
                  'indbetaling_sum'              => $payment_amount,
                'indbetaling_date'          => $date,
                'indbetaling_by'            => $brugerid,
            ));

        } else if (strcmp ($res, "INVALID") == 0) {
            // log for manual investigation
       
        }
    }

Paypals eget startsscript, som jeg har taget udgangspunkt i.

hvad gør jeg forkert, har prøvet at teste det med sandbox?
Avatar billede amews_aj Nybegynder
19. marts 2013 - 15:56 #1
Har nok desværre ikke tid til at hjælpe dig med at fejlsøge, men lige nogle tips så andre har lettere ved at hjælpe, eller du måske selv kan finde fejlen.

1. "Det virker ikke" fortæller ikke meget. Hvad sker der? Går pengene igennem? Er det blot validering der fejler? osv.

2. Sæt evt. noget logging ind (log data undervejs i koden til en tekstfil, så du kan se om IPN kald finder sted, og hvorfor det i givet fald fejler).

Måske loggen giver dig nok information til selv at løse problemet, eller også kan du give flere informationer til spørgsmålet her. Husk selvfølgelig at fjerne evt. personlige oplysninger fra logging teksten.
Avatar billede morten-bork Nybegynder
29. marts 2013 - 16:30 #2
Keder en der har haft samme problem. Hvis du vil have kontakt med ham så skriv en privat besked til mig :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester