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微信支付SDK的更多相关文章

  1. Android微信支付SDK开发笔记

    一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki ...

  2. Android微信支付SDK开发

    一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki ...

  3. 转-Android微信支付

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

  4. 解决Android微信支付官方demo运行失败

    Android微信支付官方demo运行失败,在此简单记录一下解决步骤 1.httpclient错误 官方给的demo是eclipse的,打开之后提示httpclient的错误,我知道在as下解决htt ...

  5. 开源微信支付SDK

    应该有一年多没在博客园上写文章了,毕竟是一个记录自己技术成长的平台,没能将写博客长期坚持下来,说起来也是挺惭愧的.对于自己的近况而言,确实平常加班也比较多,时间会比较压缩,所以到后来博客也基本停止了更 ...

  6. iOS 微信支付SDK与微信友盟分享两者同时集成时,出现的问题与解决之路。

    这两天改版一个旧的APP,要旧貌换新颜,拿到app后进行编译,一直报下面的错误. 报不认识的符号名PayReq错误.奇怪,啥也没动就这样,真不知道给的包是不是本来就是个报错的工程. 不管怎样,要对它修 ...

  7. tp6中使用微信支付sdk

    一.下载微信支付sdk 二.将lib文件夹下的文件复制到目录:extend->WxPay 将example文件夹下的WxPay.Config.php文件也复制到:extend->WxPay ...

  8. 【Unity】微信支付SDK官方安卓Demo的使用问题

    Unity3d使用微信支付是属于APP内发起支付调用的情况,其本质上是在安卓项目上使用微信SDK,安卓项目开发完成后再导入到Unity中作为Unity插件使用,即Unity中C#调用安卓(Java)代 ...

  9. Android微信支付V3版

    由于公司需求做微信APP支付,在集成过程中也遇到各种问题,比如说签名错误,body编码必须为UTF-8.APP端无法调用支付页面直接到支付结果页面.结果为null,code=-1等等: 1.签名错误问 ...

随机推荐

  1. MD5工具类--可以直接拿来用不抛异常的MD5Util

    public class MD5Util { private static String byteArrayToHexString(byte b[]) { StringBuffer resultSb ...

  2. [javase学习笔记]-7.5 构造函数须要注意的几个细节

    这一节我们简单的说几个在使用构造函数时须要注意的细节. 通过我们前几节的学习,我们对构造函数有了一个比較清楚的认识,当我们在创建对象时.我们会调用构造函数.那么我们在定义和调用构造函数时.须要注意哪些 ...

  3. Golang快速入门

    Go语言简介: Golang 简称 Go,是一个开源的编程语言,Go是从2007年末由 Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian L ...

  4. CocoaPods详解之(一)----使用篇

    CocoaPods详解之----使用篇 作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/18737437 一.什么是Coc ...

  5. UIPasteboard粘贴板:UITableView复制粘贴功能(二)

    这篇咱写写一写在UITableView上实用剪贴板的两种方法: 一:在自定义cell里面使用 其实,在cell的使用跟在label里面的用法基本一样 1.放方法: - (BOOL)canBecomeF ...

  6. 【b404】虫食算

    Time Limit: 1 second Memory Limit: 50 MB [问题描述] 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单 ...

  7. struts2_11_实现自己的拦截器的定义

    1)登录界面代码: <% //设置session的值keyword为user request.getSession().setAttribute("user", " ...

  8. 【严肃脸】使用caffe实现色情图片的识别

    前言 前几天看到了雅虎开源了一个色情图片的识别模型新闻,上Github一看,是基于caffe的.试了试,模型效果很赞.Github地址:https://github.com/yahoo/open_ns ...

  9. Cordova各种事件

    原文:Cordova各种事件 Cordova事件 Cordova框架了一组事件,开发者用来对某些运行Cordova应用的设备上的事件作出反应.事件处理的一种情况是硬件相关活动,如电池状态变化或用户按了 ...

  10. express笔记

    1.req.query: 获取get请求的查询字符串对象 2.req.body: 获取post请求的查询字符串对象,要使用该方法需要先使用body-parser中间件,app.use(bodyPars ...