<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;
}
}
}