проблема интеграции сеанса, размещенного на mastercard

Я хочу интегрировать оплату на свой веб-сайт, используя систему платежных шлюзов mastercard. Для интеграции я использую метод размещенного сеанса. Я использую сеанс, размещенный на mastercard

Мой код javascript

<script src="https://network.gateway.mastercard.com/form/version/51/merchant/
**<testmerchantID>**/session.js"></script>
<script>
    if (self === top) {
    var antiClickjack = document.getElementById("antiClickjack");
    antiClickjack.parentNode.removeChild(antiClickjack);
} else {
    top.location = self.location;
}

PaymentSession.configure({
    fields: {
        // ATTACH HOSTED FIELDS TO YOUR PAYMENT PAGE FOR A CREDIT CARD
        card: {
            number: "#card-number",
            securityCode: "#security-code",
            expiryMonth: "#expiry-month",
            expiryYear: "#expiry-year"
        }
    },
    session: 'abc456',
    //SPECIFY YOUR MITIGATION OPTION HERE
    frameEmbeddingMitigation: ["javascript"],
    callbacks: {
        initialized: function(response) {
            //console.log(response.status); 
        },
        formSessionUpdate: function(response) {
            // HANDLE RESPONSE FOR UPDATE SESSION
            if (response.status) {
                if ("ok" == response.status) {
                    console.log("Session updated with data: " + response.session.id);

                    //check if the security code was provided by the user
                    if (response.sourceOfFunds.provided.card.securityCode) {
                        console.log("Security code was provided.");
                    }

                    //check if the user entered a Mastercard credit card
                    if (response.sourceOfFunds.provided.card.scheme == 'MASTERCARD') {
                        console.log("The user entered a Mastercard credit card.")
                    }
                } else if ("fields_in_error" == response.status)  {

                    console.log("Session update failed with field errors.");
                    if (response.errors.cardNumber) {
                        console.log("Card number invalid or missing.");
                    }
                    if (response.errors.expiryYear) {
                        console.log("Expiry year invalid or missing.");
                    }
                    if (response.errors.expiryMonth) {
                        console.log("Expiry month invalid or missing.");
                    }
                    if (response.errors.securityCode) {
                        console.log("Security code invalid.");
                    }
                } else if ("request_timeout" == response.status)  {
                    console.log("Session update failed with request timeout: " + response.errors.message);
                } else if ("system_error" == response.status)  {
                    console.log("Session update failed with system error: " + response.errors.message);
                }
            } else {
                console.log("Session update failed: " + response);
            }
        }
    },
    interaction: {
        displayControl: {
            formatCard: "EMBOSSED",
            invalidFieldCharacters: "REJECT"
        }
    },
    order: {
        amount: 10.00,
        currency: "AED" ,
        id:123
    }
  });

function pay() {
    // UPDATE THE SESSION WITH THE INPUT FROM HOSTED FIELDS
    PaymentSession.updateSessionFromForm('card');
}
</script>

Я использовал параметр сеанс: 'фиктивные данные' внутри параметра конфигурации, так как мне нужно идентифицировать каждую транзакцию. Это дает мне ошибку

Session update failed with system error: Form Session not found or expired.

Когда я комментирую эту строку, я получаю в ответе sessionID, созданный библиотекой. Я не понимаю, как идентифицировать каждую транзакцию. Пожалуйста, помогите мне


person Techy    schedule 26.03.2019    source источник
comment
С session: 'abc456' вы указываете идентификатор сеанса для использования, но это будет иметь смысл только в том случае, если у вас уже есть один из предыдущего запроса, и вам нужно явно указать сеанс id по какой-то причине в первую очередь.   -  person 04FS    schedule 26.03.2019
comment
«Я не понимаю, как идентифицировать каждую транзакцию». - что вы имеете в виду под этим: «Определить, когда, где, почему»? Вы уже включили конкретный идентификатор заказа в отправляемые данные, что еще вам нужно?   -  person 04FS    schedule 26.03.2019
comment
Немного поздно, но, по моему опыту, сеанс формы, который не найден или истек, обычно указывает на разницу между идентификатором продавца, используемым для создания сеанса / токена, и идентификатором продавца, используемым при выполнении вызовов api к серверам MC api.   -  person s1cart3r    schedule 09.09.2019
comment
есть ли у вас какое-нибудь решение по этому поводу?   -  person karan shah    schedule 04.02.2020
comment
@karanshah .. Я пробовал другой способ, и это сработало   -  person Techy    schedule 10.02.2020
comment
@Techy, пожалуйста, предоставьте решение.   -  person karan shah    schedule 10.02.2020
comment
Я использовал другой метод, называемый размещенной проверкой, а не размещенным сеансом из этой ссылки. network.gateway.mastercard.com/api/documentation/   -  person Techy    schedule 10.02.2020


Ответы (1)


У меня была такая же проблема, и я решил ее, убедившись, что все поля формы (номер карты, ccv, месяц истечения срока, год истечения срока и имя держателя карты) имеют атрибут readonly.

     <div class="form-group"><label>Card Number:</label> 
<input type="text" id="card-number" class="input-field" title="card number" aria-label="enter your card number" value="" tabindex="1" readonly="readonly">
</div>
            <div class="form-group"><label>Expiry Month:</label>   
<input type="text" id="expiry-month" class="input-field" title="expiry month" aria-label="two digit expiry month" value="" tabindex="2" readonly="readonly">
</div>
            <div class="form-group">
<label>Expiry Year:</label>    
<input type="text" id="expiry-year" class="input-field" title="expiry year" aria-label="two digit expiry year" value="" tabindex="3" readonly="readonly">
</div>
            <div class="form-group">
<label>Security Code: </label> 
<input type="text" id="security-code" class="input-field" title="security code" aria-label="three digit CCV security code" value="" tabindex="4" readonly="readonly" >
</div>
  <div class="form-group">
<label>Cardholder Name:</label>
<input type="text" id="cardholder-name" class="input-field" title="cardholder name" aria-label="enter name on card" value="" tabindex="5" readonly="readonly"></div>
person ovicko    schedule 24.07.2020
comment
Привет, ovicko, при загрузке этого js файла невозможно загрузить ‹script src = na-gateway.mastercard.com/form/version/57/merchant/› Мы уже зарегистрировались в MPGS и предоставили merchantId. Нужно ли мне добавлять TEST id в целях разработки. Потому что я не знаю, как пройти сеанс? Пожалуйста, помогите мне, как загрузить файл JS и получить сеанс. - person Creditto; 07.09.2020
comment
@Credit, чтобы заменить <testmerchantID> фактическим идентификатором тестового продавца. - person ovicko; 08.09.2020
comment
Спасибо, ovicko, мне нужно создать какой-либо testmerchantID для целей тестирования? - person Creditto; 09.09.2020