Android微信支付接入(三步完工解析+实例)最新版
#Android微信支付接入(三步完工解析+实例)
最近有朋友问到微信支付的一些开发点,博主就把微信支付接入流程,捋一捋.基本初入安卓的也能根据本文,快速接入微信支付.默认读者具备签名打包知识(如不具备请先查阅相关知识点)
参照博主提供例子,按照下文即可快速简单接入微信支付,给需要的读者直接上的安卓微信支付Demo
文章目录
- 一 公司官方注册微信开放平台账号(准备1)
- 二 登录[微信开放平台](https://open.weixin.qq.com/)创建移动应用(准备2)
- 三 微信支付接入(核心代码)
- 四 服务端坑点
- 五 尾言
- 六 微信返回-1终极处理补充(20190712)
- 补充--调不起微信支付原因
一 公司官方注册微信开放平台账号(准备1)
第一步:开发者第一点注意贵公司是否已申请微信开放平台账号( 微信目前只支持公司账号申请支付,暂不支持个人开发者支付申请),没有则协调沟通申请即可.
二 登录微信开放平台创建移动应用(准备2)
-
:登录账号后,点击上面菜单栏 [管理中心] – [移动应用]–[创建应用],创建应用三个步骤按提示填入(审核后这部分资料可修改),微信会在7天内完成审核.记录好AppID与AppSecret后面使用即可.
注:博主那时负责安卓端与IOS端这块由我申请的,微信支持两端一起创建即可(这里踩过坑,读者注意)
-
安卓需要配置应用签名 :打一个release包,安装即可,在安装一个微信自己的获取签名APK,在该APK输入,刚才release包名,即可生成应用签名,绿色字体既是应用签名 (微信采用安全码策略:包名+应用名+应用签名,只要一个改变,就无法调起微信支付)
微信官方截图如下:
三 微信支付接入(核心代码)
1.在app的build.gradle文件中,添加如下依赖:
dependencies { compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'}
2.在注册清单AndroidManifest.xml中添加权限与WXPayEntryActivity
3.在应用入口MyApplication中将该app注册到微信即可
final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);// 将该app注册到微信 AppID:步骤二申请到的AppIDmsgApi.registerApp(AppID);
4.接受后台返回支付信息:在APP支付发起页面,向后台服务器请求,服务器生成预付单,返回response 成功,获取到prepay_id等相应参数,app再调起微信支付即可
/** * 微信支付 */ public void payToWX() { StringBuilder url = new StringBuilder(); url.append(Constants.GET_WX_PARAMETER); url.append("?Token=" + PreferencesUtils.getString(this, Constants.TOKEN_KEY)); url.append("&orderNum=" + orderBean.getOrderNumber()); HttpUtils.post(url.toString(), new HttpCallBack() { @Override public void onBefore(BaseRequest request) { super.onBefore(request); showDialog("加载中..."); } @Override public void onSuccess(String s, Call call, Response response) { InfoResultData infoResultData = new Gson().fromJson(s, InfoResultData.class); if (infoResultData.getStatus() == 200) { goToWX(infoResultData.getData().toString()); } else { disDialog(); showShort(infoResultData.getMessage()); } } @Override public void onError(Call call, Response response, Exception e) { super.onError(call, response, e); disDialog(); } }); }
5,调起原生微信支付:把服务器返回的,字典封装并提交给微信即可mWxApi.sendReq(req);
/** * 前往微信页面支付 */ public void goToWX(String json) { // 可以在当前页面注册,或者前面APP 注册 IWXAPI mWxApi = WXAPIFactory.createWXAPI(this, Constants.WX_APPID, true); mWxApi.registerApp(Constants.WX_APPID); if (mWxApi != null) { PayReq req = new PayReq(); req.appId = Constants.WX_APPID;// 微信开放平台审核通过的应用APPID try { JSONObject jsonObject = new JSONObject(json); req.partnerId = jsonObject.getString("partnerid");// 微信支付分配的商户号 req.prepayId = jsonObject.getString("prepayid");// 预支付订单号,app服务器调用“统一下单”接口获取 req.nonceStr = jsonObject.getString("noncestr");// 随机字符串,不长于32位咱生成 req.timeStamp = jsonObject.getString("timestamp");// 时间戳 req.packageValue = jsonObject.getString("package");// 固定值Sign=WXPay,服务器返回固定值 req.sign = jsonObject.getString("sign");// 签名 } catch (JSONException e) { e.printStackTrace(); } mWxApi.sendReq(req); } }
6.支付成功:在WXPayEntryActivity页面接收微信支付结果回调,做自己相应需求即可
@Overridepublic void onResp(BaseResp resp) {//0成功 -1支付出错 -2用户取消支付 //-1支付出错可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {//支付成功 TODO }}
注:踩过的坑–测试debug签正式签名即可调起(同release发布版一样操作即可)
四 服务端坑点
-
坑点一:服务端key,是微信商户平台,在账户设置,API安全,秘钥设置里面设置(这个坑我们后台接入时踩过)
-
坑点二: 服务端返回数据需要带上商户IDpartnerId(我们后端估计没仔细看文档)
-
坑点三: 服务端几个相关id,现在都是小写,请仔细看官方文档是id不是Id(最后直接 C + V保证一致)
五 尾言
希望读者看完上面文章即可简单快速接完微信支付,下面是官方链接
微信开放平台
微信开放平台接入指南
微信APP端开发步骤
六 微信返回-1终极处理补充(20190712)
返回-1请注意:你已经确认你包名,签名等所有配置没问题,清空微信缓存,或者卸载微信缓存。
开发时场景:debug 与 release签名切换后,导致返回-1,不能正常调起微信支付。这个是微信的一个bug也是一个坑,个人理解微信把包名和签名存储起来了,后面不更新,导致切换签名后,不能正常覆盖,而最终不能吊起支付。
再说3次:卸载,卸载,卸载 即可
补充–调不起微信支付原因
注意包名,在xx.xxxxxx.xxxx.wxapi包路径中实现WXPayEntryActivity类(包名或类名不一致会造成无法回调)
build文件配置:applicationIdSuffix 包名尾缀
更多相关文章
- Enhanced Security Solution in Android
- Android微信支付彻底扫坑
- Android的签名文件生成两种方法
- android指定签名的apk才能安装
- Android(安卓)微信支付快速集成案例及有效解决返回值-1
- 将VitamioBundle工程作为Android(安卓)Library引入Demo工程使用
- apk反编译和重新打包
- Android(安卓)App支付系列(一):微信支付接入详细指南(附官方支付dem
- Android中微信支付的调用方法