<div class="panel panel-primary">
  <div class="panel-heading">
      <h3 class="panel-title">Credit Card Payment</h3>
  </div>
   <form class="panel-body" id="checkout-form" action="#">
    <div class="row">
      <div class="form-group col-md-12">
          <label for="cardholder-name">Cardholder Name</label>
          <input type="text" class="form-control" id="cardholder-name">
          <span class="helper-text"></span>
       </div>
       <!--Hosted Payment Field for CC number-->
       <div class="form-group col-xs-9">
          <label for="card-number">Card Number</label>
          <div class="input-group">
            <div class="form-control" id="card-number" data-bluesnap="ccn"></div>
            <div id="card-logo" class="input-group-addon"><img src="https://files.readme.io/d1a25b4-generic-card.png" height="20px"></div>
         </div>
         <span class="helper-text" id="ccn-help"></span>
       </div>
	<!--Hosted Payment Field for CC CVV-->
			<div class="form-group col-xs-3">
         <label for="cvv">CVV</label>
         <div class="form-control" id="cvv" data-bluesnap="cvv"></div>
         <span class="helper-text" id="cvv-help"></span>
      </div>
    
    <!--Hosted Payment Field for CC EXP-->
       <div class="form-group col-xs-6">
          <label for="exp-date">Exp. (MM/YY)</label>
          <div class="form-control" id="exp-date" data-bluesnap="exp"></div>
          <span class="helper-text" id="exp-help"></span>
       </div>
		  <div class="form-group col-xs-6">
          <label for="cardholder-name">Postal Code</label>
          <input type="text" class="form-control" id="cardholder-name">
          <span class="helper-text"></span>
       </div>	
    </div>
    
		<button class="btn btn-raised btn-info btn-lg col-md-4" type="button" id="submit-button" onclick="do_when_clicking_submit_button()">Pay Now</button>
    
		</form>
  
</div>

<!--BlueSnap Hosted Payment Fields JavaScript file-->
		<script type="text/javascript" src="https://sandpay.bluesnap.com/web-sdk/5/bluesnap.js"></script>
/* Uses bootstrap-material-design - https://fezvrasta.github.io/bootstrap-material-design */

.panel {
  width: 80%;
  margin: 2em auto;
}

.panel-body {
  width: 90%;
  margin: 2em auto;
}

body {
  font-size: 15px;
}

label {
  font-weight: 400;
}

.helper-text {
  color: #E91E63; 
  font-size: 12px;
  margin-top: 5px;
  height: 12px;
  display: block;
}

.helper-text-green {
  color: green;
}


/* Hosted Payment Fields styles*/
.hosted-field-focus { 
  outline: none;
  background-image: linear-gradient(#009688, #009688), linear-gradient(#d2d2d2, #d2d2d2);
  animation: input-highlight 0.5s forwards;
  box-shadow: none;
  background-size: 0 2px, 100% 1px;
}
/* Defining helper functions/objects */
// changeImpactedElement: function that removes the provided class(es) and adds the provided class(es) to Hosted Payment Fields element
function changeImpactedElement(tagId, removeClass, addClass) {
    removeClass = removeClass || "";
    addClass = addClass || "";
    $("[data-bluesnap=" + tagId + "]")
        .removeClass(removeClass)
        .addClass(addClass);
}
// cardUrl: object that stores card type code (received from BlueSnap) and associated card image URL
var cardUrl = {
  "AMEX": "https://files.readme.io/97e7acc-Amex.png", 
  "DINERS": "https://files.readme.io/8c73810-Diners_Club.png",
  "DISCOVER": "https://files.readme.io/caea86d-Discover.png",
  "JCB": "https://files.readme.io/e076aed-JCB.png",
  "MASTERCARD": "https://files.readme.io/5b7b3de-Mastercard.png",
  "VISA": "https://files.readme.io/9018c4f-Visa.png"
}; 

/* Defining bsObj: object that stores Hosted Payment Fields 
event handlers, styling, placeholder text, etc. */
var bsObj = {
	//insert your Hosted Payment Fields token
	token: "b44b553f82290ad50eaec4a9ab333c810b57eb2e00075eb061282694ce77d74f_", 
  onFieldEventHandler: {
    onFocus: function(tagId) {
      // Handle focus
      changeImpactedElement(tagId, "", "hosted-field-focus"); 
    },
    onBlur: function(tagId) {
      // Handle blur 
      changeImpactedElement(tagId, "hosted-field-focus"); 
    },
    onError: function(tagId, errorCode, errorDescription, eventOrigin) {
      // Handle a change in validation by displaying help text
      $("#" + tagId + "-help").removeClass('helper-text-green').text(errorCode + " - " + errorDescription + " - " + eventOrigin); 
    },
    onType: function(tagId, cardType, cardData) {
      // get card type from cardType and display card image
      $("#card-logo > img").attr("src", cardUrl[cardType]);
      if (null != cardData) {
         $("#" + tagId + "-help").addClass('helper-text-green').text(JSON.stringify(cardData));
      }
    },
    onValid: function(tagId) {
      // Handle a change in validation by removing any help text
      $("#" + tagId + "-help").text(""); 
    }
  },
  style: {
    // Styling all inputs
    "input": {
      "font-size": "14px",
      "font-family":
        "RobotoDraft,Roboto,Helvetica Neue,Helvetica,Arial,sans-serif",
      "line-height": "1.42857143",
      "color": "#555"
    },
    // Styling input state
    ":focus": {
      "color": "#555"
    }
  },
  ccnPlaceHolder: "1234 5678 9012 3456",
  cvvPlaceHolder: "123",
  expPlaceHolder: "MM / YY"
}

/* After DOM is loaded, calling bluesnap.hostedPaymentFieldsCreation: function that takes token and bsObj as inputs and initiates Hosted Payment Fields */
$(document).ready(function() {
  bluesnap.hostedPaymentFieldsCreate(bsObj); 
});

/* Calling bluesnap.submitCredentials: function that submits card data to 
BlueSnap and calls input function with card data object if submission was successful */
function do_when_clicking_submit_button() {
  bluesnap.hostedPaymentFieldsSubmitData( 
    function(callback) {
      if (null != callback.error) {
        var errorArray = callback.error;
            for (i in errorArray) {
        $("#" + errorArray[i].tagId + "-help").text(errorArray[i].errorCode + " - " + errorArray[i].errorDescription); 
            }
      } else {
        var cardData = callback.cardData;
      alert(
        "Card Type: " +
        cardData.ccType +
        " Last 4 Digits: " +
        cardData.last4Digits +
        " Issuing Country: " +
        cardData.issuingCountry +
        " Is Regulated Card: " +
        cardData.isRegulatedCard + 
        " Card Sub Type: " + 
        cardData.cardSubType + 
        " Bin Category: " +
        cardData.binCategory +    
        " Exp: " +
        cardData.exp +
        " after that I can call final submit"
      );
      // This is where you would perform final submission to your server
      }
    }
  );
}

External CSS

  1. //maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css
  2. https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.3.0/css/material-fullpalette.css
  3. https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.3.0/css/material.css
  4. https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.3.0/css/ripples.css
  5. https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.3.0/css/roboto.css

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js
  2. https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js
  3. https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.3.0/js/material.js
  4. https://cdnjs.cloudflare.com/ajax/libs/bootstrap-material-design/0.3.0/js/ripples.js