From 323aa14a8ba676e046cae6f5b14cd5f92a6af1fc Mon Sep 17 00:00:00 2001 From: Edwin Cheong Date: Tue, 15 Mar 2022 13:54:53 +0800 Subject: [PATCH 1/4] feat: ekyc python call - Added ekyc function call - Added test for ekyc - Changes to model for int call --- examples/configs.py | 6 ++-- examples/ekyc.py | 73 +++++++++++++++++++++++++++++++++++++ examples/signature.py | 2 +- rmsdk/RMSDK.py | 6 ++-- rmsdk/__init__.py | 1 + rmsdk/ekyc.py | 84 +++++++++++++++++++++++++++++++++++++++++++ rmsdk/model.py | 2 +- tests/test_rmsdk.py | 64 +++++++++++++++++++++++++++++++++ 8 files changed, 231 insertions(+), 7 deletions(-) create mode 100644 examples/ekyc.py create mode 100644 rmsdk/ekyc.py create mode 100644 tests/test_rmsdk.py diff --git a/examples/configs.py b/examples/configs.py index 06ce5ad..78e1c49 100644 --- a/examples/configs.py +++ b/examples/configs.py @@ -2,7 +2,7 @@ configs = { "environment": "sandbox", - "clientID": "1546849785427621041", - "clientSecret": "eNdqiTKWjbbJoSIaPEEvzGPBYrXMTWQZ", - "privateKey": "/Users/rexlow/Documents/Work/RevenueMonster/RM-API-SDK-Python/rmsdk/private.pem" + "clientID": "1604635236745642069", + "clientSecret": "TPSTBChxwEduyMdcSAzcxlhZXWNRCEJj", + "privateKey": "/workspace/rm-python-sdk/keys/private_key.pem" } \ No newline at end of file diff --git a/examples/ekyc.py b/examples/ekyc.py new file mode 100644 index 0000000..ef03e3f --- /dev/null +++ b/examples/ekyc.py @@ -0,0 +1,73 @@ +from rmsdk import RMSDK +from configs import configs +from pprint import pprint +import requests +import base64 + +def url_to_b64(img_url: str): + img_byte = requests.get(img_url).content + img_b64 = base64.b64encode(img_byte) + + return img_b64 + +if __name__ == '__main__': + # Init client + client = RMSDK(configs=configs) + accessToken = client.accessToken + + # Recognize mykad + img_url = 'https://buletinonlines.net/v7/wp-content/uploads/2016/06/Mykad-penghuni-puan-Noraini-2.jpg' + mykad_payload = { + "service": "ekyc", + "version": "v1", + "function": "id-mykad", + "request": { + "notify_url": "https://aifire.com/ekyc/result", + "query_image_content": url_to_b64(img_url).decode('utf-8') + } + } + + results = client.ekyc.mykad_recog(accessToken, mykad_payload) + pprint(results) + + # Get mykad results + get_result_mykad_payload = { + "service": "ekyc", + "version": "v1", + "function": "get-mykad-result", + "request": { + 'id': results['item']['requestID'] + # "id": "62201d48a694817dede84b35" + } + } + + mykad_results = client.ekyc.get_mykad_results(accessToken, get_result_mykad_payload) + pprint(mykad_results) + + # Face verification + face_img_url = 'https://media.glamour.com/photos/5a425fd3b6bcee68da9f86f8/master/pass/best-face-oil.png' + img_b64 = url_to_b64(face_img_url) + + face_verification_payload = { + "service": "ekyc", + "version": "v1", + "function": "face-compare", + "request": { + "query_image_content_1": img_b64.decode('utf-8'), + "query_image_content_2": img_b64.decode('utf-8'), + } + } + face_verification_results = client.ekyc.face_verification(accessToken, face_verification_payload) + pprint(face_verification_results) + + # Get EKYC Results + # ekyc_payload = { + # "service": "ekyc", + # "version": "v1", + # "function": "get-ekyc-result", + # "request": { + # "id": "62201d48a694817dede84b35" + # } + # } + # ekyc_results = client.ekyc.get_ekyc_results(accessToken, ekyc_payload) + # pprint(ekyc_results) \ No newline at end of file diff --git a/examples/signature.py b/examples/signature.py index 1dd57d5..ecf55ee 100755 --- a/examples/signature.py +++ b/examples/signature.py @@ -36,6 +36,6 @@ requestUrl="https://sb-open.revenuemonster.my/v3/payment/quickpay", signType="sha256", timestamp="1546931187.8109288", - privateKeyDest="/Users/rexlow/Documents/Work/RevenueMonster/RM-API-SDK-Python/rmsdk/private.pem") + privateKeyDest="/workspace/rm-python-sdk/keys/private_key.pem") print(signature) \ No newline at end of file diff --git a/rmsdk/RMSDK.py b/rmsdk/RMSDK.py index 77d9b82..48e5c39 100755 --- a/rmsdk/RMSDK.py +++ b/rmsdk/RMSDK.py @@ -8,7 +8,8 @@ Store, Transaction, User, - Voucher + Voucher, + EKYC ) class RMSDK(object): @@ -28,4 +29,5 @@ def __init__(self, configs={}): self.store = Store(configs) self.transaction = Transaction(configs) self.user = User(configs) - self.voucher = Voucher(configs) \ No newline at end of file + self.voucher = Voucher(configs) + self.ekyc = EKYC(configs) \ No newline at end of file diff --git a/rmsdk/__init__.py b/rmsdk/__init__.py index 4cd0303..0f21f18 100755 --- a/rmsdk/__init__.py +++ b/rmsdk/__init__.py @@ -18,4 +18,5 @@ from .payment import QuickPay, Transaction from .loyalty import Loyalty from .voucher import Voucher +from .ekyc import EKYC from .RMSDK import RMSDK \ No newline at end of file diff --git a/rmsdk/ekyc.py b/rmsdk/ekyc.py new file mode 100644 index 0000000..45d996e --- /dev/null +++ b/rmsdk/ekyc.py @@ -0,0 +1,84 @@ +from email import header +from aiohttp import request +from funcsigs import signature +from .model import RMSDKModel +from .request import Request + +class EKYC(RMSDKModel): + def __init__(self, configs): + super(EKYC, self).__init__(configs) + self.defaults = { + "environment": configs["environment"], + "privateKey": configs["privateKey"], + } + + for (param, default) in self.defaults.items(): + setattr(self, param, configs.get(param, default)) + + def mykad_recog(self, accessToken: str, data: dict) -> dict: + """ + Function to make http request to get recognize mykad + + args: + accessToken (str): Access Token to allow open api to get user + data (dict): Data to send to open api server + + returns: + dict: dict containing only id for mykad recog result (require to parse the results via different route) + """ + request = Request(environment=self.defaults['environment'], endpoint='v3/service') + headers, data = self.getHeadersAndData(accessToken=accessToken, data=data, requestUrl=request.baseUrl) + + response = request.doPost(headers=headers, data=data) + return response + + def face_verification(self, accessToken: str, data: dict) -> dict: + """ + Funtion to get the similarity between two faces + + args: + accessToken (str): Access Token to allow open api to get user + data (dict): Data to send to open api server + + returns: + dict: Results if the two faces are similar or not + """ + request = Request(environment=self.defaults['environment'], endpoint='v3/service') + headers, data = self.getHeadersAndData(accessToken=accessToken, data=data, requestUrl=request.baseUrl) + + response = request.doPost(headers=headers, data=data) + return response + + def get_mykad_results(self, accessToken: str, data: dict) -> dict: + """ + Function to get the results from the recognized mykad + + args: + accessToken (str): Access Token to allow open api to get user + data (dict): Data to send to open api server + + returns: + dict: Results containing the recognize mykad + """ + request = Request(environment=self.defaults['environment'], endpoint='v3/service') + headers, data = self.getHeadersAndData(accessToken=accessToken, data=data, requestUrl=request.baseUrl) + + response = request.doPost(headers=headers, data=data) + return response + + def get_ekyc_results(self, accessToken: str, data: dict) -> dict: + """ + Function to get the end to end ekyc results + + args: + accessToken (str): Access Token to allow open api to get user + data (dict): Data to send to open api server + + returns: + dict: Results containing the end to end including face and mykad results + """ + request = Request(environment=self.defaults['environment'], endpoint='v3/service') + headers, data = self.getHeadersAndData(accessToken=accessToken, data=data, requestUrl=request.baseUrl) + + response = request.doPost(headers=headers, data=data) + return response \ No newline at end of file diff --git a/rmsdk/model.py b/rmsdk/model.py index 93e0638..0f73da1 100755 --- a/rmsdk/model.py +++ b/rmsdk/model.py @@ -108,7 +108,7 @@ def getSignature(self, data, method, nonceStr, requestUrl, timestamp): def getHeadersAndData(self, accessToken, requestUrl, method="post", data=None): nonceStr = getNonce() - timestamp = str(time()) + timestamp = str(int(time())) if data is not None: data = json.dumps(orderDict(data), separators=(',', ':')) diff --git a/tests/test_rmsdk.py b/tests/test_rmsdk.py new file mode 100644 index 0000000..9f5e138 --- /dev/null +++ b/tests/test_rmsdk.py @@ -0,0 +1,64 @@ +import unittest +import base64 +import requests +from rmsdk import RMSDK +from examples.configs import configs + +class TestEKYCSDK(unittest.TestCase): + def setUp(self): + self.client = RMSDK(configs=configs) + self.accessToken = self.client.accessToken + + def to_b64(self, img_url: str): + img_byte = requests.get(img_url).content + img_b64 = base64.b64encode(img_byte) + + return img_b64 + + def test_mykad_recog(self): + img_url = 'https://buletinonlines.net/v7/wp-content/uploads/2016/06/Mykad-penghuni-puan-Noraini-2.jpg' + img_b64 = self.to_b64(img_url) + + mykad_payload = { + "service": "ekyc", + "version": "v1", + "function": "id-mykad", + "request": { + "notify_url": "https://aifire.com/ekyc/result", + "query_image_content": img_b64.decode('utf-8') + } + } + + results = self.client.ekyc.mykad_recog(self.accessToken, mykad_payload) + get_result_mykad_payload = { + "service": "ekyc", + "version": "v1", + "function": "get-mykad-result", + "request": { + 'id': results['item']['requestID'] + # "id": "62201d48a694817dede84b35" + } + } + + mykad_results = self.client.ekyc.get_mykad_results(self.accessToken, get_result_mykad_payload) + self.assertIn('item', mykad_results) + + def test_face_verfication(self): + face_img_url = 'https://media.glamour.com/photos/5a425fd3b6bcee68da9f86f8/master/pass/best-face-oil.png' + img_b64 = self.to_b64(face_img_url) + + face_verification_payload = { + "service": "ekyc", + "version": "v1", + "function": "face-compare", + "request": { + "query_image_content_1": img_b64.decode('utf-8'), + "query_image_content_2": img_b64.decode('utf-8') + } + } + face_verification_results = self.client.ekyc.face_verification(self.accessToken, face_verification_payload) + self.assertIn('item', face_verification_results) + + self.assertIn('similarity', face_verification_results['item']) + self.assertEqual(face_verification_results['item']['isSamePerson'], True) + \ No newline at end of file From f9a319ccad612c594d6999df2136564ec922c1dc Mon Sep 17 00:00:00 2001 From: Edwin Cheong Date: Tue, 15 Mar 2022 16:12:57 +0800 Subject: [PATCH 2/4] docs: Update docs with ekyc features --- README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/README.md b/README.md index bd75f9e..7102e99 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,11 @@ Before using the SDK, users must obtain credentials from merchant portal first. * [Get Voucher By Code](#get-voucher-by-code) * [Get Voucher Batches](#get-voucher-batches) * [Get Voucher Batches By Batch Key](#get-voucher-batches-by-batch-key) +* EKYC + * [Mykad Recognition](#mykad-recognition) + * [GET Mykad Result](#get-mykad-result) + * [GET EKYC Result](#get-ekyc-result) + * [Face Verification](#face-verification) ## Usage @@ -370,3 +375,24 @@ result = client.voucher.getVoucherBatchByKey(accessToken, batchKey) Detail examples can be found at [examples](https://github.com/RevenueMonster/RM-API-SDK-Python/tree/master/examples). +## EKYC + +### Mykad Recognition +```python +results = client.ekyc.mykad_recog(accessToken, mykad_payload) +``` + +### GET Mykad Result +```python +mykad_results = client.ekyc.get_mykad_results(accessToken, get_result_mykad_payload) +``` + +### GET EKYC Result +```python +ekyc_results = client.ekyc.get_ekyc_results(accessToken, ekyc_payload) +``` + +### Face Verification +```python +face_verification_results = client.ekyc.face_verification(accessToken, face_verification_payload) +``` \ No newline at end of file From aada106eeb4f23e461157b623400127e344ec310 Mon Sep 17 00:00:00 2001 From: Edwin Cheong Date: Tue, 15 Mar 2022 17:08:42 +0800 Subject: [PATCH 3/4] fix: "Update payload to only accept request" - Simplified payload - Update test for new payload --- README.md | 6 ++++++ examples/ekyc.py | 33 ++++++++++----------------------- rmsdk/ekyc.py | 26 +++++++++++++++++++------- tests/test_rmsdk.py | 9 --------- 4 files changed, 35 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 7102e99..816591f 100644 --- a/README.md +++ b/README.md @@ -379,6 +379,12 @@ Detail examples can be found at [examples](https://github.com/RevenueMonster/RM- ### Mykad Recognition ```python +mykad_payload = { + "request": { + "notify_url": "https://aifire.com/ekyc/result", + "query_image_content": img_b64.decode('utf-8') + } +} results = client.ekyc.mykad_recog(accessToken, mykad_payload) ``` diff --git a/examples/ekyc.py b/examples/ekyc.py index ef03e3f..2859da3 100644 --- a/examples/ekyc.py +++ b/examples/ekyc.py @@ -18,9 +18,6 @@ def url_to_b64(img_url: str): # Recognize mykad img_url = 'https://buletinonlines.net/v7/wp-content/uploads/2016/06/Mykad-penghuni-puan-Noraini-2.jpg' mykad_payload = { - "service": "ekyc", - "version": "v1", - "function": "id-mykad", "request": { "notify_url": "https://aifire.com/ekyc/result", "query_image_content": url_to_b64(img_url).decode('utf-8') @@ -32,14 +29,10 @@ def url_to_b64(img_url: str): # Get mykad results get_result_mykad_payload = { - "service": "ekyc", - "version": "v1", - "function": "get-mykad-result", "request": { - 'id': results['item']['requestID'] - # "id": "62201d48a694817dede84b35" - } - } + 'id': results['item']['requestID'] + # "id": "62201d48a694817dede84b35" + }} mykad_results = client.ekyc.get_mykad_results(accessToken, get_result_mykad_payload) pprint(mykad_results) @@ -49,9 +42,6 @@ def url_to_b64(img_url: str): img_b64 = url_to_b64(face_img_url) face_verification_payload = { - "service": "ekyc", - "version": "v1", - "function": "face-compare", "request": { "query_image_content_1": img_b64.decode('utf-8'), "query_image_content_2": img_b64.decode('utf-8'), @@ -61,13 +51,10 @@ def url_to_b64(img_url: str): pprint(face_verification_results) # Get EKYC Results - # ekyc_payload = { - # "service": "ekyc", - # "version": "v1", - # "function": "get-ekyc-result", - # "request": { - # "id": "62201d48a694817dede84b35" - # } - # } - # ekyc_results = client.ekyc.get_ekyc_results(accessToken, ekyc_payload) - # pprint(ekyc_results) \ No newline at end of file + ekyc_payload = { + "request": { + "id": "62201d48a694817dede84b35" + } + } + ekyc_results = client.ekyc.get_ekyc_results(accessToken, ekyc_payload) + pprint(ekyc_results) \ No newline at end of file diff --git a/rmsdk/ekyc.py b/rmsdk/ekyc.py index 45d996e..e05256c 100644 --- a/rmsdk/ekyc.py +++ b/rmsdk/ekyc.py @@ -1,6 +1,4 @@ -from email import header -from aiohttp import request -from funcsigs import signature +import json from .model import RMSDKModel from .request import Request @@ -15,6 +13,11 @@ def __init__(self, configs): for (param, default) in self.defaults.items(): setattr(self, param, configs.get(param, default)) + self.payload = { + "service": "ekyc", + "version": "v1", + } + def mykad_recog(self, accessToken: str, data: dict) -> dict: """ Function to make http request to get recognize mykad @@ -27,8 +30,10 @@ def mykad_recog(self, accessToken: str, data: dict) -> dict: dict: dict containing only id for mykad recog result (require to parse the results via different route) """ request = Request(environment=self.defaults['environment'], endpoint='v3/service') - headers, data = self.getHeadersAndData(accessToken=accessToken, data=data, requestUrl=request.baseUrl) + self.payload['function'] = 'id-mykad' + self.payload.update(data) + headers, data = self.getHeadersAndData(accessToken=accessToken, data=self.payload, requestUrl=request.baseUrl) response = request.doPost(headers=headers, data=data) return response @@ -44,7 +49,10 @@ def face_verification(self, accessToken: str, data: dict) -> dict: dict: Results if the two faces are similar or not """ request = Request(environment=self.defaults['environment'], endpoint='v3/service') - headers, data = self.getHeadersAndData(accessToken=accessToken, data=data, requestUrl=request.baseUrl) + self.payload['function'] = 'face-compare' + self.payload.update(data) + + headers, data = self.getHeadersAndData(accessToken=accessToken, data=self.payload, requestUrl=request.baseUrl) response = request.doPost(headers=headers, data=data) return response @@ -60,8 +68,10 @@ def get_mykad_results(self, accessToken: str, data: dict) -> dict: returns: dict: Results containing the recognize mykad """ + self.payload['function'] = "get-mykad-result" + self.payload.update(data) request = Request(environment=self.defaults['environment'], endpoint='v3/service') - headers, data = self.getHeadersAndData(accessToken=accessToken, data=data, requestUrl=request.baseUrl) + headers, data = self.getHeadersAndData(accessToken=accessToken, data=self.payload, requestUrl=request.baseUrl) response = request.doPost(headers=headers, data=data) return response @@ -78,7 +88,9 @@ def get_ekyc_results(self, accessToken: str, data: dict) -> dict: dict: Results containing the end to end including face and mykad results """ request = Request(environment=self.defaults['environment'], endpoint='v3/service') - headers, data = self.getHeadersAndData(accessToken=accessToken, data=data, requestUrl=request.baseUrl) + self.payload['function'] = "get-ekyc-result" + self.payload.update(data) + headers, data = self.getHeadersAndData(accessToken=accessToken, data=self.payload, requestUrl=request.baseUrl) response = request.doPost(headers=headers, data=data) return response \ No newline at end of file diff --git a/tests/test_rmsdk.py b/tests/test_rmsdk.py index 9f5e138..f8b980d 100644 --- a/tests/test_rmsdk.py +++ b/tests/test_rmsdk.py @@ -20,9 +20,6 @@ def test_mykad_recog(self): img_b64 = self.to_b64(img_url) mykad_payload = { - "service": "ekyc", - "version": "v1", - "function": "id-mykad", "request": { "notify_url": "https://aifire.com/ekyc/result", "query_image_content": img_b64.decode('utf-8') @@ -31,9 +28,6 @@ def test_mykad_recog(self): results = self.client.ekyc.mykad_recog(self.accessToken, mykad_payload) get_result_mykad_payload = { - "service": "ekyc", - "version": "v1", - "function": "get-mykad-result", "request": { 'id': results['item']['requestID'] # "id": "62201d48a694817dede84b35" @@ -48,9 +42,6 @@ def test_face_verfication(self): img_b64 = self.to_b64(face_img_url) face_verification_payload = { - "service": "ekyc", - "version": "v1", - "function": "face-compare", "request": { "query_image_content_1": img_b64.decode('utf-8'), "query_image_content_2": img_b64.decode('utf-8') From 9bd7c73a149af6b0657180a22894fa68914c30b9 Mon Sep 17 00:00:00 2001 From: Edwin Cheong Date: Tue, 15 Mar 2022 17:58:07 +0800 Subject: [PATCH 4/4] fix: Payload update - Fixed payload format --- README.md | 6 ++---- examples/ekyc.py | 28 ++++++++++------------------ rmsdk/ekyc.py | 8 ++++---- tests/test_rmsdk.py | 17 +++++------------ 4 files changed, 21 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 816591f..70e9cd6 100644 --- a/README.md +++ b/README.md @@ -380,10 +380,8 @@ Detail examples can be found at [examples](https://github.com/RevenueMonster/RM- ### Mykad Recognition ```python mykad_payload = { - "request": { - "notify_url": "https://aifire.com/ekyc/result", - "query_image_content": img_b64.decode('utf-8') - } + "notify_url": "https://aifire.com/ekyc/result", + "query_image_content": img_b64.decode('utf-8') } results = client.ekyc.mykad_recog(accessToken, mykad_payload) ``` diff --git a/examples/ekyc.py b/examples/ekyc.py index 2859da3..9b24db3 100644 --- a/examples/ekyc.py +++ b/examples/ekyc.py @@ -18,10 +18,8 @@ def url_to_b64(img_url: str): # Recognize mykad img_url = 'https://buletinonlines.net/v7/wp-content/uploads/2016/06/Mykad-penghuni-puan-Noraini-2.jpg' mykad_payload = { - "request": { - "notify_url": "https://aifire.com/ekyc/result", - "query_image_content": url_to_b64(img_url).decode('utf-8') - } + "notify_url": "https://aifire.com/ekyc/result", + "query_image_content": url_to_b64(img_url).decode('utf-8') } results = client.ekyc.mykad_recog(accessToken, mykad_payload) @@ -29,10 +27,8 @@ def url_to_b64(img_url: str): # Get mykad results get_result_mykad_payload = { - "request": { 'id': results['item']['requestID'] - # "id": "62201d48a694817dede84b35" - }} + } mykad_results = client.ekyc.get_mykad_results(accessToken, get_result_mykad_payload) pprint(mykad_results) @@ -42,19 +38,15 @@ def url_to_b64(img_url: str): img_b64 = url_to_b64(face_img_url) face_verification_payload = { - "request": { - "query_image_content_1": img_b64.decode('utf-8'), - "query_image_content_2": img_b64.decode('utf-8'), - } + "query_image_content_1": img_b64.decode('utf-8'), + "query_image_content_2": img_b64.decode('utf-8'), } face_verification_results = client.ekyc.face_verification(accessToken, face_verification_payload) pprint(face_verification_results) # Get EKYC Results - ekyc_payload = { - "request": { - "id": "62201d48a694817dede84b35" - } - } - ekyc_results = client.ekyc.get_ekyc_results(accessToken, ekyc_payload) - pprint(ekyc_results) \ No newline at end of file + # ekyc_payload = { + # "id": "62201d48a694817dede84b35" + # } + # ekyc_results = client.ekyc.get_ekyc_results(accessToken, ekyc_payload) + # pprint(ekyc_results) \ No newline at end of file diff --git a/rmsdk/ekyc.py b/rmsdk/ekyc.py index e05256c..913f722 100644 --- a/rmsdk/ekyc.py +++ b/rmsdk/ekyc.py @@ -31,7 +31,7 @@ def mykad_recog(self, accessToken: str, data: dict) -> dict: """ request = Request(environment=self.defaults['environment'], endpoint='v3/service') self.payload['function'] = 'id-mykad' - self.payload.update(data) + self.payload['request'] = data headers, data = self.getHeadersAndData(accessToken=accessToken, data=self.payload, requestUrl=request.baseUrl) response = request.doPost(headers=headers, data=data) @@ -50,7 +50,7 @@ def face_verification(self, accessToken: str, data: dict) -> dict: """ request = Request(environment=self.defaults['environment'], endpoint='v3/service') self.payload['function'] = 'face-compare' - self.payload.update(data) + self.payload['request'] = data headers, data = self.getHeadersAndData(accessToken=accessToken, data=self.payload, requestUrl=request.baseUrl) @@ -69,7 +69,7 @@ def get_mykad_results(self, accessToken: str, data: dict) -> dict: dict: Results containing the recognize mykad """ self.payload['function'] = "get-mykad-result" - self.payload.update(data) + self.payload['request'] = data request = Request(environment=self.defaults['environment'], endpoint='v3/service') headers, data = self.getHeadersAndData(accessToken=accessToken, data=self.payload, requestUrl=request.baseUrl) @@ -89,7 +89,7 @@ def get_ekyc_results(self, accessToken: str, data: dict) -> dict: """ request = Request(environment=self.defaults['environment'], endpoint='v3/service') self.payload['function'] = "get-ekyc-result" - self.payload.update(data) + self.payload['request'] = data headers, data = self.getHeadersAndData(accessToken=accessToken, data=self.payload, requestUrl=request.baseUrl) response = request.doPost(headers=headers, data=data) diff --git a/tests/test_rmsdk.py b/tests/test_rmsdk.py index f8b980d..eb584d3 100644 --- a/tests/test_rmsdk.py +++ b/tests/test_rmsdk.py @@ -20,18 +20,13 @@ def test_mykad_recog(self): img_b64 = self.to_b64(img_url) mykad_payload = { - "request": { - "notify_url": "https://aifire.com/ekyc/result", - "query_image_content": img_b64.decode('utf-8') - } + "notify_url": "https://aifire.com/ekyc/result", + "query_image_content": img_b64.decode('utf-8') } results = self.client.ekyc.mykad_recog(self.accessToken, mykad_payload) get_result_mykad_payload = { - "request": { - 'id': results['item']['requestID'] - # "id": "62201d48a694817dede84b35" - } + 'id': results['item']['requestID'] } mykad_results = self.client.ekyc.get_mykad_results(self.accessToken, get_result_mykad_payload) @@ -42,10 +37,8 @@ def test_face_verfication(self): img_b64 = self.to_b64(face_img_url) face_verification_payload = { - "request": { - "query_image_content_1": img_b64.decode('utf-8'), - "query_image_content_2": img_b64.decode('utf-8') - } + "query_image_content_1": img_b64.decode('utf-8'), + "query_image_content_2": img_b64.decode('utf-8') } face_verification_results = self.client.ekyc.face_verification(self.accessToken, face_verification_payload) self.assertIn('item', face_verification_results)