MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 8.0.30
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/imensosw/www/imenso.co/dev/payment/apple-pay/applePayCaller.js
 if (window.ApplePaySession) {
    console.log("supports version: " + ApplePaySession.supportsVersion(1));  
   var merchantIdentifier = 'merchant.imenso.co';
   var promise = ApplePaySession.canMakePaymentsWithActiveCard(merchantIdentifier);
   promise.then( function (canMakePayments) {
      if (canMakePayments){
        console.log("Apple Pay Payment Available");
        $("#applePayButton").prop('disabled', false);
      }else{
        console.log("Apple Pay is available but not activated yet");
      }

  }); 
}
else{
      console.log("Apple Pay not available in this browser");
}

function createTransaction(dataObj) {
  
  console.log('starting createTransaction');
  console.log(dataObj);
  
  let objJsonStr = JSON.stringify(dataObj);
  console.log(objJsonStr);
        let objJsonB64 = window.btoa(objJsonStr);
  console.log(objJsonB64);
  
  $.ajax({
    
    url: "transactionCaller.php",
    data: {amount: '0.01', dataDesc: 'COMMON.APPLE.INAPP.PAYMENT', dataValue: objJsonB64},
    method: 'POST',
    timeout: 5000
    
  }).done(function(data){
    console.log(data);
    console.log('Success');
    
  }).fail(function(){
    
    console.log('Error');
  })
  
  return true;
}

function applePayButtonClicked(){

  console.log('Apple Pay Initiated');

  var request = {
    countryCode: 'US',
    currencyCode: 'USD',
    supportedNetworks: ['visa', 'masterCard', 'amex', 'discover'],
    merchantCapabilities: ['supports3DS','supportsCredit', 'supportsDebit'], // Make sure NOT to include supportsEMV here
    total: { label: 'Test Spices', amount: '1' },
  }
  
  var session = new ApplePaySession(3, request);
  // Merchant Validation
  session.onvalidatemerchant = function (event) {
    console.log(event);
    var promise = performValidation(event.validationURL);
    promise.then(function (merchantSession) {
      session.completeMerchantValidation(merchantSession);
    }); 
  }

  function performValidation(valURL) {
console.log(valURL);
    return new Promise(function(resolve, reject) {
      var xhr = new XMLHttpRequest();
      xhr.onload = function() {
        console.log(this.responseText);
        var data = JSON.parse(this.responseText);
        console.log(data);
        resolve(data);
      };
      xhr.onerror = reject;
      xhr.open('POST', 'validateApplePayMerchant.php', true);
      xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
      xhr.send('validationUrl='+valURL);
    });
  }

  session.onpaymentmethodselected = function(event) {
    console.log('starting onpaymentmethodselected');
    console.log(event);
    var newTotal = { type: 'final', label: 'Test Spices', amount: '1' };
    var newLineItems =[{type: 'final',label: 'Spice #202', amount: '1' }]
    session.completePaymentMethodSelection( newTotal, newLineItems);
  }

  session.onpaymentauthorized = function (event) {
    console.log('starting session.onpaymentauthorized');
    console.log(event);
    var promise = sendPaymentToken(event.payment.token);
    promise.then(function (success) { 
      var status;
      if (success){
        status = ApplePaySession.STATUS_SUCCESS;
        console.log('Apple Pay Payment SUCCESS ');
      } else {
        status = ApplePaySession.STATUS_FAILURE;
      }   
      console.log( "result of sendPaymentToken() function =  " + success );
      session.completePayment(status);
    });
  }

  function sendPaymentToken(paymentToken) {
    return new Promise(function(resolve, reject) {
      console.log('starting function sendPaymentToken()');
      console.log(paymentToken);
      
      /* Send Payment token to Payment Gateway, here its defaulting to True just to mock that part */
      
      returnFromGateway = createTransaction(paymentToken.paymentData);  
      console.log(returnFromGateway);
      console.log("defaulting to successful payment by the Token");

      if ( returnFromGateway == true )
        resolve(true);
      else
        reject;
    });
  }

  
  session.oncancel = function(event) {
    console.log('starting session.cancel');
    console.log(event);
  }
  
  session.begin();


};