Examples of using the free SMS verification code interface on the Tianyi open platform

Source: Internet
Author: User
Tags hmac
The Tianyi open platform provides a free SMS verification code API. let's take a look at how to use it. We use the python development interface for many Verification codeFor the solution, this API is backed by China Telecom, a heavyweight operator. it should be reliable and free of charge.

Usage:
# Define app_id and app_secret
R = RandCode ('app _ id', 'app _ secret ')
# Two supported platform interfaces
# Method 1: Customize the callback URL for receiving the verification code
R. send ('phone number', 'http: // yourdomain/rand_code.php ', '3 ')
# Method 2: custom verification code content
R. send_sms ('phone number', 189189)

#!/usr/bin/env python# coding: utf-8from time import strftime, localtimeimport urllib, urllib2, jsonimport hmac, hashlibclass RandCode(object): APP_ID = '' APP_SECRET = '' ACCESS_TOKEN = '' RANDCODE_TOKEN = '' TOKEN_API = 'https://oauth.api.189.cn/emp/oauth2/v2/access_token' RANDCODE_TOKEN_API = 'http://api.189.cn/v2/dm/randcode/token' RANDCODE_SEND_API = 'http://api.189.cn/v2/dm/randcode/send' RANDCODE_SENDSMS_API = 'http://api.189.cn/v2/dm/randcode/sendSms' def __init__(self, app_id='', app_secret='', access_token=''):  self.APP_ID = app_id or RandCode.APP_ID  self.APP_SECRET = app_secret or RandCode.APP_SECRET  self.ACCESS_TOKEN = access_token or self.__fetch_access_token()  self.RANDCODE_TOKEN = self.__fetch_randcode_token() def send(self, phone, url, exp_time):  result = False  if self.ACCESS_TOKEN and self.RANDCODE_TOKEN:   data = {    'app_id':self.APP_ID,    'access_token':self.ACCESS_TOKEN,    'token':self.RANDCODE_TOKEN,    'phone':phone,    'url':url,    'exp_time':exp_time,    'timestamp':self.__date_time(),    }   data = self.__build_request_string(data)   data = self.__data_sign(data)   if data:    res = self.__request_data('post', data, self.RANDCODE_SEND_API)    json_data = json.loads(res)    if json_data['res_code'] == 0:     result = True  return result def send_sms(self, phone, randcode, exp_time='2'):  result = False  if self.ACCESS_TOKEN and self.RANDCODE_TOKEN:   data = {    'app_id':self.APP_ID,    'access_token':self.ACCESS_TOKEN,    'token':self.RANDCODE_TOKEN,    'phone':phone,    'randcode':str(randcode),    'exp_time':exp_time,    'timestamp':self.__date_time(),    }   data = self.__build_request_string(data)   data = self.__data_sign(data)   if data:    res = self.__request_data('post', data, self.RANDCODE_SENDSMS_API)    json_data = json.loads(res)    if json_data['res_code'] == 0:     result = True  return result  pass def __request_data(self, method, data, url):  if isinstance(data, dict):   data = urllib.urlencode(data)  if method == 'post':   req = urllib2.Request(url, data)  else:   url = '%s?%s' % (url, data)   req = urllib2.Request(url)  return urllib2.urlopen(req).read() def __fetch_access_token(self):  access_token = self.ACCESS_TOKEN  if access_token == '':   data = {    'grant_type':'client_credentials',    'app_id':self.APP_ID,    'app_secret':self.APP_SECRET,    }   res = self.__request_data('post', data, self.TOKEN_API)   json_data = json.loads(res)   if json_data['res_code'] == '0':    access_token = json_data['access_token']   else:    raise ValueError(json_data['res_message'])  return access_token def __fetch_randcode_token(self):  result = ''  if self.ACCESS_TOKEN != '':   data = {    'app_id':self.APP_ID,    'access_token':self.ACCESS_TOKEN,    'timestamp':self.__date_time(),    }   data = self.__build_request_string(data)   data = self.__data_sign(data)   if data:    res = self.__request_data('get', data, self.RANDCODE_TOKEN_API)    json_data = json.loads(res)    if json_data['res_code'] == 0:     result = json_data['token']    else:     raise ValueError(json_data['res_message'])  return result def __data_sign(self, data):  result = ''  if data:   if isinstance(data, dict):    data = self.__build_request_string(data)    sign = hmac.new(self.APP_SECRET, urllib.urlencode(data), hashlib.sha1).digest()   elif isinstance(data, unicode):    sign = hmac.new(self.APP_SECRET, data, hashlib.sha1).digest()   if data:    result = "%s&sign=%s" % ( data, urllib.quote(sign.encode('base64').strip()) )  return result def __build_request_string(self, dict):  keys = dict.keys()  keys.sort()  return '&'.join([ key + "=" + dict[key] for key in keys ]) def __date_time(self):  return strftime("%Y-%m-%d %H:%M:%S", localtime()) if __name__  == '__main__': r = RandCode('app_id', 'app_secret') r.send('phone number', 'http://yourdomain/rand_code.php', '3') r.send_sms('phone number', 189189)

Related articles:

SMS verification code interface based on PHP

SMS verification code interface (for multimodal transport communication)

PHP integrated function for sending SMS verification code and voice verification code and usage

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.