חתימה על פרמטרים , אימות פרטים , מנגנון מניעת הונאות Sign=True
כללי
- מנגנון זה בא להגן על אימות ותקינות הנתונים החוזרים לכתובת הצלחה/כישלון
- הוא רלוונטי בפרוטוקול PAY בלבד
- קיים מודול המונע שינוי פרמטרים ביציאה לדף התשלום -קיים מאמר בנושא -״מנגנון מניעת הונאות יציאה לדף תשלום ״
שליחת פרמטר בבקשת התשלום לצורך חתימה על התשובה
יש להוסיף לכל בקשת תשלום בפרוטקול pay
Sign=True
SHA256 – המפתח המשותף מוצמד לתחילת ההודעה ולהכל עושים Hash
HMAC256 – פרוטוקול שמקבל מידע ומפתח וחותם עליו עם SHA256
שים לב שלשדות החופשיים אנו מבצעים escape לפני השליחה
דוגמה לחתימה:
דוגמא לתשובה
http://payment.yaad.net/pay/no.htm?Id=0&CCode=6&Amount=0&ACode=&Order=&Fild1=%20&Fild2=&Fild3=&
הערך שנחתם
Id=0&CCode=6&Amount=0&ACode=&Order=&Fild1=%20&Fild2=&Fild3=
מפתח לחתימה לדוגמא נשלח לבעלי המסוף חד פעמי אינו ניתן לשינוי =
b6589fc6ab0dc82cf12099d1c2d40ab994e8410c
ערך החתימה אשר נשלח בתשובה לעסקה תחת פרמטר
Sign=689c64381d7f5358e89fd7f7f19d6842be651de0bc99ce16eb0d020b06f63e83
הדמיה במחשבון hash
דוגמא נוספת
דוגמא לבקשת תשלום
<form action="https://icom.yaad.net/p/" method="post" > <input type="hidden" name="action" value="pay"> <input type="hidden" name="Masof" value="0010020610"> <input type="hidden" name="Amount" value="2"> <input type="hidden" name="Tash" value="1"> <input type="hidden" name="PassP" value="1234"> <input type="hidden" name="MoreData" value="True"> <input type="hidden" name="Sign" value="True"> <input type="hidden" name="UTF8" value="True"> <input type="hidden" name="UTF8out" value="True"> <input type="hidden" name="Order" value="1234"> <!--Optional--> <input type="hidden" name="ClientName" value="שריג"> <input type="hidden" name="ClientLName" value="אבישי"> <input type="hidden" name="street" value="levanon 3"> <input type="hidden" name="city" value="netanya"> <input type="hidden" name="zip" value="42361"> <input type="hidden" name="phone" value="098610338"> <input type="hidden" name="cell" value="0506400013"> <input type="hidden" name="email" value="avi@yaad.net"> <input type="hidden" name="sendemail" value="True"> <input type="submit" value="pay"> </form> דוגמא לתשובה https://icom.yaad.net/yaadpay/tmp/0010020610/tnx_iframe.htm?Id=6092105&CCode=0&Amount=2&ACode=0012345&Order=1234&Fild1=%D7%A9%D7%A8%D7%99%D7%92%20%D7%90%D7%91%D7%99%D7%A9%D7%99&Fild2=&Fild3=&Sign=2d30665d2c21bf9a1a3e5df7d1645a0e1aadf928a245655faed629f9582a63b3&Bank=6&Payments=1&UserId=203269535&Brand=2&Issuer=2&L4digit=0000&street=levanon%203&city=netanya&zip=42361&cell=0506400013&Coin=1&Tmonth=01&Tyear=2019&Hesh=2081
ערך החתימה שחוזר משרת YaadPay
Sign=2d30665d2c21bf9a1a3e5df7d1645a0e1aadf928a245655faed629f9582a63b3
הפרמטרים עליהם מתבצעת החתימה
Id=6092105&CCode=0&Amount=2&ACode=0012345&Order=1234&Fild1=%D7%A9%D7%A8%D7%99%D7%92%20%D7%90%D7%91%D7%99%D7%A9%D7%99&Fild2=&Fild3=
באמצעות מפתח
7110eda4d09e062aa5e4a390b0a572ac0d2c0220
הדמיה לביצוע החתימה באמצעות מחשבון Hash
$agreement = $this->input->get('HKId'); // מס' הסכם רלוונטי בדף תשלום במצב הוראת קבע $deal = $this->input->get('Id'); // מס' עסקה $CCode = $this->input->get('CCode'); // מס' תשובה משבא $Amount = $this->input->get('Amount'); // סכום $ACode = $this->input->get('ACode'); // $token = $this->input->get('Order'); // token $fullname = $this->input->get('Fild1'); // שם פרטי ושם משפחה $email = $this->input->get('Fild2'); // כתובת מייל $phone = $this->input->get('Fild3'); // טלפון $Sign = $this->input->get('Sign'); // חתימה דיגיטלית //$Fild1 = $_GET['Fild1']; $sign_array = array( 'HKId' => $agreement, 'Id' => $deal, 'CCode' => $CCode, 'Amount' => $Amount, 'ACode' => $ACode, 'Order' => $token, 'Fild1' => rawurlencode($fullname), 'Fild2' => rawurlencode($email), 'Fild3' => rawurlencode($phone) ); $string = ''; foreach($sign_array as $key => $val) { $string .= $key .'=' . $val .'&'; } $string = substr($string, 0, -1); log_message('Error','string = '.$string); $verify = hash_hmac('SHA256',$string,'SignPASSWORD'); if($verify == $Sign) // good !!! {