android微信支付插件,Android通过Apk插件调起微信支付

App对接微信调起微信支付需要在微信平台注册,鉴别的标识就是App的包名,所以将申请的包名单独打包成一个Apk文件,则在其他的App调起此Apk的时候同样可以起到调用微信支付的功能。这样就实现了调起微信支付的SDk的功效。操作实现中要将Apk文件安放在assets文件夹的目录下。

当安装好App之后,要将Apk文件保存到本地中

代码实现如下:

private boolean saveApk() throwsException {/**首先默认个文件保存路径*/sdcard=Environment.getExternalStorageState().equalsIgnoreCase(

Environment.MEDIA_MOUNTED)?Environment

.getExternalStorageDirectory().getAbsolutePath()

:"/mnt/sdcard";//保存到SD卡

apk_path = sdcard + "/paytend_wx/saveApk";//保存的确切位置

return copyApkFromAssets(mContext, "paytendSafe2Pay.apk", apk_path);

}private booleancopyApkFromAssets(Context context, String fileName,

String path) {boolean copyIsFinish = false;try{

File foder= newFile(apk_path);if (!foder.exists()) {

foder.mkdirs();

}

File myCaptureFile= newFile(apk_path, fileName);if (!myCaptureFile.exists()) {

myCaptureFile.createNewFile();

}

InputStream is=context.getAssets().open(fileName);

FileOutputStream fos= newFileOutputStream(myCaptureFile);byte[] temp = new byte[1024];int i = 0;while ((i = is.read(temp)) > 0) {

fos.write(temp,0, i);

}

fos.close();

is.close();

copyIsFinish= true;

}catch(IOException e) {return false;

}returncopyIsFinish;

}

如果Apk已经安装保存到指定的位置,接下来就是调起安装界面将Apk安装到手机中

代码如下:

Intent intent = newIntent(Intent.ACTION_VIEW);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setDataAndType(

Uri.parse("file://" +apk_path+ "/paytendSafe2Pay.apk"),"application/vnd.android.package-archive");

mContext.startActivity(intent);

调起微信需要传一些参数,考虑到参数的安全性,最终的参数需要从后台请求获得。

参数的后台请求工作放在了Apk文件中。

在App端调用jar中的方法传参给Apk文件:

public MapCreatParameters() {//由商户生成的订单号

out_trade_no = System.currentTimeMillis() + "";//分配给商户id

merchantId =Constants.MC_ID;//需要支付的金额,单位是分

total_fee = "1";//商户后台支付状态需要调用的接口

sub_mch_notify_url = "http://test.paytend.com:7000/paytend_wxpay_demo/notify.jsp";//商品的名字

body = "青龙偃月刀";//随机字符串

nonce_str = getRandomStr(20);

mMap= new HashMap();

mMap.put("out_trade_no", out_trade_no);

mMap.put("merchantId", merchantId);

mMap.put("total_fee", total_fee);

mMap.put("sub_mch_notify_url", sub_mch_notify_url);

mMap.put("body", body);

mMap.put("nonce_str", nonce_str);//签名

sign =getCommonSign(mMap, Constants.API_KEY);

mMap.put("sign", sign);returnmMap;

}

之所以将调起Apk的方法封装成jar文件,就是保证Apk的包名和Apk支付界面名的不泄露。在Apk中向后台发送请求,获取参数,调起微信支付。

当微信支付成功后,Apk退出(Apk是没有界面的)发送广播通知App交易状况。

总结流程如下:

点击App上的微信支付按钮,App传一些固定参数到jar文件中,jar文件调起支付的Apk,并将这些参数传递给支付的Apk,支付的Apk向后台请求获取支付的参数,将这些参数传递给微信的jar文件,通过微信jar文件中的方法调起微信支付。

当微信支付成功后,Apk退出(Apk是没有界面的)发送广播通知App交易状况。

写的比较乱,权当备忘了。

原文:http://www.cnblogs.com/ruichenblogs/p/6479952.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值