SAP EPIC 银企直连 付款接口(建设银行)
导语:常规的付款接口中涉及一些配置的东西,相对来说不是很复杂。
标准类:CL_EPIC_EXAMPLE_CN_CCB_PAY
一、配置XML格式
事务码:FBZP
FBZP→国家的支付方式→中国(我这里用了U付款方法)→支付媒介
在支付媒介中写好格式,一半SAP提供得标准得就可以满足,我这里选用的是【EPIC_EXAMPLE_CN_CCB_PAYMENT】,SAP提供的标准的建行的媒介
格式设置→DME引擎
DME引擎也可以通过事务码DMEEX进入
这里提供的结构就是接口XML格式,可以为字段设置默认值等等,本次项目中涉及到了增强字段,但是赋值取不到,启用了退出功能进行赋值,链接【DMEEX 退出功能】中详细讲解,这里不做多解释。
二、创建类
复制SAP标准类CL_EPIC_EXAMPLE_CN_CCB_PAY。
方法:CREATE_REQUEST
METHOD if_epic_bank_comm_impl~create_request.
DATA ls_other_parameters TYPE epic_s_paym_file_bc_parameter.
DATA ls_message LIKE LINE OF et_messages.
DATA lv_message_dummy TYPE string.
DATA lv_user TYPE string.
DATA lv_pwd TYPE string.
DATA ls_request_key_info TYPE ty_req_key_info.
DATA lt_item_keys TYPE epic_t_guid_bseg_keys.
DATA lv_request_sn TYPE string.
DATA lr_transformation_error TYPE REF TO cx_transformation_error.
DATA lv_bank_account_num TYPE string.
DATA lv_company_code_serial_num TYPE string.
DATA lv_company_code TYPE string.
DATA lv_current_request_sn TYPE string.
CHECK iv_bank_comm_segment EQ gc_bank_comm_segment AND iv_bank_comm_step EQ gc_bank_comm_step.
IF is_other_parameters IS SUPPLIED.
ls_other_parameters = is_other_parameters.
ENDIF.
IF ls_other_parameters-payment_file IS INITIAL.
MESSAGE i102(epic_example_cn_impl) INTO lv_message_dummy.
me->append_message( CHANGING ct_messages = et_messages ).
RETURN.
ELSEIF ls_other_parameters-item_keys IS INITIAL.
MESSAGE i101(epic_example_cn_impl) INTO lv_message_dummy.
me->append_message( CHANGING ct_messages = et_messages ).
RETURN.
ELSE.
TRY .
CALL TRANSFORMATION zepic_cn_ccb_pay_mod_2
SOURCE XML ls_other_parameters-payment_file
RESULT request_sn = ls_request_key_info.
me->save_payment_account_num(
iv_request_sn = ls_request_key_info-request_sn
).
me->get_account_info(
EXPORTING
iv_bank_comm_step = iv_bank_comm_step
is_bank_comm_key = is_bank_comm_key
IMPORTING
ev_user = lv_user ev_pwd = lv_pwd
).
lv_company_code = is_bank_comm_key-zbukr.
lv_company_code_serial_num = mo_ccb_service->get_company_code_mapping_num( iv_company_code = lv_company_code ).
IF strlen( ls_request_key_info-request_sn ) EQ 16.
CONCATENATE lv_company_code_serial_num ls_request_key_info-request_sn+4(12) INTO lv_current_request_sn.
ELSE.
lv_current_request_sn = ls_request_key_info-request_sn .
ENDIF.
*通过用户名 获取 CUST ID, 作为替换
DATA: lv_custid TYPE epic_bc_ud-descr.
SELECT SINGLE descr
INTO lv_custid
FROM epic_bc_ud
WHERE commuser = lv_user.
IF sy-subrc NE 0.
*'无法通过USER_ID获取 CUST_ID' TYPE 'E'
* MESSAGE e002(zfi) INTO lv_message_dummy.
* me->append_message( CHANGING ct_messages = et_messages ).
* EXIT.
ENDIF.
CALL TRANSFORMATION zepic_ccb_paymfile_mod
PARAMETERS p1 = lv_user p2 = lv_pwd p3 = lv_current_request_sn p4 = lv_custid
SOURCE XML ls_other_parameters-payment_file
RESULT XML ev_request_message_xstring.
DATA: lv_codepage TYPE string.
SELECT SINGLE encoding
INTO lv_codepage
FROM epic_c_bcs
WHERE zbukr = is_bank_comm_key-zbukr
AND hbkid = is_bank_comm_key-hbkid
AND hktid = is_bank_comm_key-hktid
AND bctyp = is_bank_comm_key-bctyp
.
IF sy-subrc = 0.
ENDIF.
ev_request_message_string = cl_abap_codepage=>convert_from(
source = ev_request_message_xstring
codepage = lv_codepage
).
CONCATENATE 'requestXml=' ev_request_message_string
INTO ev_request_message_string
.
REPLACE '<RECV_UBANKNO/>' IN ev_request_message_string WITH ''.
*** Convert file data to string
** DATA: l_r_converter TYPE REF TO cl_abap_conv_in_ce,
** l_encoding TYPE abap_encoding.
**
** CALL METHOD cl_abap_conv_in_ce=>create
** EXPORTING
** input = ev_request_message_xstring
** encoding = l_encoding
** replacement = '#'
** ignore_cerr = abap_false
** RECEIVING
** conv = l_r_converter.
**
** CALL METHOD l_r_converter->read
** IMPORTING
** data = ev_request_message_string.
MOVE ls_other_parameters-item_keys TO lt_item_keys.
me->set_payment_item_key( lt_item_keys ).
me->set_payment_file_info( ls_other_parameters-regut ).
CATCH cx_transformation_error INTO lr_transformation_error.
MESSAGE e018(epic_example_cn_impl) INTO lv_message_dummy.
me->append_message( CHANGING ct_messages = et_messages ).
RAISE EXCEPTION TYPE cx_epic_bank_comm_impl
EXPORTING
previous = lr_transformation_error
impl_messages = et_messages.
CATCH cx_parameter_invalid_range.
"cl_abap_codepage=>convert_from now throw exception, catch them but no handling for now, later will discuss how to
CATCH cx_sy_codepage_converter_init.
CATCH cx_sy_conversion_codepage.
CATCH cx_parameter_invalid_type.
ENDTRY.
ENDIF.
ENDMETHOD. "if_epic_bank_comm_impl~create_request
以上是发出的内容,SAP提供的TRANSFORM只有一个字段,肯定是不够的,这里根据建行的接口要求,重新写了一个TRANSFORM(事务码STRANS),以前有分享过如何创建,也可以COPY标准的这个进行修改。
TRANSFORM: ZEPIC_CN_CCB_PAY_MOD_2
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" version="1.0">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<REQUEST_SN>
<REQUEST_SN>
<xsl:value-of select="TX/REQUEST_SN"/>
</REQUEST_SN>
</REQUEST_SN>
</asx:values>
</asx:abap>
</xsl:template>
</xsl:transform>
TRANSFORM: ZEPIC_CCB_PAYMFILE_MOD
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" exclude-result-prefixes="asx" version="1.0">
<xsl:param name="P1"/>
<xsl:param name="P2"/>
<xsl:param name="P3"/>
<xsl:param name="P4"/>
<xsl:strip-space elements="*"/>
<xsl:output encoding="gb18030" standalone="yes"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="USER_ID">
<USER_ID>
<xsl:value-of select="$P1"/>
</USER_ID>
</xsl:template>
<xsl:template match="PASSWORD">
<PASSWORD>
<xsl:value-of select="$P2"/>
</PASSWORD>
</xsl:template>
<xsl:template match="REQUEST_SN">
<REQUEST_SN>
<xsl:value-of select="$P3"/>
</REQUEST_SN>
</xsl:template>
<xsl:template match="CUST_ID">
<CUST_ID>
<xsl:value-of select="$P4"/>
</CUST_ID>
</xsl:template>
</xsl:transform>
方法:PROCESS_RESPONSE
METHOD if_epic_bank_comm_impl~process_response.
DATA lv_message_dummy.
DATA ls_message LIKE LINE OF et_messages.
DATA ls_resp_result TYPE ty_resp_mapping_result.
DATA lv_response_message_xstr TYPE xstring.
DATA lr_transformation_error TYPE REF TO cx_transformation_error.
DATA lv_company_code TYPE string .
CHECK iv_bank_comm_segment = gc_bank_comm_segment AND iv_bank_comm_step = gc_bank_comm_step.
IF iv_response_message_string IS INITIAL AND iv_response_message_xstring IS INITIAL.
MESSAGE i005(epic_example_cn_impl) INTO lv_message_dummy.
me->append_message( CHANGING ct_messages = et_messages ).
RETURN.
ENDIF.
TRY.
IF iv_response_message_xstring IS NOT INITIAL.
CALL TRANSFORMATION epic_example_cn_ccb_pay_rsp
SOURCE XML iv_response_message_xstring
RESULT output_data = ls_resp_result.
ELSE.
CALL TRANSFORMATION epic_example_cn_ccb_pay_rsp
SOURCE XML iv_response_message_string
RESULT output_data = ls_resp_result.
ENDIF.
lv_company_code = is_bank_comm_key-zbukr.
me->perform_post_resp_xslt_proc(
EXPORTING
iv_company_code = lv_company_code
is_resp_mapping_result_data = ls_resp_result
CHANGING
ct_messages = et_messages
).
CATCH cx_transformation_error INTO lr_transformation_error.
CLEAR et_messages.
MESSAGE e016(epic_example_cn_impl) INTO lv_message_dummy.
me->append_message( CHANGING ct_messages = et_messages ).
RAISE EXCEPTION TYPE cx_epic_bank_comm_impl
EXPORTING
previous = lr_transformation_error
impl_messages = et_messages.
ENDTRY.
ENDMETHOD. "if_epic_bank_comm_impl~process_response
这里是返回的报文,返回的报文没有什么出入,直接使用SAP标准的,不做修改。
作者:小飞猪猪猪猪猪猪猪–CSDN
post SAP-Garson
原文链接:https://blog.csdn.net/JYH1999/article/details/122278164文章来自于网络,如果侵犯了您的权益,请联系站长删除!