Sample code for 30+ languages & platforms
PureBasic

Paynow.pl -- Make a Payment Request

See more Paynow.pl Examples

Make a payment request POST with prepared message on Paynow payment request endpoint.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkCrypt2.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example assumes the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; Implements the following CURL command:

    ; curl --request POST 'https://api.sandbox.paynow.pl/v1/payments' \
    ; -H 'Content-Type: application/json' \
    ; -H 'Api-Key: c12c386b-650b-43db-9430-d84fc05d9433' \
    ; -H 'Signature: aYPCytCoc+/wFgqHZJjgBCi20omXTn0yzm9LysJgnFo=' \
    ; -H 'Idempotency-Key: 59c6dd26-f905-487b-96c9-fd1d2bd76885' \
    ; --data-raw '{
    ;     "amount": 45671,
    ;     "externalId": "234567898654",
    ;     "description": "Test transaction",
    ;     "buyer": {
    ;         "email": "jan.kowalski@melements.pl"
    ;     }
    ; }'

    ; Use the following online tool to generate HTTP code from a CURL command
    ; Convert a cURL Command to HTTP Source Code

    ; Use this online tool to generate code from sample JSON:
    ; Generate Code to Create JSON

    ; The following JSON is sent in the request body.

    ; {
    ;   "amount": 45671,
    ;   "externalId": "234567898654",
    ;   "description": "Test transaction",
    ;   "buyer": {
    ;     "email": "jan.kowalski@melements.pl"
    ;   }
    ; }

    json.i = CkJsonObject::ckCreate()
    If json.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckUpdateInt(json,"amount",45671)
    CkJsonObject::ckUpdateString(json,"externalId","234567898654")
    CkJsonObject::ckUpdateString(json,"description","Test transaction")
    CkJsonObject::ckUpdateString(json,"buyer.email","jan.kowalski@melements.pl")

    myApiAccessKey.s = "c12c386b-650b-43db-9430-d84fc05d9433"
    mySigCalcKey.s = "b758f20d-ba92-44fa-acca-f57e99787b9d"

    ; Calculate the Signature header.
    crypt.i = CkCrypt2::ckCreate()
    If crypt.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkCrypt2::setCkMacAlgorithm(crypt, "hmac")
    CkCrypt2::setCkEncodingMode(crypt, "base64")
    CkCrypt2::ckSetMacKeyString(crypt,mySigCalcKey)
    CkCrypt2::setCkHashAlgorithm(crypt, "SHA-256")
    messageBody.s = CkJsonObject::ckEmit(json)
    signature.s = CkCrypt2::ckMacStringENC(crypt,messageBody)

    CkHttp::ckSetRequestHeader(http,"Idempotency-Key",CkCrypt2::ckGenerateUuid(crypt))
    CkHttp::ckSetRequestHeader(http,"Api-Key",myApiAccessKey)
    CkHttp::ckSetRequestHeader(http,"Signature",signature)
    CkHttp::ckSetRequestHeader(http,"Content-Type","application/json")
    CkHttp::setCkAccept(http, "application/json")

    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkHttp::ckHttpJson(http,"POST","https://api.sandbox.paynow.pl/v1/payments",json,"application/json",resp)
    If success = 0
        Debug CkHttp::ckLastErrorText(http)
        CkHttp::ckDispose(http)
        CkJsonObject::ckDispose(json)
        CkCrypt2::ckDispose(crypt)
        CkHttpResponse::ckDispose(resp)
        ProcedureReturn
    EndIf

    Debug "Response body:"
    Debug CkHttpResponse::ckBodyStr(resp)

    ; Sample response:
    ; {
    ;   "redirectUrl": "https://paywall.sandbox.paynow.pl/NOA0-YJ9-Y1P-29V?token=eyJraWQiOiJhMD ... L60wk",
    ;   "paymentId": "NOA0-YJ9-Y1P-29V",
    ;   "status": "NEW"
    ; }

    jsonResp.i = CkJsonObject::ckCreate()
    If jsonResp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkJsonObject::ckLoad(jsonResp,CkHttpResponse::ckBodyStr(resp))
    redirectUrl.s = CkJsonObject::ckStringOf(json,"redirectUrl")
    paymentId.s = CkJsonObject::ckStringOf(json,"paymentId")
    status.s = CkJsonObject::ckStringOf(json,"status")


    CkHttp::ckDispose(http)
    CkJsonObject::ckDispose(json)
    CkCrypt2::ckDispose(crypt)
    CkHttpResponse::ckDispose(resp)
    CkJsonObject::ckDispose(jsonResp)


    ProcedureReturn
EndProcedure