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?
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:
tokenizationSpec
object it should be parameters
and not paramters
allowedAuthMethods
array it should be CRYPTOGRAM_3DS
and not CRYPOGRAM_3DS
totalPrice
must be a stringcardconnect
instead of CARDCONNECT
const allowedPaymentMethods = ["CARD", "TOKENIZED_CARD"];
can be removed. You set it correctly later in the code: paymentDataRequest.allowedPaymentMethods = [cardPaymentMethod];
allowedPaymentMethods: allowedPaymentMethods
inside the googlePayConfig
object can be removed.Working example: https://jsfiddle.net/rumwj0av/5/