Skip to main content

Signature

Extract Request

The range for GET requesting signature is : Query,The range for POST requesting signature is : Body.

Extract strings which are pending for signature request:

  • Query: In lexicographic order, order key1=value1& key2=value2, mark it as Y
  • Body: In the order of key, order as key1=value1& key2=value2, when the value type is JSON, continue to sort in ascending order according to the JSON key, add the result to the sorted string, when value type is JSON array, get the element one by one, and then order as the key element, mark it as Z.

Extract GET Signature string Request as Y; extract POST request as Z. And then use SHA1withRSA

Extract the Body signature string as below:

{
"c":{"b":"11","a":"10"},
"a":"100",
"b":[{"c":"3","b":"2","a":"1"},{"c":"6","b":"5","a":"4"}]
}
  • Step 1: Follow the ascending order of outermost layer and get:
  1. "a":"100"
  2. "b":[{"c":"3","b":"2","a":"1"},{"c":"6","b":"5","a":"4"}]
  3. "c":{"b":"11","a":"10"}
  • Step 2: Take 1(a) to get order string as a=100
  • Step 3: Take 2(b) as arrayjson and then take the first element of {"c":"3","b":"2","a":"1"} to order c、b、a as a、b、c and get the order string as a=100&a=1&b=2&c=3,continue to get the second element{"b":"5","c":"6","a":"4"} and do ascending order of b、 c、a as a、b、c and get order string as a=100&a=1&b=2&c=3&a=4&b=5&c=6
  • Step 4: When taking 3(c), its type is json, following the ascending order of the key, the final order string is a=100&a=1&b=2&c=3&a=4&b=5&c=6&a=10&b=11

Signature Example

Original request body:

{
"version": "v1",
"service": "llpth.checkout.apply",
"merchant_id": "142023010100009001",
"merchant_order_id": "ORDER_202301010001",
"order_amount": "88.99",
"order_currency": "THB",
"order_desc": "display your order info",
"payment_method": "WAP_PAYMENT",
"customer": {
"merchant_user_id": "USER_0001",
"full_name": "Bruce Lee"
},
"notify_url": "https://www.lianlianpay.co.th/sample/callback",
"redirect_url": "https://www.lianlianpay.co.th/sample/redirect"
}

After extracted request body

full_name=Bruce Lee&merchant_user_id=USER_0001&merchant_id=142023010100009001&merchant_order_id=ORDER_202301010001&notify_url=https://www.lianlianpay.co.th/sample/callback&order_amount=88.99&order_currency=THB&order_desc=display your order info&payment_method=WAP_PAYMENT&redirect_url=https://www.lianlianpay.co.th/sample/redirect&service=llpth.checkout.apply&version=v1

Assume generate RSA pair as follows

public key

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhJcmKbUzaHH15dEtXU7wqeqTsS+G3Y81wlD5+Srma/EWG1JCOBd7eYNqoJvBwzPOS1xRhQvGPuDdJRWBvDK9MuNEj0ibxp6JzJF3yopcSnn3utDbQhf4XUorx3RmPh1lJGrSUYkOUt3KbOWoIVHsqojzJBw9AifVYGrphNPPiGAyUN8Ov7GUUAqBn04xrCCaqWKCQVKIOFjDfwuRjvklmRd3OkfX9d8ab+Pr6kYmNmLJXbBLZ40u/V8y2I3U1jiAel2rFj1jHY5wucTM7Stu7li5Qv57iITSQDyzHwFpPRU28p1Fh4oNNChMBsTNB0jGfLC/J71EvnXa7t3RxKHAjwIDAQAB

private key

MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCElyYptTNocfXl0S1dTvCp6pOxL4bdjzXCUPn5KuZr8RYbUkI4F3t5g2qgm8HDM85LXFGFC8Y+4N0lFYG8Mr0y40SPSJvGnonMkXfKilxKefe60NtCF/hdSivHdGY+HWUkatJRiQ5S3cps5aghUeyqiPMkHD0CJ9VgaumE08+IYDJQ3w6/sZRQCoGfTjGsIJqpYoJBUog4WMN/C5GO+SWZF3c6R9f13xpv4+vqRiY2YsldsEtnjS79XzLYjdTWOIB6XasWPWMdjnC5xMztK27uWLlC/nuIhNJAPLMfAWk9FTbynUWHig00KEwGxM0HSMZ8sL8nvUS+ddru3dHEocCPAgMBAAECggEAAYRxTVzjf7h+Jekk6cJzgp5KnmZ61qJC7Txb//v7sxSJOjrQwy+RnCxi1f+yUfePztD5pdoipKmSHlCGsY6rF5/+Mt2T2swJq6umgUzgDYIj0aF+QN1hXD/zDE9KtD9F3wrR6Vj2LwCWxnRCXk8/tBvpHGquUA4ApR/UGE8MOvVKm/cxbk4VBYy7rV+CpLrIWtNglaaEGpcUHyUGkKotKw/6A4rAIZAC8wh7KuiQBZIem+H3ukmtaJEXEtgcPjwkAceyvZL800L4Sv+hQ7PxGeEQmvq9a46x+ef/zQwCo6vC/NFxoHlvCqeokytNgZIddbFjsUsAaZ34tPFqZU0WYQKBgQDT/CLryl3s5jjBdluWUVXhwc6lKp+zj5KeeaasV/lwNPrYqawoZkEFblutTO0kTV8efPZV7+Ad6bunI5Nsi4vbZUqr49IshINlxMQszVaMvW98Bm7rotfJsyrbUwpDvxQELRqkMgkUc+VVUCnWrXj+8q/Dr3+lvF30Rpq3tqQHuQKBgQCgHt8ol0j2C7Ht3MQuC8xmb4UL14R+RAS0/M99jiCImElO23DKFAGToBrzDAgiofgANdzoaNxGPctDXeAYTUYpi/V26XddbL1e75FC06TSjQOyo93ur7SzsfEsxeLGBxV0HA/KUmk+Wk4mN6vMaPWoM7KvdfStIgwvY/QjXgoehwKBgQC8tKLRi5/5FyhG7/mv4k+1XDV8SmlICvLWKCz7FoVyIXd8D+61N/GByC/MIcKookeeeFdBQPwdJMhrjPvbkI27jHvgcDnUb1IY8gRAbboyJyBrI77x/FBjuR7Zhx6IGDzVSuGAcRosHs90FpxoApzHN3rHlB7phrmMjp2EFQ4H4QKBgBzmlZbo/4VRhRMO1uYMwR74IAaMJuD3e/YC75yU67Bb9Fdkak4/IC26J0MZN9qwa2f2UOIuExwmiSqmpg0c3X4gQfTtnNrjBqc9DHYIZ2aNh05WH3e2hSIuCv7u1MizfJ7RddQp3c8gU5y4Taz+gOCUPDtJShl53MMtAmLj1WW/AoGBAI1oCZRs18FQ4NTb2KB0AXjbOkbSmlg25OmLiT0D7gb/t0qLu2uiCnSuAnL6/ecdISmTMRjUqGdAKViRa4+CzdS6ldNkECwlxourzV3KJkCVGx8zqNAD35euX6HwceZ3b1FPMbDvgrnrQYeaoN6knepbr+Fmwm2MF5IyS0bgVQG/

After signed with private key for request body

LBLodfpk74T7dr5NllfxYwYmi5nnijmFNCaZE/sMfqDjmUHDH1tTpGtZP7NqlosF6yKJcF+L4tLsmp2+3uV0XV8j7sPLfm+4GctbOKxNQPlMkeqfO7TUSS01PuVAqgpZe4eecXGcgAUi4VQrsgw7AgqrW5mNWw2BrIt1U8jiCgUEwXa+Gbmq36HbLLxIFX4UNOL4Kbb3VEAIah3N48GytNWoh8wG8TKRgJuntMsAijHXxMsV332mPmBivxKSkZLLQgAzJwr9T4UOQb7e5GBE997vZ7zQ+i9ACSMHTVZlLVahAZArxUcjuuwjEV7Zec9v1Po3y86dQc+Ymtlk4PwzBg==