python實現傳送和獲取手機簡訊驗證碼

NO IMAGE

首先為大家分享python實現傳送手機簡訊驗證碼後臺方法,供大家參考,具體內容如下

1、生成4位數字驗證碼


def createPhoneCode(session): 
chars=['0','1','2','3','4','5','6','7','8','9'] 
x = random.choice(chars),random.choice(chars),random.choice(chars),random.choice(chars) 
verifyCode = "".join(x) 
session["phoneVerifyCode"] = {"time":int(time.time()), "code":verifyCode} 
return verifyCode 

2、傳送給外部簡訊介面(post方式)


def sendTelMsg(msg, phoneID): 
SendTelMsgUrl="http://www.810086.com.cn/jk.aspx" 
params = {"zh":"china", "mm":"[email protected]",  
"hm":phoneID,"nr":msg,"sms_type":88} 
postData=urllib.urlencode(params) 
req = urllib2.Request(SendTelMsgUrl, postData) 
req.add_header('Content-Type', "application/x-www-form-urlencoded") 
respone = urllib2.urlopen(req) 
res = respone.read() 
return res 

其中session引數是django urls.py 後臺方法 以request.session傳入

3、前端js


$("button[name=getVerifyBt]").bind("click", function(){ 
var self = this; 
var userPhoneEl = $("input[name=phoneNum]"); 
var userPhone = $.trim(userPhoneEl.val()); 
if (userPhone == ""){ 
alert("請填寫號碼!"); 
return; 
} 
$.get("/getPhoneVerifyCode/" userPhone   "/") 
.success(function(msg){ 
console.info(msg); 
var ddEl = $(self).siblings("dd.showTag"); 
if(msg == "ok"){ 
ddEl.find("span").hide(); 
ddEl.find("span[name=success]").show(); 
}else{ 
ddEl.find("span").hide(); 
ddEl.find("span[name=error]").show();           
} 
}) 
.error(function(msg){ 
console.info(msg); 
}); 
var step = 60; 
$(this).attr("disabled", true);  
$(this).html("重新傳送" step); 
var interThread = setInterval(function(){ 
step-=1; 
$(self).html("重新傳送" step); 
if(step <=0){ 
$(self).removeAttr("disabled"); 
$(self).html("獲取驗證碼"); 
clearInterval(interThread); 
} 
}, 1000); 
}); 

下面就為大家介紹python解決介面測試獲取手機驗證碼問題的方法

最近在做介面測試的時候遇到一個問題,就是有個很重要的介面要用到手機簡訊驗證碼,而其他介面都依賴於這個驗證碼,如果沒有簡訊驗證碼就不能進行下面介面的測試,所以為了定時的驗證線上的介面是否正常,而且又不修改程式碼,所以就想到以下解決方案,如果大家有了更好方案可以一起交流分享。

Android在收到簡訊後會傳送一個Action為android.provider.Telephony.SMS_RECEIVED的廣播,所以我們只需要寫個類繼承BroadcastReceiver就可以很容易地監聽到簡訊。


package com.example.getsms;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.text.TextUtils;
import android.util.Log;
public class SmsInterceptReceiver extends BroadcastReceiver {
private final String TAG = "SmsRec";
private static final String SMS_EXTRA_NAME ="pdus";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String message = "";
Log.e(TAG, "free message " );
Bundle extras = intent.getExtras();
if ( extras != null ) {
try {
Object[] smsExtra = (Object[]) extras.get( SMS_EXTRA_NAME );
ContentResolver contentResolver = context.getContentResolver();
Log.e(TAG, "free message " );
for ( int i = 0; i < smsExtra.length;   i ) {
SmsMessage sms = SmsMessage.createFromPdu((byte[]) smsExtra[i]);
String body = sms.getMessageBody().toString();
message  = body;
}
Log.e(TAG, "free message : "   message);
} catch (Exception e) {
// TODO: handle exception
Log.e(TAG, e.getMessage());
}
} 
}
}

AndroidManifest.xml裡註冊一下接收器:


<receiver android:name=".SmsInterceptReceiver">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

新增許可權:


<uses-permission android:name="android.permission.RECEIVE_SMS"/>

python 程式碼,主要通過adb log來獲取apk包所擷取的簡訊資訊,然後進行分析後既可使用。


__author__ = 'guozhenhua'
#coding=utf-8
import urllib2
import os,time
#解析簡訊驗證碼
os.system("adb logcat -c")
cmd="adb logcat -d |findstr E/SmsRec"
#time.sleep(30);
while(1):
smscode= os.popen(cmd).read()
#print smscode
if (smscode!=""):
smscode=smscode.split("驗證碼:")[1].split(",")[0]
break;
print "驗證碼是:" smscode