2. Non-Secure
The Direct Payment service initiates the payment collection process from the card information as soon as you send the request and returns the transaction result within the response.
POST {{Base Adres}}/api/paywall/payment/startdirect
The example JSON and sample codes to be sent to the service are as follows.
apikeypublic
string
Yes
The Public Key you obtained from the merchant panel.
apiclientpublic
string
Yes
The Public Client you obtained from the merchant panel.
Paywall Request Payload
{
"PaymentDetail": {
"Amount": 1.00,
"MerchantUniqueCode": "22123222256226225",
"Half2D": false,
"ClientIP": "0.0.0.0",
"CurrencyId": 1,
"Installment": 1,
"ChannelId": 0,
"TagId": 0,
"EndOfTheDay": 1,
"RegionId": 1,
"ProviderBased": false,
"ProviderKey": "providerkey",
"MarketPlace": {
"BasketAmount": 1.00
}
},
"Card":{
"OwnerName":"Iyzico Kartı",
"Number":"5528790000000008",
"ExpireMonth":"12",
"ExpireYear":"2030",
"Cvv":"123",
"UniqueCode":"",
"TempCardToken": "",
"Partner": { // Nullable
"PartnerBased": false,
"PartnerIdentity": ""
},
"CardSave": {
"Nickname": "Kredi kartım",
"RelationalId1": "userid19283746",
"RelationalId2": "",
"RelationalId3": "",
"Save": true
}
},
"Customer":{
"FullName":"FullName",
"Phone":"5336662211",
"Email":"[email protected]",
"Country":"Country",
"City":"City",
"Address":"Address",
"IdentityNumber":"IdentityNumber",
"TaxNumber":"TaxNumber"
},
"Products":[{
"ProductId": "ProductId",
"ProductName": "ProductName",
"ProductCategory": "ProductCategory",
"ProductDescription": "ProductDescription",
"ProductAmount": 1.0,
"MemberId": 0,
"MemberCustomCommission": false,
"MemberCommission": 0,
"MemberEarningCalculated": false,
"MemberEarning": 0
}]
}using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
public class Program
{
static readonly HttpClient client = new HttpClient();
public class PaymentDetail
{
public double Amount { get; set; }
public string MerchantUniqueCode { get; set; }
public int CurrencyId { get; set; }
public string MerchantSuccessBackUrl { get; set; }
public string MerchantFailBackUrl { get; set; }
public int Installment { get; set; }
public int ChannelId { get; set; }
public int TagId { get; set; }
public bool Half3D { get; set; }
}
public class Card
{
public string OwnerName { get; set; }
public string Number { get; set; }
public string ExpireMonth { get; set; }
public string ExpireYear { get; set; }
public string Cvv { get; set; }
public string UniqueCode { get; set; }
}
public class Customer
{
public string FullName { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public string Country { get; set; }
public string City { get; set; }
public string Address { get; set; }
public string IdentityNumber { get; set; }
public string TaxNumber { get; set; }
}
public class Product
{
public string ProductId { get; set; }
public string ProductName { get; set; }
public string ProductCategory { get; set; }
public string ProductDescription { get; set; }
public double ProductAmount { get; set; }
}
public class Root
{
public PaymentDetail PaymentDetail { get; set; }
public Card Card { get; set; }
public Customer Customer { get; set; }
public Product[] Products { get; set; }
}
public static async Task Main()
{
Root root = new Root
{
PaymentDetail = new PaymentDetail
{
Amount = 9.85,
MerchantUniqueCode = "AJSHFSAKFHASKHFA",
CurrencyId = 1,
MerchantSuccessBackUrl = "https://merchantsite.site.com/success",
MerchantFailBackUrl = "https://merchantsite.site.com/fail",
Installement = 1,
ChannelId = 0,
TagId = 0,
Half3D = false
},
Card = new Card
{
OwnerName = "John Doe",
Number = "5528790000000008",
ExpireMonth = "12",
ExpireYear = "2030",
Cvv = "123",
UniqueCode = ""
},
Customer = new Customer
{
FullName = "FullName",
Phone = "5336662211",
Email = "[email protected]",
Country = "Country",
City = "City",
Address = "Address",
IdentityNumber = "IdentityNumber",
TaxNumber = "TaxNumber"
},
Products = new Product[] {
new Product {
ProductId = "ProductId",
ProductName = "ProductName",
ProductCategory = "ProductCategory",
ProductDescription = "ProductDescription",
ProductAmount = 9.85
}
}
};
string json = JsonConvert.SerializeObject(root, Formatting.Indented);
var data = new StringContent(json, Encoding.UTF8, "application/json");
client.DefaultRequestHeaders.Add("apikeypublic", "%%");
client.DefaultRequestHeaders.Add("apiclientpublic", "%%");
var url = "{{Base Adres}}/api/paywall/payment/startdirect";
var response = await client.PostAsync(url, data);
string result = response.Content.ReadAsStringAsync().Result;
Console.WriteLine(result);
}
}package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
)
type PaymentDetail struct {
Amount float64 `json:"Amount"`
MerchantUniqueCode string `json:"MerchantUniqueCode"`
CurrencyId int `json:"CurrencyId"`
MerchantSuccessBackUrl string `json:"MerchantSuccessBackUrl"`
MerchantFailBackUrl string `json:"MerchantFailBackUrl"`
Installment int `json:"Installment"`
ChannelId int `json:"ChannelId"`
TagId int `json:"TagId"`
Half3D bool `json:"Half3D"`
}
type Card struct {
OwnerName string `json:"OwnerName"`
Number string `json:"Number"`
ExpireMonth string `json:"ExpireMonth"`
ExpireYear string `json:"ExpireYear"`
Cvv string `json:"Cvv"`
UniqueCode string `json:"UniqueCode"`
}
type Customer struct {
FullName string `json:"FullName"`
Phone string `json:"Phone"`
Email string `json:"Email"`
Country string `json:"Country"`
City string `json:"City"`
Address string `json:"Address"`
IdentityNumber string `json:"IdentityNumber"`
TaxNumber string `json:"TaxNumber"`
}
type Product struct {
ProductId string `json:"ProductId"`
ProductName string `json:"ProductName"`
ProductCategory string `json:"ProductCategory"`
ProductDescription string `json:"ProductDescription"`
ProductAmount float64 `json:"ProductAmount"`
}
type Data struct {
PaymentDetail PaymentDetail `json:"PaymentDetail"`
Card Card `json:"Card"`
Customer Customer `json:"Customer"`
Products []Product `json:"Products"`
}
type ResponseData struct {
ErrorCode int
Result bool
Message string
Body string
}
func main() {
data := Data{
PaymentDetail: PaymentDetail{
Amount: 9.85,
MerchantUniqueCode: "AJSHFSAKFHASKHFA",
CurrencyId: 1,
MerchantSuccessBackUrl: "https://merchantsite.site.com/success",
MerchantFailBackUrl: "https://merchantsite.site.com/fail",
Installement: 1,
ChannelId: 0,
TagId: 0,
Half3D: false,
},
Card: Card{
OwnerName: "John Doe",
Number: "5528790000000008",
ExpireMonth: "12",
ExpireYear: "2030",
Cvv: "123",
UniqueCode: "",
},
Customer: Customer{
FullName: "FullName",
Phone: "5336662211",
Email: "[email protected]",
Country: "Country",
City: "City",
Address: "Address",
IdentityNumber: "IdentityNumber",
TaxNumber: "TaxNumber",
},
Products: []Product{
{
ProductId: "ProductId",
ProductName: "ProductName",
ProductCategory: "ProductCategory",
ProductDescription: "ProductDescription",
ProductAmount: 9.85,
},
},
}
payloadBuf := new(bytes.Buffer)
json.NewEncoder(payloadBuf).Encode(data)
req, _ := http.NewRequest("POST", "{{Base Adres}}/api/paywall/payment/startdirect", payloadBuf)
req.Header.Set("Content-Type", "application/json")
req.Header.Set("apikeypublic", "%%")
req.Header.Set("apiclientpublic", "%%")
client := &http.Client{}
res, e := client.Do(req)
if e != nil {
panic(e)
}
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
var responseData ResponseData
json.Unmarshal(body, &responseData)
fmt.Println("ErrorCode: ", responseData.ErrorCode)
fmt.Println("Result: ", responseData.Result)
fmt.Println("Message: ", responseData.Message)
fmt.Println("Body: ", responseData.Body)
}<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.12.5</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.9.0</version>
</dependency>
</dependencies>import okhttp3.*;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
OkHttpClient client = new OkHttpClient();
ObjectMapper mapper = new ObjectMapper();
// Create JSON in a readable way
ObjectNode rootNode = mapper.createObjectNode();
rootNode.put("Amount", 9.85);
rootNode.put("MerchantUniqueCode", "AJSHFSAKFHASKHFA");
rootNode.put("CurrencyId", 1);
rootNode.put("MerchantSuccessBackUrl", "https://merchantsite.site.com/success");
rootNode.put("MerchantFailBackUrl", "https://merchantsite.site.com/fail");
rootNode.put("Installment", 1);
rootNode.put("ChannelId", 0);
rootNode.put("TagId", 0);
rootNode.put("Half3D", false);
// and so on for all fields
String json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rootNode);
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, json);
Request request = new Request.Builder()
.url("{{Base Adres}}/api/paywall/payment/startdirect")
.post(body)
.addHeader("Content-Type", "application/json")
.addHeader("apikeypublic", "%%")
.addHeader("apiclientpublic", "%%")
.build();
Response response = client.newCall(request).execute();
System.out.println(response.body().string());
}
}<?php
$url = '{{Base Adres}}/api/paywall/payment/startdirect';
$data = array(
"PaymentDetail" => array(
"Amount" => 9.85,
"MerchantUniqueCode" => "AJSHFSAKFHASKHFA",
"CurrencyId" => 1,
"MerchantSuccessBackUrl" => "https://merchantsite.site.com/success",
"MerchantFailBackUrl" => "https://merchantsite.site.com/fail",
"Installment" => 1,
"ChannelId" => 0,
"TagId" => 0,
"Half3D" => false
),
"Card" => array(
"OwnerName" => "John Doe",
"Number" => "5528790000000008",
"ExpireMonth" => "12",
"ExpireYear" => "2030",
"Cvv" => "123",
"UniqueCode" => ""
),
"Customer" => array(
"FullName" => "FullName",
"Phone" => "5336662211",
"Email" => "[email protected]",
"Country" => "Country",
"City" => "City",
"Address" => "Address",
"IdentityNumber" => "IdentityNumber",
"TaxNumber" => "TaxNumber"
),
"Products" => array(
array(
"ProductId" => "ProductId",
"ProductName" => "ProductName",
"ProductCategory" => "ProductCategory",
"ProductDescription" => "ProductDescription",
"ProductAmount" => 9.85
)
)
);
$options = array(
'http' => array(
'header' => "Content-type: application/json\r\n" .
"apikeypublic: %PUBLICKEY%\r\n" .
"apiclientpublic: %PUBLICCLIENT%\r\n",
'method' => 'POST',
'content' => json_encode($data),
),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
if ($result === FALSE) { /* Handle error */ }
// Decode
$response = json_decode($result);
// ErrorCode-Result-Message
echo "ErrorCode: " . $response->ErrorCode . "\n";
echo "Result: " . ($response->Result ? "true" : "false") . "\n";
echo "Message: " . $response->Message . "\n";
// Decode Body
$body = json_decode($response->Body);
var_dump($result);
?>import requests
import json
url = '{{Base Adres}}/api/paywall/payment/startdirect'
headers = {
'Content-Type': 'application/json',
'apikeypublic': '%%',
'apiclientpublic': '%%'
}
data = {
"PaymentDetail": {
"Amount": 9.85,
"MerchantUniqueCode": "AJSHFSAKFHASKHFA",
"CurrencyId": 1,
"MerchantSuccessBackUrl": "https://merchantsite.site.com/success",
"MerchantFailBackUrl": "https://merchantsite.site.com/fail",
"Installment": 1,
"ChannelId": 0,
"TagId": 0,
"Half3D": False
},
"Card": {
"OwnerName": "John Doe",
"Number": "5528790000000008",
"ExpireMonth": "12",
"ExpireYear": "2030",
"Cvv": "123",
"UniqueCode": ""
},
"Customer": {
"FullName": "FullName",
"Phone": "5336662211",
"Email": "[email protected]",
"Country": "Country",
"City": "City",
"Address": "Address",
"IdentityNumber": "IdentityNumber",
"TaxNumber": "TaxNumber"
},
"Products": [{
"ProductId": "ProductId",
"ProductName": "ProductName",
"ProductCategory": "ProductCategory",
"ProductDescription": "ProductDescription",
"ProductAmount": 9.85
}]
}
response = requests.post(url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
response_data = response.json()
print("ErrorCode: ", response_data.get('ErrorCode'))
print("Result: ", response_data.get('Result'))
print("Message: ", response_data.get('Message'))
body = json.loads(response_data.get('Body'))
print(body)
else:
print(f'Request failed with status code {response.status_code}')require 'net/http'
require 'uri'
require 'json'
uri = URI.parse("{{Base Adres}}/api/paywall/payment/startdirect")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri.path, {
'Content-Type' => 'application/json',
'apikeypublic' => '%%',
'apiclientpublic' => '%%'
})
request.body = JSON.generate({
"PaymentDetail" => {
"Amount" => 9.85,
"MerchantUniqueCode" => "AJSHFSAKFHASKHFA",
"CurrencyId" => 1,
"MerchantSuccessBackUrl" => "https://merchantsite.site.com/success",
"MerchantFailBackUrl" => "https://merchantsite.site.com/fail",
"Installment" => 1,
"ChannelId" => 0,
"TagId" => 0,
"Half3D" => false
},
"Card" => {
"OwnerName" => "John Doe",
"Number" => "5528790000000008",
"ExpireMonth" => "12",
"ExpireYear" => "2030",
"Cvv" => "123",
"UniqueCode" => ""
},
"Customer" => {
"FullName" => "FullName",
"Phone" => "5336662211",
"Email" => "[email protected]",
"Country" => "Country",
"City" => "City",
"Address" => "Address",
"IdentityNumber" => "IdentityNumber",
"TaxNumber" => "TaxNumber"
},
"Products" => [
{
"ProductId" => "ProductId",
"ProductName" => "ProductName",
"ProductCategory" => "ProductCategory",
"ProductDescription" => "ProductDescription",
"ProductAmount" => 9.85
}
]
})
response = http.request(request)
puts response.bodyimport axios, { AxiosResponse } from 'axios';
interface ResponseData {
ErrorCode: number;
Result: boolean;
Message: string;
Body: string;
}
let data = {
PaymentDetail: {
Amount: 9.85,
MerchantUniqueCode: "AJSHFSAKFHASKHFA",
CurrencyId: 1,
MerchantSuccessBackUrl: "https://merchantsite.site.com/success",
MerchantFailBackUrl: "https://merchantsite.site.com/fail",
Installment: 1,
ChannelId: 0,
TagId: 0,
Half3D: false
},
Card: {
OwnerName: "John Doe",
Number: "5528790000000008",
ExpireMonth: "12",
ExpireYear: "2030",
Cvv: "123",
UniqueCode: ""
},
Customer: {
FullName: "FullName",
Phone: "5336662211",
Email: "[email protected]",
Country: "Country",
City: "City",
Address: "Address",
IdentityNumber: "IdentityNumber",
TaxNumber: "TaxNumber"
},
Products: [{
ProductId: "ProductId",
ProductName: "ProductName",
ProductCategory: "ProductCategory",
ProductDescription: "ProductDescription",
ProductAmount: 9.85
}]
};
let config = {
method: 'post',
url: '{{Base Adres}}/api/paywall/payment/startdirect',
headers: {
'Content-Type': 'application/json',
'apikeypublic': '%%',
'apiclientpublic': '%%'
},
data : data
};
axios(config)
.then(function (response: AxiosResponse<ResponseData>) {
console.log(response.data);
})
.catch(function (error) {
console.log(error);
});curl --location --request POST '{{Base Adres}}/api/paywall/payment/startdirect' \
--header 'Content-Type: application/json' \
--header 'apikeypublic: %%PUBLICKEY%%' \
--header 'apiclientpublic: %%PUBLICCLIENT%%' \
--data-raw '{
"PaymentDetail": {
"Amount": 9.85,
"MerchantUniqueCode": "FASLSZDPOT3535BFNGI",
"CurrencyId": 1,
"MerchantSuccessBackUrl": "https://merchantsite.site.com/success",
"MerchantFailBackUrl": "https://merchantsite.site.com/fail",
"Installment": 1,
"ChannelId": 0,
"TagId": 0,
"Half3D": false
},
"Card": {
"OwnerName": "John Doe",
"Number": "5528790000000008",
"ExpireMonth": "12",
"ExpireYear": "2030",
"Cvv": "123",
"UniqueCode": ""
},
"Customer": {
"FullName": "FullName",
"Phone": "5336662211",
"Email": "[email protected]",
"Country": "Country",
"City": "City",
"Address": "Address",
"IdentityNumber": "IdentityNumber",
"TaxNumber": "TaxNumber"
},
"Products": [{
"ProductId": "ProductId",
"ProductName": "ProductName",
"ProductCategory": "ProductCategory",
"ProductDescription": "ProductDescription",
"ProductAmount": 9.85
}]
}'Main Directory: PaymentDetail
Amount
decimal
Yes
Payment cart amount.
MerchantUniqueCode
string
Yes
It must be the same value as the MerchantUniqueCode in the request sent to initiate the payment. This code is the unique value assigned to the transaction by you. It is used to uniquely identify and track a payment for cancellation, refund, or payment inquiry operations.
Length: 250 characters
Installment
int
Yes
Installment information should be sent as 1 for a single payment.
Half2D
bool
No
It is the parameter that will assist you in finalizing your payments through a special call. If you send the Half2D parameter as true, your payment will remain in provisional status at the bank until you make the payment completion call.
ClientIP
string
Yes
The IP information of the party performing the transaction, such as the customer/user/member, etc. Length: 15 characters
TagId
int?
No
It is used when you want to apply tagging to your payments.
ChannelId
int?
No
It is used when you want to separate the channels through which your payments are sent to Paywall.
EndOfTheDay
int?
No
It is the end-of-day value. You should send this parameter as filled when you want only the "Next Day" payments to pass through the providers among the linked providers. Bkz: Review
RegionId
short?
No
It is the parameter that allows you to specify which country's providers you want your payment to pass through. If not specified, your payment will be processed as 'Global'.
ProviderBased
bool
No
It is used when you have decided on your own which provider should handle your payment.
ProviderKey
string
Yes/No
The provider key through which you want your payment to be processed.
MarketPlace > BasketAmount
decimal
No
It is used within the marketplace scope.
Main Directory: Card
OwnerName
string
Yes/No
The full name of the cardholder from whom the payment will be collected. Length: 60 characters
Number
string
Yes/No
The card number from which the payment will be collected.
Length: 20 characters
ExpireMonth
string
Yes/No
The expiration month of the card from which the payment will be collected.
ExpireYear
string
Yes/No
The expiration year of the card from which the payment will be collected.
Cvv
string
Yes/No
The security code of the card from which the payment will be collected.
UniqueCode
string
Yes/No
The identity information related to the saved card. It is returned by Paywall during the save and listing process.
TempCardToken
string
Yes/No
It is the parameter to be used when you want to receive payment with a temporary saved card (Client-Side Tokenization).
Partner? > PartnerBased
bool?
Yes/No
It is the parameter to be used when you set up cards based on a partner model.
Partner? > PartnerIdentity
string
Yes/No
When you set up cards based on a partner model, this is your company's partnership ID in Paywall. You can obtain this information from the Paywall panel.
CardSave? > Save
bool
Yes/No
At the time of payment, if the card should be saved upon successful payment, True should be sent. When True is sent, the other parameters under the CardSave object are taken into account.
CardSave? > Nickname
string
Yes/No
It is the nickname for the card.
CardSave? > RelationalId1
string
Yes/No
It is the relationship value of the card.
CardSave? > RelationalId2
string
Yes/No
It is the second (tree structure) relationship value of the card.
CardSave? > RelationalId3
string
Yes/No
It is the third (tree structure) relationship value of the card.
Main Directory: Customer
FullName
string
Yes
The name of the recipient on the merchant side.
Phone
string
Yes
The mobile phone number of the recipient on the merchant side.
string
Yes
The email address of the recipient on the merchant side.
Country
string
Yes
The country information of the recipient on the merchant side.
City
string
Yes
The city information of the recipient on the merchant side.
Address
string
Yes
The registered address of the recipient on the merchant side.
IdentityNumber
string
No
The identity (TCKN) number of the recipient on the merchant side.
TaxNumber
string
No
The tax identification number of the recipient on the merchant side.
Main Directory: Product<Array>
ProductId
string
Yes
Product ID.
ProductName
string
Yes
Product name.
ProductCategory
string
Yes
Product category.
ProductDescription
string
Yes
Product description.
ProductAmount
decimal
Yes
Product price information.
MemberId
int?
Yes/No
It is mandatory for the Marketplace model. It must be filled with the MemberId information of the sub-merchant in the Paywall system.
MemberEarningCalculated
bool?
Yes/No
In the marketplace scope, if you have calculated the sub-merchant's entitlement, you should send this parameter as true.
MemberEarning
decimal?
Yes/No
In the marketplace scope, if you have calculated the sub-merchant's entitlement, you should send this parameter with the entitlement value to Paywall.
MemberCustomCommission
bool
Yes/No
In the marketplace scope, this is the parameter used if you want to specify a commission for the sub-merchant for this particular sale.
MemberCommission
decimal?
Yes/No
In the marketplace scope, this is the parameter where the commission value is sent if you want to specify a commission for the sub-merchant for this particular sale.
Paywall Response
ErrorCode
int
Error code. If the transaction is successful, it returns the value '0'.
Result
bool
It returns a true or false value. If the transaction is successful, it returns the value 'true'.
Message
string
If the operation is faulty, this is the message indicating the error, providing language support according to the locale parameter.
Body
object
If the operation is faulty, this is the code specified for the error.
{
"ErrorCodeType": 1,
"ErrorMessage": null,
"ErrorCode": 0,
"Result": true,
"Message": "",
"Body": {
"Payment": {
"PaymentId": 2095851,
"ActivityId": 4220860,
"UniqueCode": "1f1f6a46-d860-4282-9346-9807fb1de440",
"MerchantUniqueKey": "3ef9ef3f-5cc8-46bf-84ee-03f665c698c6",
"PaymentGatewayId": 1262,
"PaymentGatewayName": "correctaccount",
"PaymentGatewayProviderName": "Provider",
"Card": {
"Saved": false,
"UniqueCode": ""
}
},
"Error": {
"ProviderErrorCode": null,
"ProviderErrorMessage": null,
"BankErrorCode": null,
"BankErrorMessage": null
}
}
}Last updated