第一次写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
- 第一次写Hbuilder的三方插件
- ios三方插件
- 第一次写jquery插件(tooltip)
- 第一次写博客--记录一下javascript插件开发的内容
- HBuilder写的第一个表单文件
- Hbuilder中百度地图插件的使用
- 第一次使用HBuilder
- 第一次编写max场景导出插件的经验分享(仅限第一次写max插件的兄弟姐妹)
- react-native 三方插件
- eclipse中另一种有效的安装三方插件方式
- 第一次写的blog
- 第一次写的代码
- 第一次的写博客
- 第一次写的博客
- 第一次写的博客
- hBuilder天蓝主题插件
- Hbuilder 插件安装指南
- 第一次写我的blog
- Java 中的“点点点” 什么意思? Java中 … 三个点是什么意思?
- C++ 控制结构和函数(三)—— 函数II(Functions II)
- C++第6次作业
- LeetCode 95. Unique Binary Search Trees II(唯一二叉搜索树)
- 使用 libevent 和 libev 提高网络应用性能
- 第一次写Hbuilder的三方插件
- ssh相关错误
- Java千百问_07JVM架构(006)_java堆和栈有什么区别
- HTML---网页编程(1)
- 全栈 JavaScript
- Linux中常用的命令
- CSS3-过渡属性,CSS3-动画
- Android TextView 带背景的文字垂直方向显示(ems属性)
- 做一个好的PPT演讲