Google Maps Signature Key berechnen

Möchte man Google Maps Business Dienste nutzen, dann muss jeder URL oder WebService Aufruf mit einer ClientID (Google API Key) signiert werden. Dieses Beispiel soll zeigen, wie man eine solche signierte URL relativ einfach erzeugen kann.

Um eine gültige Google API Signatur zu erzeugen, benötigt man die aufzurufende URL, sowie seinen Google API Key. Ihren Google Maps Key können Sie hier beantragen. Und dann kann es auch schon losgehen.

FUNCTION z_calculate_google_key.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(IV_API_KEY) TYPE  STRING
*"     VALUE(IV_URL) TYPE  STRING
*"  EXPORTING
*"     VALUE(EV_SIGNATURE) TYPE  STRING
*"     VALUE(EV_SIGNED_URL) TYPE  STRING
*"----------------------------------------------------------------------
  DATA: lv_key TYPE string,
        lv_url TYPE string.
  DATA: lv_key_x TYPE xstring,
        lv_url_x TYPE xstring.

  MOVE iv_api_key TO lv_key.
  MOVE iv_url TO lv_url.

  REPLACE ALL OCCURRENCES OF '-' IN lv_key WITH '+'.
  REPLACE ALL OCCURRENCES OF '_' IN lv_key WITH '/'.

* Decoding the Key
  CALL FUNCTION 'SCMS_BASE64_DECODE_STR'
    EXPORTING
      input  = lv_key
    IMPORTING
      output = lv_key_x.

* Converting the URL to xstring
  CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
    EXPORTING
      text   = lv_url
    IMPORTING
      buffer = lv_url_x.

  TRY.
* Calculating the Signature
      CALL METHOD cl_abap_hmac=>calculate_hmac_for_raw
        EXPORTING
          if_algorithm     = 'SHA1'
          if_key           = lv_key_x
          if_data          = lv_url_x
        IMPORTING
          ef_hmacb64string = ev_signature.
    CATCH cx_abap_message_digest .
  ENDTRY.

  REPLACE ALL OCCURRENCES OF '+' IN ev_signature WITH '-'.
  REPLACE ALL OCCURRENCES OF '/' IN ev_signature WITH '_'.

  CONCATENATE 'https://maps.google.com' lv_url '&signature=' ev_signature INTO ev_signed_url.
ENDFUNCTION.

 

Was passiert im Code?

Zuerst werden im API Key die Zeichen – und _ ersetzt. Danach wird der Key von String in BASE64 umgewandelt. Der URL String wird in einen XSTRING konvertiert.

Nach den Konvertierungen wird die Signatur aus Key und URL berechnet. Danach werden alle – und _ Zeichen in der Signatur ersetzt.

Im letzten Schritt wird aus der URL und der Signatur die gesamte aufzurufende URL erstellt.

Posted on 20. März 2015 in ABAP, Blog, Funktionsbaustein

Back to Top