第一次写Hbuilder的三方插件

来源:互联网 发布:mac系统ai快捷键 编辑:程序博客网 时间:2024/06/05 09:38

第一次写Hbuilder的三方插件

  团队用Hbuilder写了一个App,Hbuilder的开发效率很好,性能比一般的H5开发框架效率要好很多,而且开发相对比较自由。但是三方插件缺非常的少,除了官方提供的几个插件,其他人开发的插件不能相互的在平台上共享,也不能把自己的功能做成插件分享,这点做的很不好,而且文档不是太理想,缺乏很好的demo,官方的demo。而恰好我们的项目需要一个连连支付的功能,连连支付提供的sdk需要集合成三方控件才能被H5调用,踩过无数坑以后,终于摸索出来了,现在把其中的要点和坑位写出来,以便大家以后可以少踩一些坑。

Android部分

下面是整个代码

public class LianlianPay extends StandardFeature{    public void onStart(Context pContext, Bundle pSavedInstanceState, String[] pRuntimeArgs) {        /**         * 如果需要在应用启动时进行初始化,可以继承这个方法,并在properties.xml文件的service节点添加扩展插件的注册即可触发onStart方法         * */    }    IWebview pWebview;    String CallBackID;    public void plusPay(IWebview pWebview, JSONArray array){        this.pWebview = pWebview;        CallBackID =  array.optString(0);        try {            String partner = array.optString(1);            String orderNum = array.optString(2);            String timeString = array.optString(3);            String notifyUrl = array.optString(4);            String userId = "NewQian100_"+ array.optString(5);            String moneyStr = array.optString(6);            String riskText = array.optString(7);            String signStr = array.optString(8);            String goodName = array.optString(9);            String orderInfo = array.optString(10);            String idNo = array.optString(11);            String accName = array.optString(12);            String bankCard = array.optString(13);            PayOrder order = constructGesturePayOrder(partner,orderNum,timeString,goodName,orderInfo,idNo,accName,notifyUrl,userId,moneyStr,riskText,bankCard,signStr);            MobileSecurePayer msp = new MobileSecurePayer();            String content4Pay = BaseHelper.toJSONString(order);            boolean bRet = msp.pay(content4Pay, mHandler,                    Constants.RQF_PAY, pWebview.getActivity(), false);            if(bRet){                int i=0;            }        }catch (Exception ex){            retMsg(false,-1,"参数传递有误");        }    }    private Handler mHandler = new Handler(){        @Override        public void handleMessage(Message msg) {            String strRet = (String) msg.obj;            switch (msg.what) {                case Constants.RQF_PAY: {                    JSONObject objContent = BaseHelper.string2JSON(strRet);                    String retCode = objContent.optString("ret_code");                    String retMsg = objContent.optString("ret_msg");                    if (Constants.RET_CODE_SUCCESS.equals(retCode)) {                        //成功入金                        retMsg(false,0,"充值成功");                    }else if (Constants.RET_CODE_PROCESS.equals(retCode)) {                        //正在处理中                        retMsg(false,1,"正在处理中");                    }else {                        //失败                        retMsg(false,-1,retMsg);                    }                    break;                }            }            super.handleMessage(msg);        }    };    private PayOrder constructGesturePayOrder(String partner, String orderNum, String timeString,String googdName,String orderInfo,String Idno,String accName,                                              String notifyUrl,String userId,String money,String riskText,String bankCard, String signStr) {        PayOrder order = new PayOrder();        order.setBusi_partner("101001");        order.setNo_order(orderNum);        order.setDt_order(timeString);        order.setName_goods(googdName);        order.setNotify_url(notifyUrl);        // TODO MD5 签名方式        order.setSign_type(PayOrder.SIGN_TYPE_RSA);        // TODO RSA 签名方式        // order.setSign_type(PayOrder.SIGN_TYPE_RSA);        order.setValid_order("10080");        order.setInfo_order(orderInfo);        order.setUser_id(userId);        order.setId_no(Idno);        order.setAcct_name(accName);        order.setMoney_order(money);        order.setFlag_modify("1");        // 风险控制参数        order.setRisk_item(riskText);        order.setOid_partner(partner);        order.setCard_no(bankCard);        order.setSign(signStr);        return order;    }    private void retMsg(boolean isSucc, int code, String msg){        try{            JSONObject retJson = new JSONObject();            retJson.putOpt("IsSucc", isSucc);            retJson.putOpt("Code",code);            retJson.putOpt("Msg",msg);            JSUtil.execCallback(pWebview, CallBackID, retJson, JSUtil.OK, false);        }catch (Exception ex){        }    }}

要点有那么几个

//继承和js通信的父类LianlianPay extends StandardFeature//通过传进来的数字来获得js插入的参数。第一个为返回的消息机制CallBackID =  array.optString(0);//要获得当前的ActivitypWebview.getActivity()

其中的js代码如下

function LianlianPay(partner,orderNum,timeString,notifyUrl,userId,money,riskText,signStr,goodName,orderInfo,idNo,accName,bankCard,successCallback, errorCallback){    var _BARCODE = 'lianlianpay',    B = window.plus.bridge;    var success = typeof successCallback !== 'function' ? null : function(args)    {        successCallback(args);    },    fail = typeof errorCallback !== 'function' ? null : function(code)    {        errorCallback(code);    };    callbackID = B.callbackId(success, fail);    return B.exec(_BARCODE, "plusPay", [callbackID,partner,orderNum,timeString,notifyUrl,userId,money,riskText,signStr,goodName,orderInfo,idNo,accName,bankCard,successCallback, errorCallback ]);}

记得在main.fest中注册这个插件

"lianlianpay":{            "description":"连连支付接口"        }//在data下面的properties下面注册注册的要求是name和在main.fest的名字一样,和js中的名字一样value是类名<feature name="lianlianpay" value="com.dianshi.test.LianlianPay" />
0 0
原创粉丝点击