This is the Official Python API client / library for NICEPAY Payment API
Project description
PYTHON - NICEPAY
NICEPAY ❤️ Python! 🐍
This is the Official Python API client / library for NICEPAY Payment API. Visit Nicepay. More information about the product and see documentation at NICEPAY Docs for more technical details.
This library provides access to Nicepay APIs :
SNAPV1 Enterprise & ProfessionalV2 Enterprise & Professional
1. Installation
a. Using PyPi
pip install python-nicepay
b. Manually Installation
You can clone or download our source code, then import PYTHON-NICEPAY manually into your project.
Clone Repository :
git clone https://github.com/nicepay-dev/python-nicepay.git
2. Usage
Get your credentials from Nicepay Dashboard initialize Nicepay config
Notes :
If the merchant uses their own IMID, please configure the data using the setter method (setSnapConfiguration or setNonSnapConfiguration) in constantGeneral. For usage examples, refer to the following files:
- For SNAP:
testAccessToken.py
# Case if merchant using different config with the constant
class testAccessToken:
clientKey = "_CLIENT_KEY_MERCHANT"
clientSecret = "_CLIENT_SECRET_MERCHANT"
privateKey= "_PRIVATE_KEY_MERCHANT"
ConstantsGeneral.setSnapConfiguration(clientKey, clientSecret, privateKey)
- For Non SNAP :
testEwallet.py
# Case if merchant using different config with the constant
class testEwallet:
imid = "_YOUR_I_MID"
merchantKey = "_YOUR_MERCHANT_KEY"
callbackUrl = "_YOUR_CALLBACK_URL"
dbProcessUrl = "_YOUR_DB_PROCESS_URL"
billingPhone = "_YOUR_BILLING_PHONE"
ConstantsGeneral.setNonSnapConfiguration(imid, merchantKey, dbProcessUrl, callbackUrl)
ConstantsGeneral.setBillingPhone(billingPhone)
2.1 Client Initialization and Configuration
Credentials used here are for testing purposes
# Instantiate SNAP API instance
class ConstantsGeneral:
_CLIENT_KEY = "_YOUR_CLIENT_KEY"
_PRIVATE_KEY = "_YOUR_PRIVATE_KEY"
_CLIENT_SECRET = "_YOUR_CLIENT_SECRET"
# Instantiate Non SNAP API instance
class ConstantsGeneral:
_I_MID = "_YOUR_I_MID"
_MERCHANT_KEY = "_YOUR_MERCHANT_KEY"
# Instantiate change if production environment
environment = (builderEnvironment.BuildEnvirontment()
.isCloud(False)
.isProduction(True)
.build())
2.2 Request for Access-Token
# create for access token
class testAccessToken:
bodyCreateToken = (
builderAccessToken.BuildAccessToken()
.setGrantType("client_credentials")
.setAdditionalInfo("")
.build()
)
environment = (builderEnvironment.BuildEnvirontment()
.isCloud(False)
.isProduction(False)
.build())
Result = SnapService.serviceOAUTH(bodyCreateToken.jsonAccessToken())
Here's the sample result
AccessToken : eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJJT05QQVlURVNUIiwiaXNzIjoiTklDRVBBWSIsIm5hbWUiOiJCRElOIiwiZXhwIjoiMjAyNC0xMS0xMlQyMDowNTo1NFoifQ==.RfeDzCn7sk5VT54f8NTPnbbeQvaPmQg6wtLWXIbmBCI=
2.3 Request for Generate VA SNAP (i.e. Virtual Account)
class testVirtualAccount:
bodyCreateToken = (
builderAccessToken.BuildAccessToken()
.setGrantType("client_credentials")
.setAdditionalInfo("")
.build()
)
totalAmount = {"value": "10000.00",
"currency": "IDR"
}
additionalInfo = {"bankCd": "BRIN",
"goodsNm": "Merchant Goods 1",
"dbProcessUrl": "_YOUR_DB_PROCESS_URL",
"vacctValidDt": "",
"vacctValidTm": "",
"msId": "",
"msFee": "",
"msFeeType": "",
"mbFee": "",
"mbFeeType": ""
}
bodyCreateVA = (
builderVirtualAccount.BuildCreateVA()
.setPartnerServiceId("_MANDATORY_")
.setCustomerNo("_MANDATORY_")
.setVirtualAccountNo("")
.setVirtualAccountName("John Doe")
.setTrxId("123")
.setTotalAmount(totalAmount)
.setAdditionalInfo(additionalInfo)
.build()
)
result = SnapService.serviceTransaction(bodyCreateToken.jsonAccessToken(),
bodyCreateVA.jsonVACreate(),
ConstantsEndpoints.createVA())
Here's the sample result
body request :
{"partnerServiceId": "", "customerNo": "", "virtualAccountNo": "", "virtualAccountName": "John Doe", "trxId": "123", "totalAmount": {"value": "10000.00", "currency": "IDR"}, "additionalInfo": {"bankCd": "BRIN", "goodsNm": "Merchant Goods 1", "dbProcessUrl": "https://webhook.site/e15ef201-98a9-428c-85d4-a0c6458939c3", "vacctValidDt": "", "vacctValidTm": "", "msId": "", "msFee": "", "msFeeType": "", "mbFee": "", "mbFeeType": ""}}
body response :
{"responseCode": "2002700", "responseMessage": "Successful", "virtualAccountData": {"partnerServiceId": "", "customerNo": "", "virtualAccountNo": "884800040254370152", "virtualAccountName": "John Doe", "trxId": "123", "totalAmount": {"value": "10000.00", "currency": "IDR"}, "additionalInfo": {"msId": "", "msFee": "", "msFeeType": "", "mbFee": "", "mbFeeType": "", "bankCd": "BRIN", "tXidVA": "IONPAYTEST022024111302543xxxxx", "goodsNm": "Merchant Goods 1", "vacctValidDt": "20241115", "vacctValidTm": "025437"}}}
2.4 Verify Signature
- for Access Token
class Signature:
log = Log()
@staticmethod
def signSHA256RSA(stringToSign, privateKey):
try:
b1 = base64.b64decode(privateKey)
key = RSA.importKey(b1)
signer = PKCS1_v1_5.new(key)
digest = SHA256.new()
digest.update(stringToSign.encode('utf-8'))
signature = signer.sign(digest)
hexSignature = base64.b64encode(signature).decode('utf-8')
return hexSignature
except Exception as e:
Signature.log.error("Error Generate Signature:" + e)
return ''
@staticmethod
def sha256EncodeHex(data):
sha256Hash = hashlib.sha256(data.encode('utf-8')).digest()
hexEncoded = sha256Hash.hex()
return hexEncoded
Notes :
stringToSign = "_YOUR_CLINET_KEY" + "|" + "_TIMESTAMP";
- for Signature Service
@staticmethod
def getSignature(accessToken, requestBody, endpoint, timestamp, staticKey, httpMethod):
Signature.log.info("util - Request Endpoint : " + endpoint)
data = f"{httpMethod}:{endpoint}:{accessToken}:{requestBody}:{timestamp}"
Signature.log.info("util - StringDataToSign: " + data)
try:
sign = Signature.hmacSHA512EncodeBase64(staticKey, data)
Signature.log.info("util - Signature: " + sign)
return sign
except:
Signature.log.error("Error Generate Signature - getSignature")
@staticmethod
def hmacSHA512EncodeBase64(key, data):
hmacObj = hmac.new(key.encode('utf-8'), data.encode('utf-8'), hashlib.sha512)
hmacBytes = hmacObj.digest()
base64Encoded = base64.b64encode(hmacBytes).decode('utf-8')
return base64Encoded
Here’s the result of create VA signature service.
StringDataToSign: POST:/api/v1.0/transfer-va/create-va:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJJT05QQVlURVNUIiwiaXNzIjoiTklDRVBBWSIsIm5hbWUiOiJCRElOIiwiZXhwIjoiMjAyNC0xMS0xMlQyMDowOTozN1oifQ==.4djzd9Z1jZE8AXkFRmCrxm8IMfdhuk2RjFz0LSzRXIY=:d04af00b1f17c7045dde178f377b77e385a3d6cecd22fe6822de1ee053489078:2024-11-13T02:54:37+07:00
Signature: w7BpJ392jzRkAgvWC79Zawvztm/l1D+bxIJWgGq59xih0SuAi4PoTtUAUIXcOLuvZ3pYaSs8Mc1QZxhbVMMBqQ==
You can view a code example in the following UtilSignature.py class.
3. Other Sample
Integration test are available for SNAP :
- Virtual Account Regist Unit Test
- E-Wallet Regist Unit Test
- Qris Regist Unit Test
- Payout Regist Unit Test
Integration test are available for V2 APIs :
4. Get Help
- Nicepay Docs
- Nicepay Dashboard
- SNAP documentation
- V1 Enterprise documentation
- V1 Professional documentation
- V2 Enterprise documentation
- V2 Professional documentation
Can't find answer you looking for? email to integration@nicepay.co.id
Thank you and Have a NICEPAY!
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python-nicepay-1.1.0.tar.gz.
File metadata
- Download URL: python-nicepay-1.1.0.tar.gz
- Upload date:
- Size: 94.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d915c81f6e5ae8793fcbe3e19aeded5a926f75a9639b8f2ba246f0b51dfbd3b
|
|
| MD5 |
c16885ae19a9de50df1bdcb95a4742ef
|
|
| BLAKE2b-256 |
64a20379304b529503acaa3ec9f04f4f97979b2586be4e3707c9cf9ae0086ada
|
File details
Details for the file python_nicepay-1.1.0-py3-none-any.whl.
File metadata
- Download URL: python_nicepay-1.1.0-py3-none-any.whl
- Upload date:
- Size: 173.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c6d7ac0a3a737edd2093eb6ec2492732883c0f2a927f0476eb9f40ec93ff6fd
|
|
| MD5 |
ca278ee59b6145edd4735410feb1ba57
|
|
| BLAKE2b-256 |
c3c78c55b0595efb28e2a24ed9ddce6415284b26e12b500da4d7c4fd105c0e12
|