הסבר כללי לשלבים חיוב TAP
- כאשר האפליקציה עולה פעם ראשונה :
- לפנות לקארדקום API לקבלת פרטים וביצוע רישום למכשיר קצה.
- יש לבצע רישום למכשיר ל SDK RegisterDevice.
- בכול עסקת חיוב
- לפנות למכשיר לביצוע חיוב כרטיס אשראי (100 ₪) עם התשובה שהתקבלו בשלב 1.a
- קבלת תשובה והמכשיר ופנייה עם התשובה לקארדקום API.
הערה :
בשלב 1 יש תוקף ל RegisterDevice , יש לבצע את שלב אחת לתקופה – מתקבל התוקף של ה Register בעת הפנייה לפונקציה.
התקנה של הSDK באפליקציה
- יש לדאוג שלאפליקציה של הרשאות הבאות :
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-feature android:name="android.hardware.nfc" android:required="false" />
- הוספה של ה SDK לאפליקציה
את הקבצים מקבלים מאתנו יש להוסיף תחת dependencies:
implementation "com.denovo:topliteapp-PROD:3.0.1.2"
implementation files("../libs/CardCom-v1.2.16-Release_Prod.aar")
ביצוע שלב 1.a , לפנות לקארדקום API לקבלת פרטים וביצוע רישום למכשיר קצה.
פניה לרישום מכשיר
פניה של XXXX SWAGER
שם | תיאור | דוגמה |
ApiName | שם משתמש למסוף | |
Terminal | מספר מסוף קארדקום | |
UID | UID של המכשיר | |
תשובה
שם | תיאור | דוגמה |
ResponseCode | 0 הצלחה אחרת כישלון | |
Description | תיאור הודעת שגיאה | |
TPN | יש לשמור ברמת האפליקציה – יועבר בעת רישום המכשיר שלב1.b | |
MerchantCode | יש לשמור ברמת האפליקציה – יועבר בעת רישום המכשיר 1.b | |
SapakMutavNumber | יש לשמור ברמת האפליקציה – יועבר בעת ביצוע חיוב 2.a |
ביצוע שלב 1.b יש לבצע רישום למכשיר ל SDK RegisterDevice.
יש לבצע רישום למכשיר על ידי הפעלת הפונקציה topService.registerDevice , ראה קוד לדוגמה בהמשך.
פרמטרים להפעלת :
שם | תיאור | דוגמה | |
TPN | כפי שהתקבל בשלב 1.a | ||
MerchantCode | כפי שהתקבל בשלב 1.a | ||
פרמטרים שמקבלים ב onRegisterSuccess :
שם | תיאור | דוגמה |
message | הודעה בהצלחה | |
session_key | יש לשמור ברמת האפליקציה – יועבר בעת ביצוע עסקה | |
auth_token | יש לשמור ברמת האפליקציה – לא בשימוש | |
session_created_timestamp | מתי נוצר ה session_key | |
session_expire_time | תוקף ה session_key מתאריך session_created_timestamp |
כאשר פג תוקף session_key , יש לבצע רישום מחדש למכשיר. session_created_timestamp + session_expire_time גדול מהיום.
פרמטרים שמקבלים ב onRegisterError:
שם | תיאור | דוגמה |
error_code | קוד הודעת שגיאה - ראה רשימת קודים | |
error_message | תיאור הודעה שגיאה |
מומלץ להציג את הודעת השגיאה + קוד השגיאה למשתמש לשם ביצוע תחקור.
דוגמה לפנייה :
ToPService topService = new ToPService(Activity activity);
topService.registerDevice(tpn, merchantCode, new ToPService.onRegistrationListener() {
@Override
public void onProcess(String message) {
//UPDATE PROGRESS DIALOG message HERE
}
@Override
public void onRegisterSuccess(JSONObject successObject) {
//DISMISS PROGRESS DIALOG HERE
// sample success response
//{
//“message”: “Registration done successfully”,
//“session_key”: “xxxxxxxxxxxxxxxxxxxxxx”,
//“auth_token”: “xxxxxxxxxxxxxxxxxxxxxx”,
//“session_created_timestamp”:”1672038767”
//“session_expire_time”: “86400”
//}
}
@Override
public void onRegisterError(JSONObject errorObject) {
//DISMISS PROGRESS DIALOG HERE
// sample error response
{“error_code”: “403”,“error_message”: “Invalid TPN”}
}
});
שלב 1.b ביצוע חיוב במכשיר
פנייה לחיוב topService.performTransaction
שם | תיאור | דוגמה | סוג |
sessionKey | כפי שהתקבל בעת הרישום בשלב 1.B | ||
inputObject | |||
type | REFUND או SALE |
SALE – חיוב REFUND - זיכוי |
מחרוזת |
amount | סכום | מספר בלבד | |
Lang | תמיד iw | עברית | |
CustomObject | |||
CustomerName | אופציונלי | ||
CustomerEmail | אופציונלי | ||
PhoneNumber | אופציונלי | ||
HolderID | אופציונלי | ||
AllowFullCardNumberInResponse | True | ||
SapakMutavNumber | כפי שהתקבל בשלב 1.a | ||
NumberOfPayments | מספר תשלומים | ||
CreditType |
אם מספר תשלומים 1 – יש לשלוח ערך 1 אם מספר תשלומים גדול מ-1 יש לשלוח ערך 8 עבור תשלומים רגילים או ערך 6 עבור תשלומים בקרדיט
|
תשובה :
שם | תיאור | דוגמה | סוג |
response_code | קוד תשובה | 0 | string |
message | תיאור תשובה | string | |
status | סטטוס עסקה | Approved / Declined | string |
transaction_id | מספר עסקה | 000123456789 | string |
transactionResult | פרטי עסקה | string | |
customMessage | string | ||
DE48 | string | ||
ReturnCode | קוד תשובה | 0 | string |
ReturnMessage | תיאור תשובה | string | |
CardNumber | מספר כרטיס | 4580000000000000 | string |
ExpDate_MMYY | תוקף כרטיס | 06/29 | string |
CardBrandCode | קוד מותג כרטיס | 1 | string |
CardIssuerCode | קוד מנפיק כרטיס | 1 | string |
CardFinancerCode | קוד סולק כרטיס | 2 | string |
Token | אסימון כרטיס | 56f1321c-03b7-478e-a0dc-76ff83e3c8c5 | string |
ApprovalNumber | מספר אישור | 1234567 | string |
ResultRecord | פרטי עסקה מוצפנים | string | |
UID | מזהה עסקה | 0000123456789123456789 | string |
דוגמה לביצוע חיוב
}
"type": "REFUND" / "SALE",
"amount" "1.00",
"lang": "iw",
"CustomObject": {
"CustomerName": "Test Test",
"CustomerEmail": "test@test.test",
"PhoneNumber": "9999999999",
"HolderID": "999999999",
"AllowFullCardNumberInResponse": true,
"SapakMutavNumber": "123456",
"NumberOfPayments": 1,
"CreditType": 1
{
}
ToPService topService = new ToPService(Activity activity);
topService.performTransaction(inputObject, sessionKey, new ToPService.OnTransactionListener() {
@Override
public void onTransactionResponse (JSONObject successObject){
//note: response_code:’00’ means Successful transaction other than ‘00’ means Failure transaction
}
@override
public void onTransactionError (JSONObject errorObject) {
// sample error response
//{
// “error_code”: “21”,
//“message”: “Transaction Cancelled”
//}
}
@override
public void onRegisterNeeded (JSONObject errorObject) {
// sample error response
//{
//“error_code”: “990”,
//“message”: “Session key is expired, To authenticate, please re-initiate device registration api”
}
}
});
פניה לשרת קארדקום לרישום עסקה שלב 2.b
בקשה
שם | תיאור | דוגמה |
ApiName | שם משתמש למסוף | |
Terminal | מספר מסוף קארדקום | |
UID | UID של המכשיר | |
SdkTransactionInfo | הבקשה שנשלחה בשלב b.1 | |
TransactionResult | התשובה שחזרה בשלב b.1 |
תשובה
שם | תיאור | דוגמה |
ResponseCode | קוד תשובה | 0=הצלחה / אחרת=כישלון |
Description | תיאור תשובה |
הערה ! אם יש תקלת תקשורת יש לבצע פנייה שוב !
אם התקבלה שגיאה – הכרטיס לא יחויב יש להציג חיוב נכשל
דרישות מקדימות לביצוע עסקת TAP מול SDK
- רישום pindpad device בש.ב.א
- אנדרואיד – מכשיר חייב לכלול NFC
- אנדרואיד – יש לאפשר גישה לשירותי מיקום
- אנדרואיד – יש לוודא שההגדרה של "אפשרויות מפתח" כבויה
הערות
0 הערות
היכנס למערכת כדי להגיב.