使用token调用接口

获取token

FUNCTION zfm_po_to_pega_token.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(I_TOKEN) TYPE  CHAR10 DEFAULT 'TOKEN'
*"  EXPORTING
*"     REFERENCE(ES_TOKEN) TYPE  ZPEGA_ES_TOKEN
*"     REFERENCE(E_FLAG) TYPE  CHAR1
*"     REFERENCE(E_MESSAGE) TYPE  STRING
*"----------------------------------------------------------------------

  write_newlog 'I'."redmine #91438 请不要在本行之前增加代码

  CLEAR:ls_zpega_ip_po,lv_url.

  ty_token-app_id = 'FE719C1CE84E493F91146AD88F1A441B'.
  CASE sy-sysid.
    WHEN 'ED2'.
      ty_token-app_secret = '2WLXPmZ71dgYKscmV41E'."dev
    WHEN 'EQ1'.
*      ty_token-app_secret = '2U4nI8QB6B2YMUJHF24S'."qas
      ty_token-app_secret = 'Yu6eVaTS9uEAZ7ndPQM8'."uat
    WHEN 'EP1'.
      ty_token-app_secret = '7IHM7m8i3jMEzvNKUO1l'."prd
  ENDCASE.
  ty_token-grant_type = 'CREDENTIAL'.

  SELECT SINGLE *
    INTO ls_zpega_ip_po
    FROM zpega_ip_po  WHERE funcd = i_token AND sysid = sy-sysid AND zdeactive = ''.
  ty_token-tgt_svc = 'it-pega-envservice'.
  ty_token-user_id = 'SYS10031'.
  ty_token-grant_type = 'CREDENTIAL'.
  lv_json = /ui2/cl_json=>serialize( data = ty_token   pretty_name = /ui2/cl_json=>pretty_mode-low_case ).
  lv_len = strlen( lv_json ).
  lv_url = ls_zpega_ip_po-url.

  TRANSLATE lv_url TO LOWER CASE.
  IF lv_url IS INITIAL.
    e_flag = 'E'.
    e_message = '请维护URL(ZPEGA_IP_PO)'.
    write_newlog 'O'.
    EXIT.
  ENDIF.

  CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url                = lv_url
    IMPORTING
      client             = http_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4.

  http_client->request->set_content_type( content_type = 'application/json; charset=utf-8' ).
  http_client->request->set_method( if_http_entity=>co_request_method_post ).
  http_client->request->set_header_field( name = 'Content-Type' value = 'application/json' ).
  CALL METHOD http_client->request->set_cdata
    EXPORTING
      data   = lv_json
      offset = 0
      length = lv_len.

  http_client->send(  EXCEPTIONS http_communication_failure = 1
                                   http_invalid_state         = 2 ).
  IF sy-subrc NE 0.
    http_client->get_last_error( IMPORTING message = DATA(lv_error_msg) ).
    e_flag = 'E'.
    e_message = lv_error_msg.
    write_newlog 'O'.
    EXIT.
  ENDIF.
  http_client->receive( EXCEPTIONS http_communication_failure = 1
                                   http_invalid_state         = 2
                                   http_processing_failed     = 3 ).
  IF sy-subrc <> 0 .
    http_client->get_last_error( IMPORTING message = DATA(lv_error_msg1)
                                           code = DATA(lv_code) ).
    e_flag = 'E'.
    e_message = lv_error_msg1.
    write_newlog 'O'.
    EXIT.
  ENDIF.

  lv_body = http_client->response->get_cdata( ).
  CALL METHOD /ui2/cl_json=>deserialize
    EXPORTING
      json = lv_body
    CHANGING
      data = es_token.

  IF es_token IS NOT INITIAL.
    e_flag = 'S'.
    e_message = 'TOKEN获取成功'.
  ENDIF.

  IF es_token IS INITIAL AND e_flag IS INITIAL.
    e_flag = 'E'.
    e_message = 'TOKEN获取失败'.
  ENDIF.
  write_newlog 'O'.
ENDFUNCTION.

用token发送数据

FUNCTION zfm_po_to_pega.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IS_TOKEN) TYPE  ZPEGA_ES_TOKEN OPTIONAL
*"     REFERENCE(IM_EKKO) TYPE  EKKO OPTIONAL
*"     VALUE(IM_STATUS) TYPE  CHAR1 OPTIONAL
*"     VALUE(IM_ZPTS) TYPE  ZPTTYPE OPTIONAL
*"  EXPORTING
*"     REFERENCE(E_FLAG) TYPE  CHAR1
*"     REFERENCE(E_MESSAGE) TYPE  STRING
*"----------------------------------------------------------------------
  write_newlog 'I'."redmine #91438 请不要在本行之前增加代码
  DATA: ls_access_token TYPE string.
  DATA: lv_roomnum LIKE adcp-roomnumber.
  DATA: lv_json TYPE string.

  DATA:lr_data TYPE REF TO data.
  DATA:ls_id TYPE string.
  DATA:ls_nextpageid TYPE string.
  DATA:ls_pxobjclass TYPE string.
  DATA:lv_zterm TYPE zpymtinfo2-zterm.
  FIELD-SYMBOLS :<data> TYPE data.
  FIELD-SYMBOLS: <id> TYPE any.
  FIELD-SYMBOLS: <nextpageid> TYPE any.
  FIELD-SYMBOLS: <pxobjclass> TYPE any.
  FIELD-SYMBOLS :<field_value> TYPE data.

*  DATA:BEGIN OF ps_detail_s ,
*         orderlinenumber TYPE string,
*         materialcode    TYPE string,
*       END OF ps_detail_s.

  DATA: BEGIN OF requestinfo_s,
          searchordernumber        TYPE string, "采购订单号
          applicantno              TYPE string, "申请人工号
          ordertype                TYPE string, "订单类型
          companycode              TYPE string, "公司编码
          companydescription       TYPE string, "公司描述
          purchasingorganization   TYPE string, "采购组织
          purchasegroup            TYPE string, "采购组
          purchasegroupdescription TYPE string, "采购组描述
          advancepaymentidentifier TYPE string , "预付款变更标识
        END OF requestinfo_s.

  DATA:BEGIN OF content_s,
         requestinfo LIKE requestinfo_s,
       END OF content_s.


  DATA:BEGIN OF ty_data,
         content LIKE content_s,
       END OF ty_data.

  DATA:ls_data LIKE ty_data.

  ls_access_token = is_token-access_token.

  SELECT SINGLE *
     INTO ls_zpega_ip_po
     FROM zpega_ip_po  WHERE funcd = gs_ebeln AND sysid = sy-sysid AND zdeactive = ''.

  lv_url = ls_zpega_ip_po-url.
  TRANSLATE lv_url TO LOWER CASE.

  CONDENSE lv_url NO-GAPS.

  IF lv_url IS INITIAL.
    e_flag = 'E'.
    e_message = '请维护URL(ZPEGA_IP_PO)'.
    write_newlog 'O'.
    EXIT.
  ENDIF.

  CALL METHOD cl_http_client=>create_by_url
    EXPORTING
      url                = lv_url
    IMPORTING
      client             = http_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4.


*Post
  http_client->request->set_content_type( content_type = 'application/json; charset=utf-8' ).
  http_client->request->set_method( if_http_entity=>co_request_method_post ).
  http_client->request->set_header_field( name = 'X-ENP-AUTH' value = ls_access_token ).

*http body
  SELECT SINGLE roomnumber
    INTO lv_roomnum
    FROM usr21 AS u
    JOIN adcp AS p
      ON u~addrnumber = p~addrnumber
     AND u~persnumber = p~persnumber
   WHERE u~bname = sy-uname.

  ls_data-content-requestinfo-searchordernumber = im_ekko-ebeln."PO
  ls_data-content-requestinfo-applicantno = lv_roomnum."员工变好
  ls_data-content-requestinfo-ordertype = im_ekko-bsart."订单类型
  ls_data-content-requestinfo-companycode = im_ekko-bukrs."公司代码
  ls_data-content-requestinfo-purchasingorganization = im_ekko-ekorg."采购组织
  IF im_ekko-bukrs IS NOT INITIAL.
    SELECT SINGLE butxt INTO ls_data-content-requestinfo-companydescription FROM t001
       WHERE bukrs = im_ekko-bukrs
         AND spras = sy-langu.
  ENDIF.

  ls_data-content-requestinfo-purchasegroup = im_ekko-ekgrp."采购组
  IF im_ekko-ekgrp IS NOT INITIAL.
    SELECT SINGLE eknam INTO ls_data-content-requestinfo-purchasegroupdescription FROM t024
      WHERE ekgrp = im_ekko-ekgrp.
  ENDIF.

  IF im_status = 'M'."修改PO时,预付款变更标识赋值
    IF im_zpts = 'P1'.
      ls_data-content-requestinfo-advancepaymentidentifier = 'Y'.
    ENDIF.
  ENDIF.

  lv_json = /ui2/cl_json=>serialize( data = ls_data   pretty_name = /ui2/cl_json=>pretty_mode-camel_case )."驼峰


  REPLACE 'requestinfo' IN lv_json WITH 'RequestInfo'.
  REPLACE 'searchordernumber' IN lv_json WITH 'SearchOrderNumber'.
  REPLACE 'applicantno' IN lv_json WITH 'ApplicantNo'.
  REPLACE 'ordertype' IN lv_json WITH 'OrderType'.
  REPLACE 'companycode' IN lv_json WITH 'CompanyCode'.
  REPLACE 'companydescription' IN lv_json WITH 'CompanyDescription'.
  REPLACE 'purchasegroup' IN lv_json WITH 'PurchaseGroup'.
  REPLACE 'purchasegroupdescription' IN lv_json WITH 'PurchaseGroupDescription'.
  REPLACE 'purchasingorganization' IN lv_json WITH 'PurchasingOrganization'.
  REPLACE 'advancepaymentidentifier' IN lv_json WITH 'AdvancePaymentIdentifier'.

  lv_len = strlen( lv_json ).

  CALL METHOD http_client->request->set_cdata
    EXPORTING
      data   = lv_json
      offset = 0
      length = lv_len.

  http_client->send(  EXCEPTIONS http_communication_failure = 1
                                   http_invalid_state         = 2 ).
  IF sy-subrc NE 0.
    http_client->get_last_error( IMPORTING message = DATA(lv_error_msg) ).
    e_flag = 'E'.
    e_message = lv_error_msg.
    write_newlog 'O'.
    EXIT.
  ENDIF.

  http_client->receive( EXCEPTIONS http_communication_failure = 1
                                   http_invalid_state         = 2
                                   http_processing_failed     = 3 ).
  IF sy-subrc <> 0 .
    http_client->get_last_error( IMPORTING message = DATA(lv_error_msg1)
                                           code = DATA(lv_code) ).
    e_flag = 'E'.
    e_message = lv_error_msg1.
    write_newlog 'O'.
    EXIT.
  ENDIF.

  lv_body = http_client->response->get_cdata( ).

  CALL METHOD /ui2/cl_json=>deserialize
    EXPORTING
      json = lv_body
    CHANGING
      data = lr_data.

  IF lr_data IS BOUND.
    ASSIGN lr_data->* TO <data>.

    ASSIGN COMPONENT 'ID' OF STRUCTURE <data> TO <id>.
    IF <id> IS ASSIGNED.
      lr_data = <id>.
      ASSIGN lr_data->* TO <field_value>.
      ls_id = <field_value>.
    ENDIF.

    ASSIGN COMPONENT 'NEXTPAGEID' OF STRUCTURE <data> TO <nextpageid>.
    IF <nextpageid> IS ASSIGNED.
      lr_data = <nextpageid>.
      ASSIGN lr_data->* TO <field_value>.
      ls_nextpageid = <field_value>.
    ENDIF.

    ASSIGN COMPONENT 'PXOBJCLASS' OF STRUCTURE <data> TO <pxobjclass>.
    IF <pxobjclass> IS ASSIGNED.
      lr_data = <pxobjclass>.
      ASSIGN lr_data->* TO <field_value>.
      ls_pxobjclass = <field_value>.
    ENDIF.

  ENDIF.

  IF ls_nextpageid = 'Confirm'.
    e_flag = 'S'.
    e_message = 'RIGHT'.
  ELSE.
    e_flag = 'E'.
    e_message = 'WRONG'.
  ENDIF.

  write_newlog 'O'.
ENDFUNCTION.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值