android微信支付集成步骤
2017-06-13 12:02
316 查看
android微信支付集成步骤
微信支付的集成要比集成支付宝支付稍麻烦些,由于微信官方文档有些地方说的比较含糊,容易让人在理解上产生 歧义!下面说说我的集成步骤
说下注意事项:
1.首先确定后台已经申请过微信支付,(这个过程是需要审核的)!我当时在做的时候, ios和后台先调的,半天调试不同,最后后台一看,申请的是公众号支付,因此又重新申请,等了三四天
官方文档 https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
一、需要登录微信支付商户平台,填写应用签名以及包名(文档中写有在哪里找到)
解释:ios的不需要,所以一般后台是不知道这个需要填写!我们需要跟他们要账户密码,根据文档步骤 并把包名和签名填写! 此签名不是我们应用的keystore。需要下载文档中的签名工具!链接在文档中有,下载之后 我们需要填写应用的包名,点击确定。生成一个md5的签名! https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/ sdk/Gen_Signature_Android.apk(下载签名工具的地址) 注意!!! 在网上搜索有的人说,只有正式包才能支付成功。我自己试了试,微信支付debug包也可以支付成功的 关键就在于这个生成的签名!如果用正式包生成的这个md5签名,并填写到商户平台中
二、注册微信
添加依赖 compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+' 注册微信 在Application下注册 final IWXAPI msgApi = WXAPIFactory.createWXAPI(this, null); msgApi.registerApp(微信appId);//跟后台要 是这种样式的:wxecf9a6cc08a8e149 在清单文件中注册 因为是单独唤起的一个界面 所以我这里引用的样式 是透明的。这是我自己加的,自行处理(完全可以不加) <activity android:name=".wxapi.WXPayEntryActivity" android:exported="true" android:theme="@android:style/Theme.Translucent" 4000 android:launchMode="singleTop">
三、回到我们的java代码中处理
这是我们后台返给我的数据格式:格式可参考 { "data": { "orderStr": { "appid": "wxecf9a6cc08a85555", "noncestr": "bKcKEk80bSA999up", "package": "Sign=WXPay", "partnerid": "1461203333", "prepayid": "wx20170609154741756b95857e0147555555", "timestamp": 1496995555 } }, "message": "请求成功", "status": 1 }
1)
现在oncrete里面初始化 跟application下注册的不一样 IWXAPI api = WXAPIFactory.createWXAPI(this,微信appId); /** * 解析微信 * * @param body 后台返回来的数据 */ private void parsJsonWeiXin(String body) { Gson gson = new Gson(); WeiXinBean weiXinBean = gson.fromJson(body, WeiXinBean.class);//根据上面的格式生成的javabean if (weiXinBean.status == 1) { PayReq req = new PayReq(); req.appId = weiXinBean.data.orderStr.appid;//拼接加密 req.partnerId = weiXinBean.data.orderStr.partnerid;//拼接加密 req.prepayId = weiXinBean.data.orderStr.prepayid;//拼接加密 req.nonceStr = weiXinBean.data.orderStr.noncestr;//拼接加密 req.timeStamp = weiXinBean.data.orderStr.timestamp;//拼接加密 req.packageValue = weiXinBean.data.orderStr.packageX;//不需要 //这个签名是需要我们二次加密的 把上面写有拼接加密的 需要用md5加密后生成 req.sign req.sign = signNum(weiXinBean.data.orderStr.partnerid, weiXinBean.data.orderStr.prepayid, weiXinBean.data.orderStr.packageX, weiXinBean.data.orderStr.noncestr, weiXinBean.data.orderStr.timestamp); api.sendReq(req); finish(); } }
2)签名的方法(固定格式,无需做处理!把下面替换成自己的微信key)
/** * 微信 二次签名 拼接是需要首字母按照A-Z的ascii码来拼接(md5加密工具类加密的时候, * 重新从A-Z排序,不按顺序应该也没问题,我没有试!(你可以试试)先还是按我下面这个排序的来拼接吧 * ) */ private String signNum(String partnerId, String prepayId, String packageValue, String nonceStr, String timeStamp) { String stringA = "appid=" + "wxecf9a6cc08a81e49" + "&noncestr=" + nonceStr + "&package=" + packageValue + "&partnerid=" + partnerId + "&prepayid=" + prepayId + "×tamp=" + timeStamp; //微信key 格式这这样的 abcdl562asjlfd452dkadf1asdldfpd4 //微信key的路径:微信商户平台(pay.weixin.qq.com)-->账户设置-->API安全-->密钥设置 String stringSignTemp = stringA + "&key=" + 换成你自己的微信key; return MD5.getMessageDigest(stringSignTemp.getBytes()).toUpperCase(); }
3)Md5 的工具类(copy的微信Demo里面的)
public class MD5 { private MD5() {} public static String getMessageDigest(byte[] buffer) { char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; try { MessageDigest mdTemp = MessageDigest.getInstance("MD5"); mdTemp.update(buffer); byte[] md = mdTemp.digest(); int j = md.length; char str[] = new char[j * 2]; int k = 0; for (int i = 0; i < j; i++) { byte byte0 = md[i]; str[k++] = hexDigits[byte0 >>> 4 & 0xf]; str[k++] = hexDigits[byte0 & 0xf]; } return new String(str); } catch (Exception e) { return null; } } }
4)最后一步
记得我们在清单文件中注册的WXPayEntryActivity了吧!那个就是回调 在WXPayEntryActivity的onResp方法去做一些处理 //在详细看看官方文档怎么处理的 我这里只是简单处理 @Override public void onResp(BaseResp resp) { if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { if (resp.errCode == 0) { ToastUtils.show(WXPayEntryActivity.this,"支付成功"); } else { ToastUtils.show(WXPayEntryActivity.this,"支付失败"); } } }
如理顺利的话就可以成功唤起,支付失败就看看错误码,挨个排除
我说说我遇到的坑
在微信商户里面签名写的是正式包生成的签名,我直接运行,因为是debug包所以支付失败 我又生成正式包,还是失败,最后把微信卸载掉,重装好了。微信是有缓存的 如果日后在商户平台的签名改了(正式包签名换debug,或debug换正式) 首先打成相应的包,其次还需要把微信卸掉重装
相关文章推荐
- Android集成微信支付主要步骤和特别需要注意的问题
- Android 集成微信支付步骤详解
- Android 微信支付 最新 2018 步骤清晰,简单集成
- 微信支付 for android 集成笔记( 集成遇到问题记录)
- android集成微信支付
- Android集成微信支付
- Android 支付宝和微信支付集成
- Unity和android集成操作步骤
- Android 微信支付步骤
- Android 支付宝微信支付集成备忘及吐槽(微信)
- Android 支付宝和微信支付集成
- androidAPP 集成微信支付
- android微信支付移植的步骤
- Android学习之 移动应用<App>微信支付集成小结
- Android微信支付之免jar包集成方式(简单至极)
- Android微信支付步骤简述
- android集成微信支付
- Android 集成微信支付V3
- android集成微信支付(全是坑)
- Android集成微信支付功能