I'm having some problems trying to call a credit card https web service from ABAP on 2004s SP11. I'm not using a proxy server and a call from a test https page on my local machine works fine. The page does not require a certificate.
Do I need to do anything in particular to make https work ? I've done calls to http services without any problems. The only difference from a programming perspective as far as I know is the scheme 2 instead of 1, and the server protocol changed to HTTPS.
All is fine until I call method http_client->receive, at that point I get a return code of 1, http_communication_failure.
Your suggestions & contributions will be greatly appreciated.
report zcreditcardtest . data: wf_user type string . data: wf_password type string . data: rlength type i, txlen type string . data: http_client type ref to if_http_client . data: wf_string type string . data: wf_string1 type string . data: wf_proxy type string , wf_port type string . selection-screen: begin of block a with frame . parameters: crcard(16) type c lower case default '4242424242424242', cvn(4) type c lower case default '564', year(2) type c lower case default '07', month(2) type c lower case default '11', amount(10) type c lower case default '100.00', cukey(4) type c lower case default 'AUD', order(10) type c lower case default 'AB1322-refund'. selection-screen skip 1. parameters: user(50) lower case, password(50) lower case , p_proxy(100) lower case default '' , p_port(4) default ''. selection-screen: end of block a . at selection-screen output. loop at screen. if screen-name = 'PASSWORD'. screen-invisible = '1'. modify screen. endif. endloop. start-of-selection . clear wf_string . concatenate 'order.type=capture&customer.username=SOMEUSER' '&customer.password=SOMEPASSWORD' '&customer.merchant=SOMEMERCHANT' '&card.PAN=' crcard '&card.CVN=' cvn '&card.expiryYear=' year '&card.expiryMonth=' month '&order.amount=' amount '&customer.orderNumber=' order '&card.currency=' cukey '&order.ECI=IVR' '&customer.captureOrderNumber=' order '&order.priority=1' '&message.end=null' into wf_string . break-point. clear :rlength , txlen . rlength = strlen( wf_string ) . move: rlength to txlen . clear: wf_proxy, wf_port . move: p_proxy to wf_proxy , p_port to wf_port . call method cl_http_client=>create exporting host = 'api.somewhere.com' service = '80' scheme = '2' "https proxy_host = wf_proxy proxy_service = wf_port importing client = http_client. http_client->propertytype_logon_popup = http_client->co_disabled. wf_user = user . wf_password = password . * proxy server authentication call method http_client->authenticate exporting proxy_authentication = 'X' username = wf_user password = wf_password. call method http_client->request->set_header_field exporting name = '~request_method' value = 'POST'. call method http_client->request->set_header_field exporting name = '~server_protocol' value = 'HTTPS/1.0'. call method http_client->request->set_header_field exporting name = '~request_uri' value = '/post/CreditCardAPIReceiver'. call method http_client->request->set_header_field exporting name = 'Content-Type' value = 'application/x-www-form-urlencoded; charset=UTF-8'. call method http_client->request->set_header_field exporting name = 'Content-Length' value = txlen. call method http_client->request->set_header_field exporting name = 'HOST' value = 'api.somewhere.com:80'. call method http_client->request->set_cdata exporting data = wf_string offset = 0 length = rlength. call method http_client->send exceptions http_communication_failure = 1 http_invalid_state = 2. call method http_client->receive exceptions http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3. if sy-subrc <> 0. message e000(oo) with 'Processing failed !'. endif. clear wf_string1 . wf_string1 = http_client->response->get_cdata( ). * Further Processing of returned values would go here.