Overview
The document provides an overview and guidelines for integrating pay-in
functionalities into your application. It covers the necessary steps,
APIs, and considerations required to enable seamless processing of payments
within your system. From initiating transactions to handling various payment
methods, this document aims to provide a comprehensive understanding of
integrating pay-in features effectively.
Payin
Pay-ins are modern payment solutions offered by payment aggregators and payment
gateways. Using these solutions, merchants can accept payments from their
customers via different payment methods.
Parameters:-
- "orderid" => "180000000000027",
- "name" => "XYZ",
- "email" => "test@gmail.com",
- "method" => 1,
- "phone" => "9999999901",
- "amount" => 100
Encrypt this all Parameters using your Secret key.
Request:-
{
"token":"R0VSN25EMGUSD5OG1YN01XWGtMU2xsNG1XghgGhgfFKBNMSGRJ",
"encrypt_data":"WnZlpdo8SLM\/q7ELC3nIWHI1NDFMdTFXUWNrYVVYc1UreUZOSkxkRkhiOWIvVy8rdCt1YzB5OHRuRGpYbFNOeS9EekRGdTRYUUEvU3RRVmx5ZHhOY1JIemE1cXdEeGZOK0RaM3kzOUlzdXAzRFhXcGszRHkxd2VvcnJaNlBsTWRvSTQwdEpSK3BLbDA5bzk0d25jYmVtRzZTVThyVlR0NXBvTzhiV3QyUEh5cUdDNHJIVlZxbXJSK2hyST0="
}
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://payinapi.wavexpay.in/api/Payin',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{"token":"R0VSN25EMGU5OG1YN01XWGtMU2xsNG1X","encrypt_data":"WnZlpdo8SLM\\/q7ELC3nIWHI1NDFMdTFXUWNrYVVYc1UreUZOSkxkRkhiOWIvVy8rdCt1YzB5OHRuRGpYbFNOeS9EekRGdTRYUUEvU3RRVmx5ZHhOY1JIemE1cXdEeGZOK0RaM3kzOUlzdXAzRFhXcGszRHkxd2VvcnJaNlBsTWRvSTQwdEpSK3BLbDA5bzk0d25jYmVtRzZTVThyVlR0NXBvTzhiV3QyUEh5cUdDNHJIVlZxbXJSK2hyST0="}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Response:-
Success
{
"Status":"INITIATE",
"TxnID":"187500010031007",
"OrderID" :"187500010031007",
"Name":"Test Test",
"Email":"test@gmail.com",
"Phone":"5768908909",
"Amount":200,
"Message":"Transaction Initiate Successfull",
"UPI_URL":"upi intent"
"OR"
"RedirectUrl":"Redirect Url"
}
ERROR / FAILED
{
"Status":"ERROR",
"Message":"Duplicate Transaction",
"Errorcode":"103"
}
{
"token":"R0VSN25EMGUSD5OG1YN01XWGtMU2xsNG1XghgGhgfFKBNMSGRJ",
"encrypt_data":"WnZlpdo8SLM\/q7ELC3nIWHI1NDFMdTFXUWNrYVVYc1UreUZOSkxkRkhiOWIvVy8rdCt1YzB5OHRuRGpYbFNOeS9EekRGdTRYUUEvU3RRVmx5ZHhOY1JIemE1cXdEeGZOK0RaM3kzOUlzdXAzRFhXcGszRHkxd2VvcnJaNlBsTWRvSTQwdEpSK3BLbDA5bzk0d25jYmVtRzZTVThyVlR0NXBvTzhiV3QyUEh5cUdDNHJIVlZxbXJSK2hyST0="
}
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"token\":\"R0VSN25EMGU5OG1YN01XWGtMU2xsNG1X\",\"encrypt_data\":\"WnZlpdo8SLM\\/q7ELC3nIWHI1NDFMdTFXUWNrYVVYc1UreUZOSkxkRkhiOWIvVy8rdCt1YzB5OHRuRGpYbFNOeS9EekRGdTRYUUEvU3RRVmx5ZHhOY1JIemE1cXdEeGZOK0RaM3kzOUlzdXAzRFhXcGszRHkxd2VvcnJaNlBsTWRvSTQwdEpSK3BLbDA5bzk0d25jYmVtRzZTVThyVlR0NXBvTzhiV3QyUEh5cUdDNHJIVlZxbXJSK2hyST0=\"}");
Request request = new Request.Builder()
.url("https://payinapi.wavexpay.in/api/Payin")
.method("POST", body)
.addHeader("Content-Type", "application/json")
.build();
Response response = client.newCall(request).execute();
Response:-
Success
{
"Status":"INITIATE",
"TxnID":"187500010031007",
"OrderID" :"187500010031007",
"Name":"Test Test",
"Email":"test@gmail.com",
"Phone":"5768908909",
"Amount":200,
"Message":"Transaction Initiate Successfull",
"UPI_URL":"upi intent"
"OR"
"RedirectUrl":"Redirect Url"
}
ERROR / FAILED
{
"Status":"ERROR",
"Message":"Duplicate Transaction",
"Errorcode":"103"
}
{
"token":"R0VSN25EMGUSD5OG1YN01XWGtMU2xsNG1XghgGhgfFKBNMSGRJ",
"encrypt_data":"WnZlpdo8SLM\/q7ELC3nIWHI1NDFMdTFXUWNrYVVYc1UreUZOSkxkRkhiOWIvVy8rdCt1YzB5OHRuRGpYbFNOeS9EekRGdTRYUUEvU3RRVmx5ZHhOY1JIemE1cXdEeGZOK0RaM3kzOUlzdXAzRFhXcGszRHkxd2VvcnJaNlBsTWRvSTQwdEpSK3BLbDA5bzk0d25jYmVtRzZTVThyVlR0NXBvTzhiV3QyUEh5cUdDNHJIVlZxbXJSK2hyST0="
}
const myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
const raw = JSON.stringify({
"token": "R0VSN25EMGU5OG1YN01XWGtMU2xsNG1X",
"encrypt_data": "WnZlpdo8SLM/q7ELC3nIWHI1NDFMdTFXUWNrYVVYc1UreUZOSkxkRkhiOWIvVy8rdCt1YzB5OHRuRGpYbFNOeS9EekRGdTRYUUEvU3RRVmx5ZHhOY1JIemE1cXdEeGZOK0RaM3kzOUlzdXAzRFhXcGszRHkxd2VvcnJaNlBsTWRvSTQwdEpSK3BLbDA5bzk0d25jYmVtRzZTVThyVlR0NXBvTzhiV3QyUEh5cUdDNHJIVlZxbXJSK2hyST0="
});
const requestOptions = {
method: "POST",
headers: myHeaders,
body: raw,
redirect: "follow"
};
fetch("https://payinapi.wavexpay.in/api/Payin", requestOptions)
.then((response) => response.text())
.then((result) => console.log(result))
.catch((error) => console.error(error));
Response:-
Success
{
"Status":"INITIATE",
"TxnID":"187500010031007",
"OrderID" :"187500010031007",
"Name":"Test Test",
"Email":"test@gmail.com",
"Phone":"5768908909",
"Amount":200,
"Message":"Transaction Initiate Successfull",
"UPI_URL":"upi intent"
"OR"
"RedirectUrl":"Redirect Url"
}
ERROR / FAILED
{
"Status":"ERROR",
"Message":"Duplicate Transaction",
"Errorcode":"103"
}
{
"token":"R0VSN25EMGUSD5OG1YN01XWGtMU2xsNG1XghgGhgfFKBNMSGRJ",
"encrypt_data":"WnZlpdo8SLM\/q7ELC3nIWHI1NDFMdTFXUWNrYVVYc1UreUZOSkxkRkhiOWIvVy8rdCt1YzB5OHRuRGpYbFNOeS9EekRGdTRYUUEvU3RRVmx5ZHhOY1JIemE1cXdEeGZOK0RaM3kzOUlzdXAzRFhXcGszRHkxd2VvcnJaNlBsTWRvSTQwdEpSK3BLbDA5bzk0d25jYmVtRzZTVThyVlR0NXBvTzhiV3QyUEh5cUdDNHJIVlZxbXJSK2hyST0="
}
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://payinapi.wavexpay.in/api/Payin");
var content = new StringContent("{\"token\":\"R0VSN25EMGU5OG1YN01XWGtMU2xsNG1X\",\"encrypt_data\":\"WnZlpdo8SLM\\/q7ELC3nIWHI1NDFMdTFXUWNrYVVYc1UreUZOSkxkRkhiOWIvVy8rdCt1YzB5OHRuRGpYbFNOeS9EekRGdTRYUUEvU3RRVmx5ZHhOY1JIemE1cXdEeGZOK0RaM3kzOUlzdXAzRFhXcGszRHkxd2VvcnJaNlBsTWRvSTQwdEpSK3BLbDA5bzk0d25jYmVtRzZTVThyVlR0NXBvTzhiV3QyUEh5cUdDNHJIVlZxbXJSK2hyST0=\"}", null, "application/json");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
Response:-
Success
{
"Status":"INITIATE",
"TxnID":"187500010031007",
"OrderID" :"187500010031007",
"Name":"Test Test",
"Email":"test@gmail.com",
"Phone":"5768908909",
"Amount":200,
"Message":"Transaction Initiate Successfull",
"UPI_URL":"upi intent"
"OR"
"RedirectUrl":"Redirect Url"
}
ERROR / FAILED
{
"Status":"ERROR",
"Message":"Duplicate Transaction",
"Errorcode":"103"
}
{
"token":"R0VSN25EMGUSD5OG1YN01XWGtMU2xsNG1XghgGhgfFKBNMSGRJ",
"encrypt_data":"WnZlpdo8SLM\/q7ELC3nIWHI1NDFMdTFXUWNrYVVYc1UreUZOSkxkRkhiOWIvVy8rdCt1YzB5OHRuRGpYbFNOeS9EekRGdTRYUUEvU3RRVmx5ZHhOY1JIemE1cXdEeGZOK0RaM3kzOUlzdXAzRFhXcGszRHkxd2VvcnJaNlBsTWRvSTQwdEpSK3BLbDA5bzk0d25jYmVtRzZTVThyVlR0NXBvTzhiV3QyUEh5cUdDNHJIVlZxbXJSK2hyST0="
}
const axios = require('axios');
let data = JSON.stringify({
"token": "R0VSN25EMGU5OG1YN01XWGtMU2xsNG1X",
"encrypt_data": "WnZlpdo8SLM/q7ELC3nIWHI1NDFMdTFXUWNrYVVYc1UreUZOSkxkRkhiOWIvVy8rdCt1YzB5OHRuRGpYbFNOeS9EekRGdTRYUUEvU3RRVmx5ZHhOY1JIemE1cXdEeGZOK0RaM3kzOUlzdXAzRFhXcGszRHkxd2VvcnJaNlBsTWRvSTQwdEpSK3BLbDA5bzk0d25jYmVtRzZTVThyVlR0NXBvTzhiV3QyUEh5cUdDNHJIVlZxbXJSK2hyST0="
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://payinapi.wavexpay.in/api/Payin',
headers: {
'Content-Type': 'application/json'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
Response:-
Success
{
"Status":"INITIATE",
"TxnID":"187500010031007",
"OrderID" :"187500010031007",
"Name":"Test Test",
"Email":"test@gmail.com",
"Phone":"5768908909",
"Amount":200,
"Message":"Transaction Initiate Successfull",
"UPI_URL":"upi intent"
"OR"
"RedirectUrl":"Redirect Url"
}
ERROR / FAILED
{
"Status":"ERROR",
"Message":"Duplicate Transaction",
"Errorcode":"103"
}
{
"token":"R0VSN25EMGUSD5OG1YN01XWGtMU2xsNG1XghgGhgfFKBNMSGRJ",
"encrypt_data":"WnZlpdo8SLM\/q7ELC3nIWHI1NDFMdTFXUWNrYVVYc1UreUZOSkxkRkhiOWIvVy8rdCt1YzB5OHRuRGpYbFNOeS9EekRGdTRYUUEvU3RRVmx5ZHhOY1JIemE1cXdEeGZOK0RaM3kzOUlzdXAzRFhXcGszRHkxd2VvcnJaNlBsTWRvSTQwdEpSK3BLbDA5bzk0d25jYmVtRzZTVThyVlR0NXBvTzhiV3QyUEh5cUdDNHJIVlZxbXJSK2hyST0="
}
import http.client
import json
conn = http.client.HTTPConnection("https://payinapi.wavexpay.in/api/Payin", 8005)
payload = json.dumps({
"token": "R0VSN25EMGU5OG1YN01XWGtMU2xsNG1X",
"encrypt_data": "WnZlpdo8SLM/q7ELC3nIWHI1NDFMdTFXUWNrYVVYc1UreUZOSkxkRkhiOWIvVy8rdCt1YzB5OHRuRGpYbFNOeS9EekRGdTRYUUEvU3RRVmx5ZHhOY1JIemE1cXdEeGZOK0RaM3kzOUlzdXAzRFhXcGszRHkxd2VvcnJaNlBsTWRvSTQwdEpSK3BLbDA5bzk0d25jYmVtRzZTVThyVlR0NXBvTzhiV3QyUEh5cUdDNHJIVlZxbXJSK2hyST0="
})
headers = {
'Content-Type': 'application/json'
}
conn.request("POST", "/api/Payin", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Response:-
Success
{
"Status":"INITIATE",
"TxnID":"187500010031007",
"OrderID" :"187500010031007",
"Name":"Test Test",
"Email":"test@gmail.com",
"Phone":"5768908909",
"Amount":200,
"Message":"Transaction Initiate Successfull",
"UPI_URL":"upi intent"
"OR"
"RedirectUrl":"Redirect Url"
}
ERROR / FAILED
{
"Status":"ERROR",
"Message":"Duplicate Transaction",
"Errorcode":"103"
}
Payin Webhook Response:-
A webhook system needs implementation to receive updates on payment statuses from the Payin API. Data in JSON format will be delivered through the webhook, facilitating efficient tracking and management of payment statuses in real-time.
Webhook Status:-
- SUCCESS
- FAILED
- REVERSAL
- CANCELLED
- PENDING
Response
{
"Status": "SUCCESS",
"Txnid": "187500010031002",
"OrderID" => "187500010031002",
"Amount": "200",
"RRN": "53253646467",
"Message": "NA"
}
Payin Check Response:-
Status:-
- PROCESSING
- PENDING
- USER DROP
- SUCCESS
- FAILED
- REVERSAL
- CANCELLED
Request:-
{
"token":"Uzh5WHNuZllrd0R6WEZxaFZJV2VDDDGGBMSlFwMGhZMGxGK2FHM2Np",
"txnid":"WXP9047953036032"
}
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://payinapi.wavexpay.in/api/PayinCheckStatus',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"token":"Uzh5WHNuZllrd0R6WEZxaFZJV2VDDDGGBMSlFwMGhZMGxGK2FHM2Np",
"txnid":"WXP9047953036032"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Response:-
Success
{
"Status":"SUCCESS",
"TxnID":"187500010031007",
"OrderID" :"187500010031007",
"Amount":200,
"RRN":"1234567890"
}
ERROR / FAILED
{
"Status":"ERROR",
"Message":"Invalid Token",
"Errorcode":"103"
}
Encrypt Formate:-
$clientSecretKey = 'eXpKUWlrSWJLdjhPTUJ5UmdJcUJJZmdt';
$encrydata = [
"orderid" => "180000000000027",
"name" => "vikas rai",
"email" => "test@gmail.com",
"method" => 1,
"phone" => "9999999901",
"amount" => 100
];
$encryptedData = $this->encryptData($encrydata, $clientSecretKey);
$request = [
"token" => "R0VSN25EMGU5OG1YN01XWGtMU2xsNG1X",
"encrypt_data" => $encryptedData
];
echo json_encode($request);
function encryptData($data, $secretKey)
{
$iv = random_bytes(16); // 16 bytes for AES-256
$cipher = 'AES-256-CBC';
$encrypted = openssl_encrypt(
json_encode($data), // Convert data to JSON
$cipher,
$secretKey,
0,
$iv
);
return base64_encode($iv . $encrypted); // Combine IV and encrypted data
}