Way2SMS python code not sending SMS whereas POSTS returns Success

1.3k Views Asked by At

I get Successful status code for my POST requests , Login is working fine , but the SMS is not sent I have gone through all codes on internet, most of them are out-dated, as the site has changed its code.

    import requests as req

    def login_way2sms():
        with req.Session() as mySession:

            url = 'http://www.way2sms.com/re-login'
            home_url = 'http://www.way2sms.com/'
            mobile = [your registered  mobile number]
            password = [your password]
            headers = dict(Referrer="http://www.way2sms.com/")
            before = mySession.get(home_url)
            login_data = dict(mobileNo=mobile, password=password, CatType='', redirectPage='', pid='')
            mySession.post(url, data=login_data, headers=headers)
            after = mySession.get(home_url)
            return mySession

    def send_msg(mysession): #saw sendsms-toss in Inspect under Network tab
            url = 'http://www.way2sms.com/smstoss'
            home_url = 'http://www.way2sms.com/'
            sms_url = 'http://www.way2sms.com/send-sms'
            group_contact_url = 'http://www.way2sms.com/GroupContacts'
            web_msg_count_url = 'http://www.way2sms.com/CheckWebMsgCount'

            headers = dict(Referrer="http://www.way2sms.com/send-sms")
            before = mysession.get(home_url)
            token = '2B7CF7C9D2F14935795B08DAD1729ACF'
            message = 'How to make this work?'
            mobile = '[a valid phone number]'
            ssaction = 'undefined'
            senderid = 'WAYSMS'
            msg_data = dict(Token=token, message=message, toMobile=mobile, ssaction=ssaction, senderId=senderid)

            mysession.post(url, data=msg_data, headers=headers)
            after = mysession.get(home_url)

            mysession.post(group_contact_url, headers=headers)
            group_contacts = mysession.get(sms_url)

            mysession.post(web_msg_count_url, headers=headers)
            web_msg_count = mysession.get(sms_url)

    # last 2 POST requests send after clicking the Send Msg button

    def main():
        login_way2sms() #login using username and password 
        send_msg(currsession) #send sms 


    main()
2

There are 2 best solutions below

0
On

The following method and code worked for me after creating a free account at way2sms (I hope you already did it). Then click on API tab then campaign at left. Then create test API and Secret Key (free with 25 message limit). Then use the following code--

import requests
import json

URL = 'http://www.way2sms.com/api/v1/sendCampaign'

# get request
def sendPostRequest(reqUrl, apiKey, secretKey, useType, phoneNo, senderId, textMessage):
  req_params = {
  'apikey':'your_apiKey',
  'secret':'your_secretKey',
  'usetype':'stage'
  'phone': 'receiving_phone_number',
  'message':'The textMessage I want to send',
  'senderid':'Your Name'
  }
  return requests.post(reqUrl, req_params)

# get response
response = sendPostRequest(URL, 'provided-api-key', 'provided-secret', 'prod/stage', 'valid-to-mobile', 'active-sender-id', 'message-text' )
"""
  Note:-
    you must provide apikey, secretkey, usetype, mobile, senderid and message values
and then requst to api
"""
# print response if you want
print response.text

Just fill the fields and run in python 2.7. Working perfectly on any Indian number.

0
On

I finally got it right , Thanks for replying. We can do it without using the apikey and secret keys as well, Here take a look at this. And init is just another script where constant urls and login is defined, nothing much there.

import requests as req
import init


def login_way2sms(credential):
    with req.Session() as mySession:
        mobile = credential.username
        password = credential.password
        headers = dict(Referrer="http://www.way2sms.com/")
        login_data = dict(mobileNo=mobile, password=password, CatType='', redirectPage='', pid='')
        mySession.post(init.login_url, data=login_data, headers=headers)
        return mySession


def get_token(mysession):
    cookies = mysession.cookies['JSESSIONID']
    token = cookies[4:]
    return token


def send_msg(mysession, token):
    """
        :rtype: req.Session()
    """
    headers = dict(Referrer="http://www.way2sms.com/send-sms")
    message = 'Hi, I am Upgraded a little!!!'
    mobile = '[valid phone]'
    msg_data = dict(Token=token, message=message, toMobile=mobile, ssaction=init.ssaction, senderId=init.senderid)
    mysession.post(init.sms_url, data=msg_data, headers=headers)


def main():
    credential = init.enter_credentials()
    currsession = login_way2sms(credential)
    reply = currsession.get(init.home_url)
    page_content: str = str(reply.content)
    if (reply.status_code == 200) and (page_content.find('send-sms', 10, 200) != -1):
        print("Login Successful!\n")
    else:
        print("Login Failed ,  Try again\n")
        credential = init.enter_credentials()
        currsession = login_way2sms(credential)
    token = get_token(currsession)
    send_msg(currsession, token)


main()