Paymill PayPal Integration

chickenburner

Newbie
Dabei seit
Feb. 2020
Beiträge
6
Hallo,

ich versuche aktuell ein Checkout zu basteln und habe dazu Paymill als Zahlungsanbieter integriert. Kreditkarte und Sepa Lastschrift funktionieren bereits tadellos. Allerdings hänge ich bei der Integration von PayPal. So sieht mein Script aktuell aus:


JavaScript:
 function PaymillResponseHandler(error, result) {
                    if (error) {
                        $(".payment_errors").text(error.apierror);
                        $(".payment_errors").css("display","inline-block");
                    } else {
                        $(".payment_errors").css("display","none");
                        $(".payment_errors").text("");
                        var form = $("#payment-form");
                        // Token
                        var token = result.token;
                        form.append("<input type='hidden' name='paymillToken' value='" + token + "'/>");
                        form.get(0).submit();
                    }
                    $(".submit-button").removeAttr("disabled");
                }

$("#payment-form").submit(function (event) {
                    $('.submit-button').attr("disabled", "disabled");

                    paymenttype = $('.switch_button_active').length ? $('.switch_button_active').val() : $('.switch_button_active').val();
                    console.log(paymenttype);
                    switch (paymenttype) {
                        case "cc":
                            $('.submit-button').attr("disabled", "disabled");
                            if (false === paymill.validateHolder($('.card-holdername').val())) {
                                $(".payment_errors").text(translation[formlang]["error"]["invalid-card-holdername"]);
                                $(".payment_errors").css("display","inline-block");
                                $(".submit-button").removeAttr("disabled");
                                return false;
                            }
                            if ((false === paymill.validateCvc($('.card-cvc').val()))) {
                                if(VALIDATE_CVC){
                                    $(".payment_errors").text(translation[formlang]["error"]["invalid-card-cvc"]);
                                    $(".payment_errors").css("display","inline-block");
                                    $(".submit-button").removeAttr("disabled");
                                    return false;
                                } else {
                                    $('.card-cvc').val("000");
                                }
                            }
                            if (false === paymill.validateCardNumber($('.card-number').val())) {
                                $(".payment_errors").text(translation[formlang]["error"]["invalid-card-number"]);
                                $(".payment_errors").css("display","inline-block");
                                $(".submit-button").removeAttr("disabled");
                                return false;
                            }
                            var expiry = $('.card-expiry').val();
                            expiry = expiry.split("/");
                            if(expiry[1] && (expiry[1].length <= 2)){
                                expiry[1] = '20'+expiry[1];
                            }
                            if (false === paymill.validateExpiry(expiry[0], expiry[1])) {
                                $(".payment_errors").text(translation[formlang]["error"]["invalid-card-expiry-date"]);
                                $(".payment_errors").css("display","inline-block");
                                $(".submit-button").removeAttr("disabled");
                                return false;
                            }
                            var params = {
                                amount_int:     parseInt($('.amount').val().replace(/[\.,]/, '.') * 100),  // E.g. "15" for 0.15 Eur
                                currency:       $('.currency').val(),    // ISO 4217 e.g. "EUR"
                                number:         $('.card-number').val(),
                                exp_month:      expiry[0],
                                exp_year:       expiry[1],
                                cvc:            $('.card-cvc').val(),
                                cardholder:     $('.card-holdername').val()
                            };
                            break;

                        case "elv":
                            iban = new Iban();

                    $('.submit-button').attr("disabled", "disabled");

                    if (!paymill.validateHolder($('.elv-holdername').val())) {
                        $(".payment_errors").text(translation[formlang]["error"]["invalid-elv-holdername"]);
                        $(".payment_errors").css("display", "inline-block");
                        $(".submit-button").removeAttr("disabled");
                        return false;
                    }

                    if (!iban.validate($('.elv-iban').val())) {
                        $(".payment_errors").text(translation[formlang]["error"]["invalid-elv-iban"]);
                        $(".payment_errors").css("display", "inline-block");
                        $(".submit-button").removeAttr("disabled");
                        return false;
                    }

                    if ($('.elv-bic').val().length !== 9 && $('.elv-bic').val().length !== 11) {
                        $(".payment_errors").text(translation[formlang]["error"]["invalid-elv-bic"]);
                        $(".payment_errors").css("display", "inline-block");
                        $(".submit-button").removeAttr("disabled");
                        return false;
                    }

                    ibanData = $('.elv-iban').val().replace(/\s+/g, "");

                    var params = {
                        iban: ibanData,
                        bic: $('.elv-bic').val(),
                        accountholder: $('.elv-holdername').val()
                    };


                            break;
                            
                            
                            case "paypal":
                            $('.submit-button').attr("disabled", "disabled");
                            
                            
                            var params = {
                                amount_int:     parseInt($('.amount').val().replace(/[\.,]/, '.') * 100),  // E.g. "15" for 0.15 Eur
                                currency:       $('.currency').val(),    // ISO 4217 e.g. "EUR"
                                checksum_type:       "paypal",
                                return_url:       "url.de",
                                cancel_url:       "url.de",
                                
                            };
                            break;
                    }
                    
                    

                    if($('.switch_button_active').val() === "paypal"){
                      
                        
                        ????
                        
                        
                       } else {
                       paymill.createToken(params, PaymillResponseHandler);
                       }
                    
                    return false;
                });
Für Kreditkarte und Sepa muss ich ein Token erstellen, der dann in meiner payment.php zu einer Zahlung verarbeitet wird. Für PayPal muss ich allerdings ein Checksum erstellen: https://developers.paymill.com/guides/paypal/transactions
Ich hab leider keine Ahnung, wie ich das genau machen muss. Muss ich hier einen Ajax Request senden und danach die Transaction erstellen, in etwa so?:


JavaScript:
                        var api_url = 'https://api.paymill.com/v2.1/checksums'
                        var key = '11111111' // not real
                      
                        $.ajax({
                            headers: {
            "Authorization": "Basic " + btoa(key + ":" + "")
        },
                            method: 'POST',
                            url: api_url,
                            data: params,
                            })
                            .done(function( msg ) {
                            alert( 'Data Saved: ' + msg.checksum + msg );
                            paymill.createTransaction(msg.checksum);
                            });
Oder was genau muss ich hier machen?

Stehe leider total auf dem Schlauch.

Vielen Dank im Voraus
 

floTTes

Lieutenant
Dabei seit
Okt. 2006
Beiträge
602
Die Check-Summe wird von deinem Server erstellt. Daher wird im Beispiel auch cURL genutzt. Je nachdem ob dein PHP-Server cURL unterstützt, nimmst du entweder cURL oder z.B. get_file_contents().

Diese Check-Summe dann einfach an den CheckOut-Button pappen.
 
Top