Tell me more ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

I am setting up a POST function using vba that will post text message information to our client as we get it. I work in a call center, so once the call has ending I need to post the data to our client who will automatically send out a text message.

I received an example API from our client written in PHP that uses Curl. I am trying to convert this into vba.

Heres the php code:

`public function SendSingleSMS($user, $pass, $mobile, $originator, $innerMessage,                                 $messageType) 
    {      
        //Send Data
        $fields = array
        (
            'user' => $user,
            'pass' => $pass,
            'func' => 8,
            'mobile' => $mobile,
            'orig' => $originator,
            'msg' => urlencode($innerMessage),
            'msgType' => $messageType
        );

        $response = $this->sendUsingCURL($this->apiURL, $fields);
        return $response;
    }

    //Send information
    private function sendUsingCURL($url, $fields)
    {
        //url-ify the data for the POST
        foreach($fields as $key=>$value) 
            $fields_string .= $key.'='.$value.'&';

        rtrim($fields_string, '&');

        //open connection
        $ch = curl_init();

        //WARNING: this would prevent curl from detecting a 'man in the middle' attack
        curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);

        //set the url, number of POST vars, POST data
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch,CURLOPT_URL, $url);
        curl_setopt($ch,CURLOPT_POST, count($fields));
        curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

        //execute post
        $response = curl_exec($ch);
        $err = curl_error($ch);

        curl_close($ch);

        if($response === false)
            throw new Exception(__CLASS__."::".__FUNCTION__."_".$err);

        return $response;
    }
}`

I have tried everything and done every search. I cant seem to make vba post to this service without an error.

The vba code:

    Dim oHttp As Object
Dim strServer, strUsername, strPassword, strMessage, strMobileNumber, strData  As String
Set oHttp = CreateObject("Microsoft.XMLHTTP")

'-- get message paramaters from screen fields
strUsername = "user"
strPassword = "pass"
strfunc = "8"
strmobile = "0773432111"
strorig = "71111"
strmsg = "HelloWorld"
strmsgtype = "4"
'-- build the HTTP POST dataset
strData = "&user=" + strUsername + "&pass=" + strPassword + "&func=" + strfunc + "&mobile=" + strmobile + "&orig=" + strorig + "&msg=" + strmsg + "&msgType=" + strmsgtype

'-- prepare the HTTP POST message
oHttp.Open "POST", "http://test.com/API/Link.php", False
oHttp.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
oHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
oHttp.setRequestHeader "Accept", "*/*"
oHttp.setRequestHeader "Content-Length", CStr(Len(strData))
oHttp.setRequestHeader "Connection", "close"

'-- send the message
oHttp.send (strData)
        Text0 = strData
'-- get the response
MsgBox (oHttp.responseText)

Is there a way I can get VBA to post data similar to the curl post? Everything I've tried give me wrong login info, or the error:

"Incompatible characters found in message. Please only use GSM compatible characters (Non-standard apostrophes and dashes are commonly to blame)"

share|improve this question
add comment (requires an account with 50 reputation)

Know someone who can answer? Share a link to this question via email, Google+, Twitter, or Facebook.

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Browse other questions tagged or ask your own question.