华为ePay接入总结 用ContentObserver获取验证码

来源:互联网 发布:管理决策软件 编辑:程序博客网 时间:2024/06/07 17:24

这次接入主要由收发报文和读取短信构成,收发报文中包含了HmacSHA256的验证

简单粘贴一下用到的代码

读取短信

HuaweiSdkHandler handler = new HuaweiSdkHandler(callback,context,number);smsObsever = new SmsObsever(context,handler,smsNumber);context.getContentResolver().registerContentObserver(SMS_INBOX,true,smsObsever);

class SmsObsever extends ContentObserver {    private Context context;    private String number = "+27820097640";    private Handler handler;    private boolean wasCalled = false;    private Uri SMS_INBOX = Uri.parse("content://sms/");    public void getSmsFromPhone() {        ContentResolver cr =context.getContentResolver();        String[] projection = new String[] { "body", "address" };//"_id", "address", "person",, "date", "type        String where = "date >  " + (System.currentTimeMillis() - 2 * 1000);;        Cursor cur = cr.query(SMS_INBOX, projection, where, null, "date desc");        if (null == cur) {            return;        }        if (cur.moveToNext()) {            String body = cur.getString(cur.getColumnIndex("body"));            //这里我是要获取自己短信服务号码中的验证码~~            Pattern pattern = Pattern.compile("[0-9]{6}");            Matcher matcher = pattern.matcher(body);            if (matcher.find()) {                //存储号码  处理回调                Message message = new Message();                Bundle bundle = new Bundle();                bundle.putString("valid",matcher.group(0));                message.setData(bundle);                handler.handleMessage(message);            }        }    }    public SmsObsever(Context context,Handler mhandler,String smsNumber) {        super(mhandler);        number = smsNumber;        handler=mhandler;        this.context=context;    }    @Override    public void onChange(boolean selfChange) {        super.onChange(selfChange);        //提取验证码        if(context==null||number==null)            return;        getSmsFromPhone();    }}

获取校验码

private String getSignture(String Body){    String packetBody = Body;    String key = appKey+"&"+appSecrect+"&"+requestID;    try {        SecretKeySpec signKey = new SecretKeySpec(key.getBytes(),"HmacSHA256");        Mac mac = Mac.getInstance("HmacSHA256");        mac.init(signKey);        return "\""+ Base64.encodeToString(mac.doFinal(packetBody.getBytes()),0).trim()+"\"";    } catch (NoSuchAlgorithmException e) {        e.printStackTrace();    } catch (InvalidKeyException e) {        e.printStackTrace();    }    return null;}

阅读全文
0 0
原创粉丝点击