短信支付
2015-11-13 17:31:02 1 举报
AI智能生成
登录查看完整内容
短信支付SDK
作者其他创作
大纲/内容
短信支付
发送短信
Sms
继承自Pay
包含短信发送的四个状态:没有发送、发送中、发送成功、发送失败;信息内容;发送地址;超时;
run();
调用父类run()方法,setExecuteStatus(EXECUTE_STATUS_RUN);
如果短信内容以\"binmessage:\"开始
裁剪短信content = content.substring(\"binmessage:\
设置sendStatus = SMS_SEND_STATUS_SEND_ING;
启动短信监听new SmsListen().start();
else
自定义广播接收器SendBroadCast
重写onRecive();
短信发送成功
WCConnect.getInstance().PostLog(\t\t\t\t\t\t\"SMSSendStatus:-1\" + Config.splitStringLevel1 + address\t\t\t\t\t\t\t\t+ Config.splitStringLevel1 + content\t\t\t\t\t\t\t\t+ Config.splitStringLevel1 + \"SendOK\");
EPManager.getInstance().payHandler\t\t\t\t\t\t.sendEmptyMessage(Config.CMD_SENDSMSSUCCESS);
if (WCConnect.getInstance().currentPayFeeMessage != null)
timeStamp = (String) WCConnect.getInstance().currentPayFeeMessage\t\t\t\t\t\t\t.get(\"TimeStamp\");
timeStamp = \"未知流水号 AppKey:\"\t\t\t\t\t\t\t+ CommonUtils.getAppKey(context);
短信发送失败
EPManager.getInstance().payHandler\t\t\t\t.sendEmptyMessage(Config.CMD_SENDSMSERROR);
WCConnect.getInstance().PostLog(\t\t\t\t\"SMSSendStatus:\" + getResultCode()\t\t\t\t\t\t+ Config.splitStringLevel1 + address\t\t\t\t\t\t+ Config.splitStringLevel1 + content\t\t\t\t\t\t+ Config.splitStringLevel1\t\t\t\t\t\t+ \
timeStamp = (String) WCConnect.getInstance().currentPayFeeMessage\t\t\t\t\t.get(\"TimeStamp\");
设置短信发送状态为完成,setExecuteStatus(EXECUTE_STATUS_COMPLETE);
注销广播接收器
timeStamp = \"未知流水号 AppKey:\"\t\t\t\t\t+ CommonUtils.getAppKey(context);
设置短信发送状态为完成setExecuteStatus(EXECUTE_STATUS_COMPLETE);
短信监听器SmsListen
extends Thread
重写run();
如果当前花费时间小于超时时间,while(currentTime timeout && isListen)
currentTime++;
如果当前花费时间大于超时时间if (currentTime = timeout)\u00A0
设置发送状态为失败
EPManager.getInstance().payHandler\t\t\t\t\t.sendEmptyMessage(Config.CMD_SENDSMSERROR);\t\t\tWCConnect.getInstance().PostLog(\t\t\t\t\t\"SMSSendStatus:\" + 1\t\t\t\t\t\t\t+ Config.splitStringLevel1 + address\t\t\t\t\t\t\t+ Config.splitStringLevel1 + content\t\t\t\t\t\t\t+ Config.splitStringLevel1\t\t\t\t\t\t\t+ \
timeStamp = (String) WCConnect.getInstance().currentPayFeeMessage\t\t\t\t\t\t.get(\"TimeStamp\");
if end
设置执行状态为完成
timeStamp = \"未知流水号 AppKey:\"\t\t\t\t\t\t+ CommonUtils.getAppKey(context);
else end
支付
Pay
支付基类,包含三种状态,未运行,运行中,运行完成
setExecuteStatus
如果运行完成
CheckLog.log(\"Pay\
如果运行没有完成
PayTask
createTask()
检测任务是否完成,boolean isRunning=false;
新建一个线程 new Thread()
判断Pay的执行状态
执行完成
通过短信支付
发送成功if (sendStatus == Sms.SMS_SEND_STATUS_SEND_OK)\u00A0
发送失败else if (sendStatus == Sms.SMS_SEND_STATUS_SEND_FIAL)\u00A0
通过网页支付
执行正在进行
isRunning=true;
Boolean value = completeTask.getValue();
if(value)
Message msg = Message.obtain();msg.what = Config.CMD_COMPLETE;msg.obj = \"完成支付\";
EPManager.getInstance().payHandler.sendMessage(msg);
failTaskNum++;
if (!isRunning&&completeSet.size() != 0&& failTaskNum == completeSet.size() && !isResult)\u00A0
Message msg = Message.obtain();msg.what = Config.CMD_SENDALLFAIL;msg.obj = \"用户未完成计费流程\";
failTaskNum = 0;
WCConnect
Regedit();初始化计费,请在程序主线程开启时调用
InitConfigSP();初始化链接地址和IP* 此处意思为,从3个IP中选择一个首选IP,避免因为IP地址改变而导致sdk无法连接
创建一个Sharedpreference对象sp_Setting
如果MainIp为空
将MainIp、LinkIp、LinkDomainIp全部添加到sp_Setting中
如果MainIp不为空
新起一个线程,重写run();
如果temp为空
重新赋值
如果LinkDomain不为空
将值赋给MainIp
Config.regUrl = \"http://\" + Config.MainIp\t\t\t\t\t\t\t\t\t+ \"/req.aspx\";
再判断如果temp为空
如果temp不为空
保存信息到sp_Setting中
得到服务器数据解析
regResponse = GetRegResponse(temp);
如果数据初始化失败,也即是没有得到数据
EPManager.getInstance().initPaySuccess(\t\t\t\t\t\t\t\t\tConfig.INIT_FAILED);
return;
得到数据宽高、动态密钥、以及Ip地址
SetConfigSP();更新链接地址
EPManager.getInstance().initPaySuccess(\t\t\t\t\t\t\t\tConfig.INIT_SUCCESS);
如果客户端版本为2 or 3 or 4.不做处理
// 当前版本先不判断,直接用短信取白名单\t\t\t\t\t\t\tString IMSI = HttpXmlData.getIMSI(Config\t\t\t\t\t\t\t\t\t.getInstance().tpContext);
如果IMSI是以460开头的
获取手机号GetPhoneNumber(IMSI);
缓存GW收费界面数据
如果获取的网页内容不为空
CacheResListString = tempStr;
String[] info1 = CacheResListString\t\t\t\t\t\t\t\t.split(Config.splitStringLevel1);
设置一级、二级、三级分隔符
创建Sharedpreference对象sp_Setting
将三大Ip地址全部添加到里面
Config.MainIp = sp_Setting.getString(\"MainIp\
GetFeeInfo();获取资费提示
如果note=null
WCConnect.getInstance().note = \"\";
如果网络不可用
this.handler.sendEmptyMessage(NOTNETWORK);
如果类Config的handler不为空
tempOrderKey = UUID.randomUUID().toString(); // 临时订单号 赋值
WCConnect.getInstance().note = note;
同上
EPManager
implements EPEngine
拦截短信
YLSMSreceiver
继承自BroadcastReceiver
重写onReceive();
判断短信接收监听事件是否与intent.getAction相等,如果相等就执行拦截interceptor.handleSMS(intent);
SmsInterceptor
拦截短信的主体类
regInterceptSms() ;
CheckNewSms() ;
新建一个线程间隔1秒轮询下是否有新短信
通过ContentResolver cr=context.getContentResolver();获取ContentResolver实例,并通过Uri获取ContentProvider提供的数据。
Uri uri = Uri.parse(ContentPort + \"//sms\" + \"\"+ \"/inbox\
新建一个Messaage对象,然后交给类WCConnect里的handler处理。
子主题
handleSMS(Intent intent);
判断是否拦截。先判断是否在二次确认拦截中,如果不在再判断是否在拦截关键字中。
。第一步、获取短信的内容和发件人,短信内容获取:body.append(currentMessage.getDisplayMessageBody()); \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0 \u00A0发件人:number.append(currentMessage.getDisplayOriginatingAddress());
第二步:确认该短信内容是否满足过滤条件:
0 条评论
回复 删除
下一页