Sample code for 30+ languages & platforms
Tcl

ABN AMRO OAuth2 Client Credentials Authentication

See more ABN AMRO Examples

Demonstrates how to obtain an access token for an ABN AMRO online API using OAuth2 with the Client Credentials flow.

Chilkat Tcl Downloads

Tcl

load ./chilkat.dll

set success 0

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

# This example sends the following CURL request:

# 	curl -X POST -k https://auth-sandbox.connect.abnamro.com:8443/as/token.oauth2 \
# 	-v \
# 	--cert TPPCertificate.crt \
# 	--key TPPprivateKey.key \
# 	-H 'Cache-Control: no-cache' \
# 	-H 'Content-Type: application/x-www-form-urlencoded' \
# 	-d 'grant_type=client_credentials&client_id=TPP_test&scope=psd2:payment:sepa:write psd2:payment:sepa:read'

set cert [new_CkCert]

set success [CkCert_LoadFromFile $cert "qa_data/certs/TPPCertificate.cer"]
if {$success == 0} then {
    puts [CkCert_lastErrorText $cert]
    delete_CkCert $cert
    exit
}

set bdKey [new_CkBinData]

set success [CkBinData_LoadFile $bdKey "qa_data/certs/TPPprivateKey.key"]

set privKey [new_CkPrivateKey]

set success [CkPrivateKey_LoadAnyFormat $privKey $bdKey "passwordIfNeeded"]
if {$success == 0} then {
    puts [CkPrivateKey_lastErrorText $privKey]
    delete_CkCert $cert
    delete_CkBinData $bdKey
    delete_CkPrivateKey $privKey
    exit
}

set success [CkCert_SetPrivateKey $cert $privKey]
if {$success == 0} then {
    puts [CkCert_lastErrorText $cert]
    delete_CkCert $cert
    delete_CkBinData $bdKey
    delete_CkPrivateKey $privKey
    exit
}

set http [new_CkHttp]

set success [CkHttp_SetSslClientCert $http $cert]
if {$success == 0} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkCert $cert
    delete_CkBinData $bdKey
    delete_CkPrivateKey $privKey
    delete_CkHttp $http
    exit
}

set req [new_CkHttpRequest]

CkHttpRequest_AddParam $req "grant_type" "client_credentials"
CkHttpRequest_AddParam $req "client_id" "TPP_test"
CkHttpRequest_AddParam $req "scope" "psd2:payment:sepa:write psd2:payment:sepa:read"

CkHttpRequest_put_HttpVerb $req "POST"
CkHttpRequest_put_ContentType $req "application/x-www-form-urlencoded"

set resp [new_CkHttpResponse]

set success [CkHttp_HttpReq $http "https://auth-sandbox.connect.abnamro.com:8443/as/token.oauth2" $req $resp]
if {$success == 0} then {
    puts [CkHttp_lastErrorText $http]
    delete_CkCert $cert
    delete_CkBinData $bdKey
    delete_CkPrivateKey $privKey
    delete_CkHttp $http
    delete_CkHttpRequest $req
    delete_CkHttpResponse $resp
    exit
}

if {[CkHttpResponse_get_StatusCode $resp] != 200} then {
    puts [CkHttpResponse_bodyStr $resp]
    delete_CkCert $cert
    delete_CkBinData $bdKey
    delete_CkPrivateKey $privKey
    delete_CkHttp $http
    delete_CkHttpRequest $req
    delete_CkHttpResponse $resp
    exit
}

# Get the JSON result:
# {"access_token":"TIhycwl8rfrZPkXGw15mwldASAAK","token_type":"Bearer","expires_in":7200}
set json [new_CkJsonObject]

CkJsonObject_Load $json [CkHttpResponse_bodyStr $resp]
puts "access_token: [CkJsonObject_stringOf $json access_token]"
puts "token_type: [CkJsonObject_stringOf $json token_type]"
puts "expires_in: [CkJsonObject_stringOf $json expires_in]"

delete_CkCert $cert
delete_CkBinData $bdKey
delete_CkPrivateKey $privKey
delete_CkHttp $http
delete_CkHttpRequest $req
delete_CkHttpResponse $resp
delete_CkJsonObject $json