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

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

代码实现如下:

private boolean saveApk() throws Exception {
/** 首先默认个文件保存路径 */
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 boolean copyApkFromAssets(Context context, String fileName,
String path) {
boolean copyIsFinish = false;
try {
File foder = new File(apk_path);
if (!foder.exists()) {
foder.mkdirs();
}
File myCaptureFile = new File(apk_path, fileName);
if (!myCaptureFile.exists()) {
myCaptureFile.createNewFile();
}
InputStream is = context.getAssets().open(fileName);
FileOutputStream fos = new FileOutputStream(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;
}
return copyIsFinish;
}

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

代码如下:

Intent intent = new Intent(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 Map<String, Object> CreatParameters() {
//由商户生成的订单号
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<String, Object>();
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);
return mMap;
}

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

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

总结流程如下:

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

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

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

Android通过Apk插件调起微信支付的更多相关文章

  1. 怎样调通微信支付及微信发货通知接口(Js API)

    怎样调通微信支付及微信发货通知接口(Js API) 微信支付提供了一个支付測试页面,微信支付正式使用须要測通支付.发货通知接口 .告警接口.维权接口.告警接口.维权接口非常easy.支付界面调通也相对 ...

  2. jsapi 调起微信支付的的踩坑

    问题: 公众微信号调起微信支付的时候,有的时候调起支付成功,有的时候调起支付失败.利用抓包工具抓取数据显示授权和调用后台的微信预支付订单接口都成功并且都返回正确的数据.但是调起支付的时候传入的data ...

  3. 【微信小程序】调起微信支付完整demo

    微信小程序调用微信支付接口 https://blog.csdn.net/u012667477/article/details/80940578

  4. h5调起微信支付

    后台需要进行生成签名获取参数. 前台代码: function onBridgeReady(appId,timeStamp,nonceStr,package1,paySign,signType,open ...

  5. Android实现apk插件方式换肤

    换肤思路: 1.什么时候换肤? xml加载前换肤,如果xml加载后换肤,用户将会看见换肤之前的色彩,用户体验不好. 2.皮肤是什么? 皮肤就是apk,是一个资源包,包含了颜色.图片等. 3.什么样的控 ...

  6. 转-Android微信支付

    http://blog.fangjie.info/android微信支付/ Android微信支付 2014-08-09 一.使用微信官方的提供的demo里的appid等 1.微信接口上手指南:(从“ ...

  7. Android开发 --微信支付开发(转载!)(开发工具:Eclipse)

    Android_APP 微信支付接口开发 日期:2015-10-06 12:47:33 作者: 来源: 人气:3549 1.首先说一下我们在开发微信支付接口的时候遇到最多和最疑惑的问题,那就是明明 a ...

  8. Cordova - 彻底搞定安卓中的微信支付插件!

    Cordova:8.0.0 Android studio:3.2.1 cordova-plugin-adam-wechat : 3.0.6 你看到这个标题肯定会惊讶,一个Cordova的微信支付插件, ...

  9. Android app 第三方微信支付接入详解

    微信支付做了好几遍了,都没有出现什么棘手的问题,下面一一为大家分享一下,欢迎吐槽. 还是老样子,接入微信的支付要第一步添加微信支付官方的包libammsdk.jar 首先就处理略坑的一个问题,app应 ...

随机推荐

  1. Mongodb 导出json 和csv 格式数据

    导出到json: $ mongoexport.exe  -d TestDB -c TestCollection -o  ./test.json 导出到csv: If you want to outpu ...

  2. java系列--并发

    1.Executor 原博:http://blog.csdn.net/linghu_java/article/details/17123057 2.CountDownLatch()方法 浅析Java中 ...

  3. CART分类与回归树 学习笔记

    CART:Classification and regression tree,分类与回归树.(是二叉树) CART是决策树的一种,主要由特征选择,树的生成和剪枝三部分组成.它主要用来处理分类和回归问 ...

  4. div垂直居中(js)

    window.onload = function(){ var xx = document.documentElement.clientHeight; // 470为要垂直居中的div的高度 he = ...

  5. UIButton 之 按下高亮

    设置高亮 [btn setHighlighted:YES]; 设置按下时高亮 [btn setShowsTouchWhenHighlighted:YES];

  6. Borda count

    波达计数法(Borda Count)是较为简单的排序投票法,每个选项借由选票上的排序来取得积分,积分最高者获胜.另一个类似的方法则是位置投票制. 投票人按喜好排列候选者.如果候选者在选票的排第一位,它 ...

  7. iOS 之 二维码生成与扫描(LBXScan)

    参考:https://github.com/MxABC/LBXScan 步骤如下: 1. 下载 通过参考网址进行下载. 2. 导入 导入整个LBXScan文件夹 3. 配置 在pch中加入 #impo ...

  8. github 之 下载历史版本

    1.打开github中要下载的项目 2.点击commits 点击上图中标记的地方,进入下图所示: 3. 选择列表中的某个版本 4. Browse Files 5. 下载 点击上图中的 Download ...

  9. mySQL内存及虚拟内存优化设置

    为了装mysql环境测试,装上后发现启动后mysql占用了很大的虚拟内存,达8百多兆.网上搜索了一下,得到高人指点my.ini.再也没见再详细的了..只好打开my.ini逐行的啃,虽然英文差了点,不过 ...

  10. iOS 之 alcatraz (插件管理器)

    1. 安装 1.1. 打开命令行 curl -fsSL https://raw.githubusercontent.com/supermarin/Alcatraz/deploy/Scripts/ins ...