概述
第一次写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);
//要获得当前的Activity
pWebview.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" />
最后
以上就是认真信封为你收集整理的第一次写Hbuilder的三方插件第一次写Hbuilder的三方插件的全部内容,希望文章能够帮你解决第一次写Hbuilder的三方插件第一次写Hbuilder的三方插件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复