天翼开放平台免费短信验证码接口使用实例_python

对于目前众多的验证码解决方案来说,这个API有着中国电信这个重量级的运营商为靠山,应该是比较靠谱的了,而且还是免费的。详细情况请参阅:http://open.189.cn

使用方式:
#定义app_id和app_secret
r = RandCode('app_id', 'app_secret')
#支持平台的两种接口方式
#方式1:自定义接收验证码的回调URL
r.send('phone number', 'http://yourdomain/rand_code.php', '3')
#方式2:自定义验证码内容
r.send_sms('phone number', 189189)

复制代码 代码如下:

#!/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)

时间: 2024-10-24 17:25:50

天翼开放平台免费短信验证码接口使用实例_python的相关文章

中电信天翼开放平台年度数据:API调用量破亿

[赛迪网讯]1月15日消息,新年伊始,中国电信天翼开放平台对外发布了2012年年度数据,包括全年API接口累计调用量1亿次,注册开发者1200余位, API开放接口200余个,合作应用620余个等内容.具体如下: 1亿 自2012年3月27日发布上线以来,随着业务运营的不断深入,天翼开放平台呈现规模化发展.截止12月31日,2012全年API开放接口的调用总量已经达到1亿,同比月度调用量,平均增幅达160%,仅2012年四季度API接口的调用量已实现7000万的规模,每日API调用峰值达280万

天翼开放平台打通天翼空间app发布渠道

C114讯 7月10日,中国电信 天翼开放平台(open.189.cn)对外发布成功打通天翼空间app发布专享渠道,在天翼空间应用专题频道开设"天翼开放平台应用专区",为来自天翼开放平台的app应用提供展示.下载的分发载体.据悉,凡是通过官网入驻天翼开放平台的app应用,均可获得被推荐或被选 送到该专区的机会,成功覆盖天翼空间1.3亿用户.App发布专区的开放是电信天翼开放平台为了扶持开发者创业积极推出的又一重要举措,自此,天翼开放平台完 成了"能力汇聚.API封装.能力嵌入

天翼开放平台亮相2013移动互联网国际研讨会

由工业和信息化部电信研究院和中国移动通信联合会联合主办,中国电信.中国移动.中国联通共同协办的"2013移动互联网国际研讨会(IMIC)"于12月3日在北京国际会议中心盛大开幕.本次会议以"4G时代的产业创新.融合与共赢"为主题, 围绕LTE产业发展.TD-LTE网络部署.移动互联网及技术演进和业务应用等内容,以发展.融合.商用的角度展开探讨.498)this.w idth=498;' onmousewheel = 'javascript:return big(th

【天翼开放平台】布局互联网金融 助力企业打通支付渠道

日前,中国电信翼支付与银联商务.通联支付和杉德银卡通等三家国内线下 POS 收单企业在北京签署战略合作协议.根据协议,中国电信负责翼支付用户发展, 丰富线下支付资金来源;银联商务.通联支付.杉德银卡通负责线下受理环境建设和维护,拓展消费商圈.通过本次合作,中国电信翼支付的 5000 万个人用户,将可在全国超过 50000 家商户使用翼支付刷手机或输入手机号码完成消费支付.中国电信翼支付与银联商务.通联支付.杉德银卡通一直有着密切的合作.在北京物美超市.西安华润万家.拉萨中石化加油站等场所,都可以

天翼开放平台南京开放日启动翼明星成长计划

要说开放平台,中国电信天翼开放平台算是运营商中成长最快.最与移动互联网接轨.最活跃的开放平台.9月7日,由中国电信天翼开放平台主办.创业影院承办的天翼开放平台Open Day开放日于在南京成功举办,中国电信创新业务事业部合作拓展处处长孙燚,中国电信创新业务事业部陈新兴,天翼开放平台负责人李志猛,搜狐公司移动新媒体中心总经理岳建雄,百阅联合创始人叶逸飞,中华万年历联合创始人朱晓明作为本次活动嘉宾出席活动,吸引了南京当地近二百位开发者.创业者.498)this.w idth=498;' onmous

中国电信天翼开放平台南京开放日免费报名

继北京.上海开放日之后,中国电信 天翼开放平台新一期Open Day活动将于9月7号 下午在南京隆重举办.本次活动以"新能力.新服务,助力开发者快速成长"为主题,活动现场为亲临现场的开发者朋友悉心准备了"模板短信.话费充值.短地址"等运营商优势能力的基础介绍. 使用方法.应用场景演示,希望通过汇聚.提供源源不断的业内领先的优质能力.差异化服务,帮助广大开发者朋友们切实解决产品研发.运营中所遇到的问题.欢迎长三角地区的开发者朋友亲临现场,抓住移动互联网创业的大好契机,

app创业迎商机:天翼开放平台贯通发布渠道

7月10日,中国电信 天翼开放平台对外发布成功打通天翼空间app发布专享渠道,在天翼空间应用专题频道开设"天翼开放平台应用专区",为来自天翼开放平台的app应用提供展示.下载的分发载体.据悉,凡是通过官网入驻天翼开放平台的app应用,均可获得被推荐或被选 送到该专区的机会,成功覆盖天翼空间1.3亿用户.498)this.w idth=498;' onmousewheel = 'javascript:return big(this)' height="405" alt

淘宝网开放平台申请appkey接口指南

我也使用淘宝OpenAPI也大半年了.不过了,由于阿里软件的文档比较的乱,让很多初学者分不清头绪(注:淘宝OpenAPI是开放在阿里软件的一个平台上,是什么服务集群平台吧).当然了,在中国,能够将自己的http://www.aliyun.com/zixun/aggregation/17488.html">服务资源开放出来给第三方使用,特别是淘宝网这种大型商业网站来说,阿里巴巴的这种分享精神和开放的胸怀还是令人佩服的.因此在使用OpenAPI过程中,我们如果211.html">

中国电信天翼开放平台自定义短信验证码和模板短信demo

自定义短信验证码 package com.ffcs.sms; import java.net.URLEncoder; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import java.util.TreeMap; import com.ffcs.util.HttpInvoker; import com.ffcs.util.RandomUtil; import com.google.