Search code examples
javascriptpayment-processinggoogle-pay

OR_BIBED_06 error in Google Pay test environtment


I'm trying to set up Google Pay in test mode for a website (not for an Android app). My Processor is Fiserv - CardPointe which says to use CARDCONNCT as the gateway. When the Google Pay window pops up it displays this error.

Something went wrong This merchant is having trouble accepting your payment right now. Try using a different payment method. [OR_BIBED_06] OR_BIBED_06

I'm not seeing a lot about this error on Google. But I'm thinking this is a problem with Fiserv. Here is my code

<script>
    function googlePayLoaded() {
        googlePayClient = new google.payments.api.PaymentsClient({ environment: 'TEST' });
        console.log("Google Pay Client loaded");
    }
</script>
<script id="googlePay" src="https://pay.google.com/gp/p/js/pay.js" async onload="googlePayLoaded()"></script>

And the code that runs on the Donation page at start up and creates the button

const allowedPaymentMethods = ["CARD", "TOKENIZED_CARD"];
const allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"];
googlePayMerchantID = settingValue(settings, "GooglePayMerchantID");
googlePayMerchantName = settingValue(settings, "GooglePayMerchantName");
// also called IsReadyToPayRequest in the docs
googlePayConfig = {
    apiVersion: 2,
    apiVersionMinor: 0,
    allowedPaymentMethods: allowedPaymentMethods
}
paymentDataRequest = Object.assign({}, googlePayConfig);
// currency code is ISO 4217 code
// country code is ISO 3166-1 alpha-2 code for where the transaction is processed
paymentDataRequest.transactionInfo = {
    totalPriceStatus: "FINAL",
    totalPrice: "0",  // will change this later
    currencyCode: "USD",
    countryCode: "US"
}
paymentDataRequest.merchantInfo = {
    merchantId: googlePayMerchantID,
    merchantName: googlePayMerchantName
}
const tokenizationSpec = {
    type: "PAYMENT_GATEWAY",
    parameters: {
        gateway: 'CARDCONNECT',
        gatewayMerchantId: CardPointeMerchantID
    }
}
const cardPaymentMethod = {
    type: "CARD",
    tokenizationSpecification: tokenizationSpec,
    parameters: {
        allowedCardNetworks: allowedCardNetworks,
        allowedAuthMethods: ["PAN_ONLY", "CRYPTOGRAM_3DS"]
        //billingAddressParamters: {
        //    format: "FULL",
        //    phoneNumberRequired: false
        //}
    }
}
paymentDataRequest.shippingAddressRequired = false;
paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];

googlePayClient.isReadyToPay(googlePayConfig).then(function (response) {
    if (response.result) {
        vm.showGooglePayOption = true;
        const googlePayButton = googlePayClient.createButton({
            buttonColor: "default",
            buttonType: "donate",
            onClick: donateWithGooglePay
            //allowedPaymentMethods: [cardPaymentMethod]
        });
        $("#googlePayButton").html(googlePayButton);
    } else {
        console.log("Google Pay not ready");
    }
}).catch(function (error) {
    console.log(error);
});

And then when you click the button it does this

function donateWithGooglePay2() {
    paymentDataRequest.transactionInfo.totalPrice = vm.data.amount.toString();
    googlePayClient.loadPaymentData(paymentDataRequest).then((paymentData) => {
        token = paymentData.paymentMethodData.tokenizationData.token;
        if (vm.paymentProcessor === "CardPointe") {
            tokenized = true;
            donate2();  // this uses the token to authorize a payment 
        }
    }).catch((error) => {
        // errors will be displayed in the Google Pay window
        console.log(error);
        return;
    });
}

Any thoughts?

PS here is my resulting paymentdatarequest object paymentDataRequest object


Solution

  • There is no call to Fiserv during the Google Pay tokenization process. Use paymentData.paymentMethodData.tokenizationData.token at the end of the process to send the token to your backend and finally over to Fiserv for the actual authorization.

    To get rid of the OR_BIBED_06 error change the following in your code:

    1. in the tokenizationSpec object it should be parameters and not paramters
    2. in the allowedAuthMethods array it should be CRYPTOGRAM_3DS and not CRYPOGRAM_3DS
    3. totalPrice must be a string
    4. Use cardconnect instead of CARDCONNECT
    5. const allowedPaymentMethods = ["CARD", "TOKENIZED_CARD"]; can be removed. You set it correctly later in the code: paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
    6. allowedPaymentMethods: allowedPaymentMethods inside the googlePayConfig object can be removed.

    Working example: https://jsfiddle.net/rumwj0av/5/