Java Sample Codes

Payment Page

Amount To Be Withdrawn
Name on Credit Card
Credit Card Number
Expiry Month / Year:
/
Security Code:
(Last 3 digits on the back of the card)

<form method="post" action="">
	<table class="table table-condensed table-bordered" style="border:1px solid #ccc;background:#fbfbfb;margin:5px;width:99%;">
		<tr>
			<td style="font-size:15px;width:210px;"><b>Cekilecek Tutar</b></td>
			<td>
				<div class="col-sm-5">
				  <input type="text" class="form-control" id="amount" name="amount" onkeyup="sadece_para('amount');" placeholder="Cekilecek Tutar" value="<?=$_POST['amount']?>">
				</div>
			</td>
		</tr>
		<tr>
			<td style="font-size:15px;width:210px;"><b>Kredi Karti Uzerindeki Isim</b></td>
			<td>
				<div class="col-sm-5">
				  <input type="text" class="form-control" id="kart_isim" name="kart_isim" placeholder="Kredi Karti Uzerindeki Isim" autocomplete=off  size="20">
				</div>
			</td>
		</tr>
		<tr>
			<td style="font-size:15px;width:210px;"><b>Kredi Kart Numarasi</b></td>
			<td>
				<div class="col-sm-5">
				  <input type="text" class="form-control" id="pan" name="pan"  maxlength="16" onkeydown="sadece_rakam('pan');" placeholder="Kredi Kart Numarasi" autocomplete=off  size="20">
				</div>
			</td>
		</tr>
		<tr>
			<td style="font-size:15px;"><b>Son Kullanma Ay / Yil: </b></td>
			<td style="text-align:left;">
				<div class="col-sm-8"  style="float:left;">
					  <select style="width:80px;padding:3px;font-size:15px;" name="Ecom_Payment_Card_ExpDate_Month" id="Ecom_Payment_Card_ExpDate_Month">
					  </select>
						/
						<select style="width:80px;padding:3px;font-size:15px;" name="Ecom_Payment_Card_ExpDate_Year" id="Ecom_Payment_Card_ExpDate_Year">
						</select>
				</div>
			</td>
		</tr>
		<tr>
			<td style="font-size:15px;"><b>Guvenlik Kodu: <br/><span style="font-weight:100;">(Kartin arkasinda ki son 3 hane)</span></b></td>
			<td>
				<div class="col-sm-2">
					<input type="text" class="form-control" id="cv2" name="cv2" maxlength="4" placeholder="Guvenlik Kodu" autocomplete=off size="4" value="">
				</div>
				<button type="submit" id="devamEt" style="float:right;margin:20px;" class="btn btn-primary">Devam Et</button>
			</td>
		</tr>
	</table>
</form>

package com.moka;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import okhttp3.*;

import java.io.IOException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * Created by turgay.mutlu on 1/23/2017.
 */
public class MokaJavaLib {

    static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");
    static final String URLDIRECT = "https://service.testmoka.com/PaymentDealer/DoDirectPayment";
    static final String URL3D = "https://service.testmoka.com/PaymentDealer/DoDirectPaymentThreeD";


    public static class PaymentOperation {


        /**
         * Direct payment için gerekli değerleri values nesnesi olarak döner
         * @param dealerCode Moka sistemi tarafından verilen bayi kodu
         * @param username Moka sistemi tarafından verilen kullanıcı adı
         * @param password Moka sistemi tarafından verilen şifre
         * @param cardHolderFullName Kart sahibinin adı soyadı
         * @param cardNumber Kart numarası
         * @param expMonth Son ödeme tarihi ay bilgisi (MM)
         * @param expYear Son ödeme tarihi yıl bilgisi (YYYY)
         * @param cvcNumber Kart güvenlik numarası
         * @param amount Ödeme tutarı  (Kuruş kısmı nokta ile yazılır. Örn: 27.50)
         * @param currency Para birimi. Opsiyonel alandır, hiç gönderilmezse veya boş gönderilirse, default’ u TL dir,  Diğer değerler :  USD, EUR, GBP
         * @param installmentNumber Taksit Sayısı. Opsiyonel alandır, hiç gönderilmezse, boş gönderilirse, 0 veya 1 gönderilirse Peşin satış demektir,  Taksit için 2 ile 12 arasında bir değer gönderilmelidir.
         * @param clientIP Kart numarasının alındığı uygulamanın (desktop/web) çalıştırıldığı bilgisayarın IP bilgisi
         * @param otherTrxCode Mutabakat sağlamak için kendi Transaction (İşlem) Kodunuzu bu alanda gönderebilirsiniz. (Boş da gönderilebilir)
         */
        public static Values setValues(String dealerCode,String username,String password,String cardHolderFullName,String cardNumber,String expMonth,String expYear,String cvcNumber,Double amount,String currency,String installmentNumber,String clientIP,String otherTrxCode){
            Values values=new Values();

            PaymentDealerAuthentication paymentDealerAuthentication =new PaymentDealerAuthentication(dealerCode,username,password);

            PaymentDealerRequest paymentDealerRequest =new PaymentDealerRequest(cardHolderFullName,cardNumber,expMonth,expYear,cvcNumber,amount,currency,installmentNumber,clientIP,otherTrxCode);

            values.setPaymentDealerAuthentication(paymentDealerAuthentication);
            values.setPaymentDealerRequest(paymentDealerRequest);

            return values;

        }

        /**
         * 3D payment için gerekli değerleri values nesnesi olarak döner
         * @param dealerCode Moka sistemi tarafından verilen bayi kodu
         * @param username Moka sistemi tarafından verilen kullanıcı adı
         * @param password Moka sistemi tarafından verilen şifre
         * @param cardHolderFullName Kart sahibinin adı soyadı
         * @param cardNumber Kart numarası
         * @param expMonth Son ödeme tarihi ay bilgisi (MM)
         * @param expYear Son ödeme tarihi yıl bilgisi (YYYY)
         * @param cvcNumber Kart güvenlik numarası
         * @param amount Ödeme tutarı  (Kuruş kısmı nokta ile yazılır. Örn: 27.50)
         * @param currency Para birimi. Opsiyonel alandır, hiç gönderilmezse veya boş gönderilirse, default’ u TL dir,  Diğer değerler :  USD, EUR, GBP
         * @param installmentNumber Taksit Sayısı. Opsiyonel alandır, hiç gönderilmezse, boş gönderilirse, 0 veya 1 gönderilirse Peşin satış demektir,  Taksit için 2 ile 12 arasında bir değer gönderilmelidir.
         * @param clientIP Kart numarasının alındığı uygulamanın (desktop/web) çalıştırıldığı bilgisayarın IP bilgisi
         * @param redirectUrl 3D işlemi sonucunda, başarılı ya da başarısız işlem sonucunun döndürüldüğü ve kullanıcının yönlendirildiği bayi web sayfası
         * @param otherTrxCode Mutabakat sağlamak için kendi Transaction (İşlem) Kodunuzu bu alanda gönderebilirsiniz. (Boş da gönderilebilir)
         */
        public static Values setValues(String dealerCode,String username,String password,String cardHolderFullName,String cardNumber,String expMonth,String expYear,String cvcNumber,Double amount,String currency,String installmentNumber,String clientIP, String redirectUrl,String otherTrxCode){
            Values values=new Values();

            PaymentDealerAuthentication paymentDealerAuthentication =new PaymentDealerAuthentication(dealerCode,username,password);

            PaymentDealerRequest paymentDealerRequest =new PaymentDealerRequest(cardHolderFullName,cardNumber,expMonth,expYear,cvcNumber,amount,currency,installmentNumber,clientIP,redirectUrl+"?MyTrxCode="+otherTrxCode,otherTrxCode);

            values.setPaymentDealerAuthentication(paymentDealerAuthentication);
            values.setPaymentDealerRequest(paymentDealerRequest);

            return values;

        }

        /**
         * Direct payment için kullanılacak method
         * @param values gerekli verilerin alındığı değişken
         * @return ApiResponseDirect nesnesi olarak geri döner
         */
        public static ApiResponseDirect sendDirectRequest(Values values){
            ApiResponseDirect apiResponse=null;
            String jsonPost="",jsonResponse="";
            ObjectMapper mapper=new ObjectMapper();

            try {
                jsonPost=mapper.writeValueAsString(values);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }

            OkHttpClient client = new OkHttpClient();

            RequestBody body = RequestBody.create(JSON, jsonPost);
            Request request = new Request.Builder()
                    .url(URLDIRECT)
                    .post(body)
                    .build();
            try {
                Response response = client.newCall(request).execute();
                jsonResponse = response.body().string();
            } catch (IOException e) {
                e.printStackTrace();
            }

            System.out.println(jsonResponse);

            try {
                apiResponse = mapper.readValue(jsonResponse,ApiResponseDirect.class);
            } catch (IOException e) {
                e.printStackTrace();
            }

            return apiResponse;
        }

        /**
         * 3D payment için kullanılacak method
         * @param values gerekli verilerin alındığı değişken
         * @return ApiResponse3D nesnesi olarak geri döner
         */
        public static ApiResponse3D send3DRequest(Values values){
            ApiResponse3D apiResponse=null;

            String jsonPost="",jsonResponse="";
            ObjectMapper mapper=new ObjectMapper();

            try {
                jsonPost=mapper.writeValueAsString(values);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }

            OkHttpClient client = new OkHttpClient();

            RequestBody body = RequestBody.create(JSON, jsonPost);
            Request request = new Request.Builder()
                    .url(URL3D)
                    .post(body)
                    .build();
            try {
                Response response = client.newCall(request).execute();
                jsonResponse = response.body().string();
            } catch (IOException e) {
                e.printStackTrace();
            }

            System.out.println(jsonResponse);

            try {
                apiResponse = mapper.readValue(jsonResponse,ApiResponse3D.class);
            } catch (IOException e) {
                e.printStackTrace();
            }

            return apiResponse;
        }
    }


    public static class Values {
        private PaymentDealerAuthentication paymentDealerAuthentication;
        private PaymentDealerRequest paymentDealerRequest;

        public PaymentDealerAuthentication getPaymentDealerAuthentication() {
            return paymentDealerAuthentication;
        }

        public void setPaymentDealerAuthentication(PaymentDealerAuthentication paymentDealerAuthentication) {
            this.paymentDealerAuthentication = paymentDealerAuthentication;
        }

        public PaymentDealerRequest getPaymentDealerRequest() {
            return paymentDealerRequest;
        }

        public void setPaymentDealerRequest(PaymentDealerRequest paymentDealerRequest) {
            this.paymentDealerRequest = paymentDealerRequest;
        }

    }

    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
            "Data",
            "ResultCode",
            "ResultMessage",
            "Exception"
    })
    public static class ApiResponse3D {

        @JsonProperty("Data")
        private Object data;
        @JsonProperty("ResultCode")
        private String resultCode;
        @JsonProperty("ResultMessage")
        private String resultMessage;
        @JsonProperty("Exception")
        private Object exception;

        @JsonProperty("Data")
        public Object getData() {
            return data;
        }

        @JsonProperty("Data")
        public void setData(Object data) {
            this.data = data;
        }

        @JsonProperty("ResultCode")
        public String getResultCode() {
            return resultCode;
        }

        @JsonProperty("ResultCode")
        public void setResultCode(String resultCode) {
            this.resultCode = resultCode;
        }

        @JsonProperty("ResultMessage")
        public String getResultMessage() {
            return resultMessage;
        }

        @JsonProperty("ResultMessage")
        public void setResultMessage(String resultMessage) {
            this.resultMessage = resultMessage;
        }

        @JsonProperty("Exception")
        public Object getException() {
            return exception;
        }

        @JsonProperty("Exception")
        public void setException(Object exception) {
            this.exception = exception;
        }
    }

    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
            "Data",
            "ResultCode",
            "ResultMessage",
            "Exception"
    })
    public static class ApiResponseDirect {

        @JsonProperty("Data")
        private Data data;
        @JsonProperty("ResultCode")
        private String resultCode;
        @JsonProperty("ResultMessage")
        private String resultMessage;
        @JsonProperty("Exception")
        private Object exception;

        @JsonProperty("Data")
        public Data getData() {
            return data;
        }

        @JsonProperty("Data")
        public void setData(Data data) {
            this.data = data;
        }

        @JsonProperty("ResultCode")
        public String getResultCode() {
            return resultCode;
        }

        @JsonProperty("ResultCode")
        public void setResultCode(String resultCode) {
            this.resultCode = resultCode;
        }

        @JsonProperty("ResultMessage")
        public String getResultMessage() {
            return resultMessage;
        }

        @JsonProperty("ResultMessage")
        public void setResultMessage(String resultMessage) {
            this.resultMessage = resultMessage;
        }

        @JsonProperty("Exception")
        public Object getException() {
            return exception;
        }

        @JsonProperty("Exception")
        public void setException(Object exception) {
            this.exception = exception;
        }


    }

    @JsonInclude(JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder({
            "IsSuccessful",
            "ResultCode",
            "ResultMessage",
            "VirtualPosOrderId"
    })
    public static class Data {

        @JsonProperty("IsSuccessful")
        private Boolean isSuccessful;
        @JsonProperty("ResultCode")
        private String resultCode;
        @JsonProperty("ResultMessage")
        private String resultMessage;
        @JsonProperty("VirtualPosOrderId")
        private String virtualPosOrderId;

        @JsonProperty("IsSuccessful")
        public Boolean getIsSuccessful() {
            return isSuccessful;
        }

        @JsonProperty("IsSuccessful")
        public void setIsSuccessful(Boolean isSuccessful) {
            this.isSuccessful = isSuccessful;
        }

        @JsonProperty("ResultCode")
        public String getResultCode() {
            return resultCode;
        }

        @JsonProperty("ResultCode")
        public void setResultCode(String resultCode) {
            this.resultCode = resultCode;
        }

        @JsonProperty("ResultMessage")
        public String getResultMessage() {
            return resultMessage;
        }

        @JsonProperty("ResultMessage")
        public void setResultMessage(String resultMessage) {
            this.resultMessage = resultMessage;
        }

        @JsonProperty("VirtualPosOrderId")
        public String getVirtualPosOrderId() {
            return virtualPosOrderId;
        }

        @JsonProperty("VirtualPosOrderId")
        public void setVirtualPosOrderId(String virtualPosOrderId) {
            this.virtualPosOrderId = virtualPosOrderId;
        }

    }

    public static class PaymentDealerAuthentication {
        private String dealerCode;
        private String username;
        private String password;
        private String checkKey;

        /**
         *
         * @param dealerCode Moka sistemi tarafından verilen bayi kodu
         * @param username Moka sistemi tarafından verilen kullanıcı adı
         * @param password Moka sistemi tarafından verilen şifre
         */
        public PaymentDealerAuthentication(String dealerCode, String username, String password){
            this.dealerCode = dealerCode;
            this.username = username;
            this.password = password;

            MessageDigest md;
            String s=this.dealerCode+"MK"+this.username+"PD"+this.password;
            byte byteData[]=null;

            try {
                md = MessageDigest.getInstance("SHA-256");
                md.update(s.getBytes());
                byteData= md.digest();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }

            //convert the byte to hex format method 1
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < byteData.length; i++) {
                sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
            }

            this.checkKey = sb.toString();


        }

        public String getDealerCode() {
            return dealerCode;
        }

        public String getUsername() {
            return username;
        }

        public String getPassword() {
            return password;
        }

        public String getCheckKey() {
            return checkKey;
        }
    }

    public static class PaymentDealerRequest {
        private String cardHolderFullName;
        private String cardNumber;
        private String expMonth;
        private String expYear;
        private String cvcNumber;
        private Double amount;
        private String currency;
        private String installmentNumber;
        private String clientIP;
        private String redirectUrl;
        private String otherTrxCode;

        /**
         * Direct payment için kullanılacak constructor
         * @param cardHolderFullName Kart sahibinin adı soyadı
         * @param cardNumber Kart numarası
         * @param expMonth Son ödeme tarihi ay bilgisi (MM)

         * @param expYear Son ödeme tarihi yıl bilgisi (YYYY)
         * @param cvcNumber Kart güvenlik numarası
         * @param amount Ödeme tutarı  (Kuruş kısmı nokta ile yazılır. Örn: 27.50)
         * @param currency Para birimi. Opsiyonel alandır, hiç gönderilmezse veya boş gönderilirse, default’ u TL dir,  Diğer değerler :  USD, EUR, GBP
         * @param installmentNumber Taksit Sayısı. Opsiyonel alandır, hiç gönderilmezse, boş gönderilirse, 0 veya 1 gönderilirse Peşin satış demektir,  Taksit için 2 ile 12 arasında bir değer gönderilmelidir.
         * @param clientIP Kart numarasının alındığı uygulamanın (desktop/web) çalıştırıldığı bilgisayarın IP bilgisi
         * @param otherTrxCode Mutabakat sağlamak için kendi Transaction (İşlem) Kodunuzu bu alanda gönderebilirsiniz. (Boş da gönderilebilir)
         */
        public PaymentDealerRequest(String cardHolderFullName, String cardNumber, String expMonth, String expYear, String cvcNumber, Double amount, String currency, String installmentNumber, String clientIP, String otherTrxCode) {
            this.cardHolderFullName = cardHolderFullName;
            this.cardNumber = cardNumber;
            this.expMonth = expMonth;
            this.expYear = expYear;
            this.cvcNumber = cvcNumber;
            this.amount = amount;
            this.currency = currency;
            this.installmentNumber = installmentNumber;
            this.clientIP = clientIP;
            this.otherTrxCode = otherTrxCode;
        }

        /**
         * 3D payment için kullanılacak constructor
         * @param cardHolderFullName Kart sahibinin adı soyadı
         * @param cardNumber Kart numarası
         * @param expMonth Son ödeme tarihi ay bilgisi (MM)
         * @param expYear Son ödeme tarihi yıl bilgisi (YYYY)
         * @param cvcNumber Kart güvenlik numarası
         * @param amount Ödeme tutarı  (Kuruş kısmı nokta ile yazılır. Örn: 27.50)
         * @param currency Para birimi. Opsiyonel alandır, hiç gönderilmezse veya boş gönderilirse, default’ u TL dir,  Diğer değerler :  USD, EUR, GBP
         * @param installmentNumber Taksit Sayısı. Opsiyonel alandır, hiç gönderilmezse, boş gönderilirse, 0 veya 1 gönderilirse Peşin satış demektir,  Taksit için 2 ile 12 arasında bir değer gönderilmelidir.
         * @param clientIP Kart numarasının alındığı uygulamanın (desktop/web) çalıştırıldığı bilgisayarın IP bilgisi
         * @param redirectUrl 3D işlemi sonucunda, başarılı ya da başarısız işlem sonucunun döndürüldüğü ve kullanıcının yönlendirildiği bayi web sayfası
         * @param otherTrxCode Mutabakat sağlamak için kendi Transaction (İşlem) Kodunuzu bu alanda gönderebilirsiniz. (Boş da gönderilebilir)
         */
        public PaymentDealerRequest(String cardHolderFullName, String cardNumber, String expMonth, String expYear, String cvcNumber, Double amount, String currency, String installmentNumber, String clientIP, String redirectUrl, String otherTrxCode) {
            this.cardHolderFullName = cardHolderFullName;
            this.cardNumber = cardNumber;
            this.expMonth = expMonth;
            this.expYear = expYear;
            this.cvcNumber = cvcNumber;
            this.amount = amount;
            this.currency = currency;
            this.installmentNumber = installmentNumber;
            this.clientIP = clientIP;
            this.redirectUrl=redirectUrl;
            this.otherTrxCode = otherTrxCode;
        }

        public String getCardHolderFullName() {
            return cardHolderFullName;
        }

        public String getCardNumber() {
            return cardNumber;
        }

        public String getExpMonth() {
            return expMonth;
        }

        public String getExpYear() {
            return expYear;
        }

        public String getCvcNumber() {
            return cvcNumber;
        }

        public Double getAmount() {
            return amount;
        }

        public String getCurrency() {
            return currency;
        }

        public String getInstallmentNumber() {
            return installmentNumber;
        }

        public String getClientIP() {
            return clientIP;
        }

        public String getRedirectUrl() {
            return redirectUrl;
        }

        public String getOtherTrxCode() {
            return otherTrxCode;
        }
    }
}

Results Page


<html>
<head>
    <title>Title</title>
</head>
<body>

<% if(request.getParameter("isSuccessful").equals("True")){
    %> <div class="alert alert-success">
				<p><span>Successful !</span> Your Payment Transaction Has Been Successfully Completed.</p>
				<p><%=request.getParameter("MyTrxCode")%></p>
				<p><%=request.getParameter("trxCode")%></p>
			</div><%
}
else {
    %>
<div class="alert alert-danger">
    ERROR !!!! Your payment transaction could not be completed. <br>
    <p>Bank Answer : <%=request.getParameter("resultMessage")%></p>
</div>
<%
}
%>

</body>
</html>
</html>

Click to Download Sample Project.