最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

天翼開放平臺免費(fèi)短信驗(yàn)證碼接口使用實(shí)例

 更新時(shí)間:2013年12月18日 15:41:52   作者:  
天翼開放平臺提供了一個(gè)免費(fèi)的短信驗(yàn)證碼API,下面看看使用方法吧,我們用python開發(fā)接口

對于目前眾多的驗(yàn)證碼解決方案來說,這個(gè)API有著中國電信這個(gè)重量級的運(yùn)營商為靠山,應(yīng)該是比較靠譜的了,而且還是免費(fèi)的。詳細(xì)情況請參閱:http://open.189.cn

使用方式:
#定義app_id和app_secret
r = RandCode('app_id', 'app_secret')
#支持平臺的兩種接口方式
#方式1:自定義接收驗(yàn)證碼的回調(diào)URL
r.send('phone number', 'http://yourdomain/rand_code.php', '3')
#方式2:自定義驗(yàn)證碼內(nèi)容
r.send_sms('phone number', 189189)

復(fù)制代碼 代碼如下:

#!/usr/bin/env python
# coding: utf-8

from time import strftime, localtime
import urllib, urllib2, json
import hmac, hashlib

class 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)

相關(guān)文章

  • python實(shí)現(xiàn)周期方波信號頻譜圖

    python實(shí)現(xiàn)周期方波信號頻譜圖

    這篇文章主要介紹了python 周期方波信號頻譜圖,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • python爬蟲用scrapy獲取影片的實(shí)例分析

    python爬蟲用scrapy獲取影片的實(shí)例分析

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python爬蟲用scrapy獲取影片的實(shí)例分析內(nèi)容,有興趣的朋友們可以參考下。
    2020-11-11
  • 擴(kuò)展Django admin的list_filter()可使用范圍方法

    擴(kuò)展Django admin的list_filter()可使用范圍方法

    今天小編就為大家分享一篇擴(kuò)展Django admin的list_filter()可使用范圍方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Pycharm最常用的快捷鍵及使用技巧

    Pycharm最常用的快捷鍵及使用技巧

    這篇文章主要介紹了Pycharm常用的快捷鍵及使用技巧,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python使用gensim計(jì)算文檔相似性

    Python使用gensim計(jì)算文檔相似性

    在文本處理中,比如商品評論挖掘,有時(shí)需要了解每個(gè)評論分別和商品的描述之間的相似度,以此衡量評論的客觀性。那么python 里面有計(jì)算文本相似度的程序包嗎,恭喜你,不僅有,而且很好很強(qiáng)大。下面我們就來體驗(yàn)下gensim的強(qiáng)大
    2016-04-04
  • Python3利用print輸出帶顏色的彩色字體示例代碼

    Python3利用print輸出帶顏色的彩色字體示例代碼

    用Python寫命令行程序的時(shí)候,單一的輸出顏色太單調(diào)了,所以下面這篇文章主要給大家介紹了關(guān)于Python3利用print輸出帶顏色的彩色字體的相關(guān)資料,需要的朋友可以參考下
    2019-04-04
  • Python實(shí)現(xiàn)簡單的ui界面的設(shè)計(jì)步驟(適合小白)

    Python實(shí)現(xiàn)簡單的ui界面的設(shè)計(jì)步驟(適合小白)

    當(dāng)我們書寫一個(gè)python程序時(shí),我們在控制臺輸入信息時(shí),往往多有不便,并且為了更加美觀且直觀的方式輸入控制命令,我們常常設(shè)計(jì)一個(gè)ui界面,這樣就能方便執(zhí)行相關(guān)功能,如計(jì)算器、日歷等界面,本博客是為了給ui設(shè)計(jì)的小白進(jìn)行講解,需要的朋友可以參考下
    2024-07-07
  • Python?sklearn庫三種常用編碼格式實(shí)例

    Python?sklearn庫三種常用編碼格式實(shí)例

    這篇文章主要為大家介紹了Python?sklearn庫三種常用編碼格式實(shí)例展示,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 基于python介紹pytorch保存和恢復(fù)參數(shù)

    基于python介紹pytorch保存和恢復(fù)參數(shù)

    這篇文章主要介紹了基于python介紹pytorch保存和恢復(fù)參數(shù),為了恢復(fù)模型,我們需要用代碼生成框架,然后從磁盤加載參數(shù),下面具體的相關(guān)介紹,需要的小伙伴可以參考一下
    2022-03-03
  • numpy向空的二維數(shù)組中添加元素的方法

    numpy向空的二維數(shù)組中添加元素的方法

    今天小編就為大家分享一篇numpy向空的二維數(shù)組中添加元素的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11

最新評論

和龙市| 盐亭县| 阿鲁科尔沁旗| 衢州市| 长寿区| 祁门县| 建始县| 县级市| 万源市| 安泽县| 西乡县| 南涧| 辉县市| 丹棱县| 藁城市| 大洼县| 自治县| 社会| 普兰县| 台北县| 集安市| 石楼县| 永清县| 平昌县| 喀喇沁旗| 紫金县| 宣城市| 任丘市| 长宁县| 自治县| 札达县| 吴忠市| 文安县| 怀柔区| 崇仁县| 革吉县| 绵竹市| 白城市| 马公市| 托里县| 河曲县|