LZ-Says:来说俩件事儿:

1.一心只为一人用,一言只为一人说~

2.今天坐公交,末班车,车上只有司机和我,阴森森的,吓死LZ了。。。一路小跑!!!

前言 (浪费一分钟)

今天,不讲这个,也不讲那个,那么讲点啥呢?

嘿嘿嘿,讲讲如何在5分钟之内,快速,成功,集成微信以及支付宝支付吧~~~

查看效果

有图不上,非君子~~

支付思路

微信支付,支付宝支付,其实思路都是一样的,很简单,却很重要,如下:

首先大家需要注意的一点是,APP端不能留有任何关于支付宝以及微信对应的key的关键配置,而需要将这些内容放置在后台进行配置管理,原因是App容易受到反编译以及破解的风险,所以放置在服务器端进行配置管理相对来说比较安全,但这只是相对而言!

  • App端点击支付,调用服务端提供支付接口,传入当前项目所需金额以及数量等内容;

  • 服务端接收到App传入的支付信息,通过加签加密等等将当前接收内容发送微信或者支付宝服务器,接收返回结果;

  • App端接收到的服务端信息,通过官方文档提供如何调起对应客户端进行对应的参数配置;

  • 用户输入完密码,代表订单完成,对应的我们的服务端以及App端都会接收到回调结果,从而代表一切OK~

微信支付(预计4分钟即可)

首先,关注一波官方文档:

1. 微信支付 Android 接入指南;
2. 微信支付API;
3. demo下载地址;
4. 资源下载地址;

啧啧,浪费了一分钟~

为什么LZ说浪费呢?

这里不得不吐槽一波:

没做微信支付前,感觉BAT公司肯定和其他的不一样,至少接入的文档会让人感觉不知不觉,WC,好了~~~

结果,惨的一B,说多都是泪!!!(再次希望官方能够认认真真完善下文档~~~浪费了0.5分钟!!!)

本文省去微信支付前期操作,例如申请账号,配置签名,通过审核等等,这些就不说了。具体原因:

LZ所在公司,这些都是属于保密,当然也可以理解为LZ没有权限操作这些事儿,虽然知道相对应的步骤,但是本着最基本的原则,这里还是不说了,希望以后可以真正接触下,虽说简单,但是还是要亲历亲为下较好`

还有一分钟,我们一起来看,如何快速集成`

添加远程依赖

之前方式,各位可以下载相关SDK,But,现在我们可以直接使用远程依赖库方式直接引用,如下:

compile ‘com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+’

改造Build文件,新增签名配置

关于以下内容,有兴趣的可以查看LZ之前学习从而总结的博文:

Android 技巧之如何一个key玩转第三方服务(微信支付、某某地图)正式以及测试所需不同的key

下面简单附上当前LZ所使用的配置:

    // 签名配置signingConfigs {release {try {storeFile file("./keystore/正式证书.jks")storePassword "storePassword"keyAlias "keyAlias"keyPassword "keyPassword"} catch (ex) {throw new InvalidUserDataException(ex.toString())}}debug {storeFile file("./keystore/测试-debug.jks")}}

有的小伙伴说了,我可以不配置吗?

LZ说,当然可以,只要你不嫌测试麻烦~啦啦啦~

添加必要权限

权限,这个肯定是必须的啦~

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

创建微信指定文件

在项目根目录下创建如下文件:

重点:

必须在项目目录下创建wxapi,以及此目录下的WXPayEntryActivity文件!!!

  • Do not ask me why?

  • 微信就这么屌!!!

而这个WXPayEntryActivity主要做的事儿,便是接收调起微信之后的结果,关于这点,不得不说,微信的坑啊,一起来看看关于返回结果Code码的解释:

就问你无奈不。。。

下面一起来看WXPayEntryActivity这个文件里面主要干了什么吧~


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;/*** author : HLQ* e-mail : 925954424@qq.com* time   : 2018/02/02* desc   : 微信支付* version: 1.0*/
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {private IWXAPI api;private static final String APP_ID = "YOU_APP_ID";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);api = WXAPIFactory.createWXAPI(this, APP_ID);api.handleIntent(getIntent(), this);}@Overrideprotected void onNewIntent(Intent intent) {super.onNewIntent(intent);setIntent(intent);api.handleIntent(intent, this);}@Overridepublic void onReq(BaseReq req) {}/*** 得到支付结果回调*/@Overridepublic void onResp(BaseResp resp) {String result;switch (resp.errCode) {case BaseResp.ErrCode.ERR_OK:result = "支付成功,开始采集吧~";break;case BaseResp.ErrCode.ERR_USER_CANCEL:result = "已取消支付,请完成支付后进行采集~";break;case BaseResp.ErrCode.ERR_AUTH_DENIED:result = "支付中断,请完成支付后进行采集~";break;default:result = "支付异常,请完成支付后进行采集~";break;}UIHelper.getSystemHintToast(result);finish();}
}

AndroidManifest添加配置

很easy,只需要添加如下:

    <!-- 微信支付 --><activity
        android:name=".wxapi.WXPayEntryActivity"android:exported="true"android:launchMode="singleTop" />

新增对应解析实体类


import com.google.gson.annotations.SerializedName;/*** author : HLQ* e-mail : 925954424@qq.com* time   : 2018/02/06* desc   : 微信支付返回结果实体类* version: 1.0*/
public class WXPayResultBean {private String appid;private String noncestr;@SerializedName("package")private String packageX;private String partnerid;private String prepayid;private String sign;private String timestamp;public String getAppid() {return appid;}public void setAppid(String appid) {this.appid = appid;}public String getNoncestr() {return noncestr;}public void setNoncestr(String noncestr) {this.noncestr = noncestr;}public String getPackageX() {return packageX;}public void setPackageX(String packageX) {this.packageX = packageX;}public String getPartnerid() {return partnerid;}public void setPartnerid(String partnerid) {this.partnerid = partnerid;}public String getPrepayid() {return prepayid;}public void setPrepayid(String prepayid) {this.prepayid = prepayid;}public String getSign() {return sign;}public void setSign(String sign) {this.sign = sign;}public String getTimestamp() {return timestamp;}public void setTimestamp(String timestamp) {this.timestamp = timestamp;}
}

在正式下单前需要判断微信是否被安装

相对比微信,支付宝这一点做得很人性化,无论是从接入或者是后期使用,即使用户没有安装支付宝,同样可以通过H5进行支付。

在这里LZ猜想,估计微信团队想着,现在人手必备微信,很少出现这种情况,毕竟社交支付宝有所欠缺吧。

So,我们需要如下兼容下:

    /*** 大部分手机可以直接通过isWXAppInstalled isWXAppSupportAPI判断* 但是还是有一些奇葩机型 在此做个兼容** @return*/private boolean getIsInstallWX() {if (mIWXApi.isWXAppInstalled() && mIWXApi.isWXAppSupportAPI()) {return true;} else {final PackageManager packageManager = selfActivity.getPackageManager();// 获取packagemanagerList<PackageInfo> pinfo = packageManager.getInstalledPackages(0);// 获取所有已安装程序的包信息if (pinfo != null) {for (int i = 0; i < pinfo.size(); i++) {String pn = pinfo.get(i).packageName;if (pn.equalsIgnoreCase("com.tencent.mm")) {return true;}}}return false;}}

正式调用微信下单

首先来看下官方给出正式下单所需要的参数:

而在小主所对应的Activity中,只需要如下操作即可:

    private void getWXPay(final WXPayResultBean wxPayResultBean) {mIWXApi = WXAPIFactory.createWXAPI(this, null);mIWXApi.registerApp(wxPayResultBean.getAppid());if (getIsInstallWX()) {Runnable payRunnable = new Runnable() {@Overridepublic void run() {PayReq request = new PayReq();request.appId = wxPayResultBean.getAppid();request.partnerId = wxPayResultBean.getPartnerid();request.prepayId = wxPayResultBean.getPrepayid();request.packageValue = wxPayResultBean.getPackageX();request.nonceStr = wxPayResultBean.getNoncestr();request.timeStamp = wxPayResultBean.getTimestamp() + "";request.sign = wxPayResultBean.getSign();mIWXApi.sendReq(request);}};Thread payThread = new Thread(payRunnable);payThread.start();} else {UIHelper.getSystemHintToast("请安装微信客户端后使用微信支付,谢谢合作~");return;}}

2018年2月9日09:23:26更新:

这里需要注意的是需要判断是否本地安装了微信,如果没安装,则用户选择微信支付后,界面无反应,所以这里我们判断如果没有安装直接提示用户:请安装微信后进行支付等。

就这么So easy~~~ 微信支付搞定~~~

支付宝快速集成(可能都用不了1分钟)

相对于微信支付,支付宝支付可谓是良心之作,集成简单,方便快捷~

首先,来关注一波文档:

1. 快速接入文档;
2. SDK下载;

下载SDK,添加Lib

将下载好的压缩包解压,拷贝jar包到项目中,添加即可:

添加权限声明

仔细核对~~~

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

AndroidManifest添加配置

    <!-- 支付宝 --><activity
        android:name="com.alipay.sdk.app.H5PayActivity"android:configChanges="orientation|keyboardHidden|navigation|screenSize"android:exported="false"android:screenOrientation="behind"android:windowSoftInputMode="adjustResize|stateHidden" ></activity><activity
        android:name="com.alipay.sdk.app.H5AuthActivity"android:configChanges="orientation|keyboardHidden|navigation"android:exported="false"android:screenOrientation="behind"android:windowSoftInputMode="adjustResize|stateHidden" ></activity>

添加解析实体类


import android.text.TextUtils;import java.util.Map;public class PayResultBean {private String resultStatus;private String result;private String memo;public PayResultBean(Map<String, String> rawResult) {if (rawResult == null) {return;}for (String key : rawResult.keySet()) {if (TextUtils.equals(key, "resultStatus")) {resultStatus = rawResult.get(key);} else if (TextUtils.equals(key, "result")) {result = rawResult.get(key);} else if (TextUtils.equals(key, "memo")) {memo = rawResult.get(key);}}}@Overridepublic String toString() {return "resultStatus={" + resultStatus + "};memo={" + memo+ "};result={" + result + "}";}/*** @return the resultStatus*/public String getResultStatus() {return resultStatus;}/*** @return the memo*/public String getMemo() {return memo;}/*** @return the result*/public String getResult() {return result;}
}

调起支付宝支付

    private void getAliPay(final String payInfo) {Runnable payRunnable = new Runnable() {@Overridepublic void run() {PayTask alipay = new PayTask(selfActivity);Map<String, String> result = alipay.payV2(payInfo, false);Message msg = new Message();msg.what = SDK_PAY_FLAG;msg.obj = result;mHandler.sendMessage(msg);}};// 必须异步调用Thread payThread = new Thread(payRunnable);payThread.start();}private Handler mHandler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message msg) {switch (msg.what) {case SDK_PAY_FLAG: {@SuppressWarnings("unchecked")PayResultBean payResult = new PayResultBean((Map<String, String>) msg.obj);/**对于支付结果,请商户依赖服务端的异步通知结果。同步通知结果,仅作为支付结束的通知。*/String resultInfo = payResult.getResult(); // 同步返回需要验证的信息String resultStatus = payResult.getResultStatus();// 判断resultStatus 为9000则代表支付成功if (TextUtils.equals(resultStatus, "9000")) {// 该笔订单是否真实支付成功,需要依赖服务端的异步通知。Toast.makeText(selfActivity, "支付成功", Toast.LENGTH_SHORT).show();} else {// 该笔订单真实的支付结果,需要依赖服务端的异步通知。Toast.makeText(selfActivity, "支付失败", Toast.LENGTH_SHORT).show();}break;}default:break;}return false;}});

Ok,集成完毕~

The End

到此,微信以及支付宝支付,集成完毕~

如果后续如有其他问题,LZ及时更新~~~

当然欢迎各位看官提出更好的方案~~~

Thanks 查阅~~~

Android Study 之 6分钟妥妥集成微信以及支付宝支付相关推荐

  1. Android项目内简单集成微信和支付宝支付功能

    最近自己公司的项目需要集成微信和支付宝支付,我是个初学者,然后就开始在网上各种搜索相关Demo.最后找了一个自我感觉还不错的Demo,挺适合初学者使用的.在使用之前一定要在微信平台和蚂蚁金服申请权限, ...

  2. SpringBoot 2 集成微信扫码支付

    前言 该文主要是手把手教你如何在SpringBoot 中集成微信扫码支付,以及集成的过程需要注意的问题事项.另外需要感谢 vbirdbest 关于微信支付和支付宝支付相关包博客总结.因为文中很多地方参 ...

  3. Android强行进阶:为何大厂APP如微信、支付宝、淘宝、手Q等只适配了armeabi-v7a/armeabi?

    0. 前言 前几天啊,在公众号发了一篇文章<优化ApK大小之ABI Filters 和 APK split>,评论区收到了一些留言说,文章讲得不够深入,关于系统是如何选择不同abi下的so ...

  4. 在sdk中添加源文件_实用干货 | 一步一步教你在SpringBoot中集成微信刷卡支付

    一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业) 开通微信支付 开发配置 具体准备工作请参考Spring Boot入门教程( ...

  5. 微擎支付返回商户单号_一步一步教你在SpringBoot中集成微信扫码支付

    一:准备工作 使用微信支付需要先开通服务号,然后还要开通微信支付,最后还要配置一些开发参数,过程比较多. 申请服务号(企业) 开通微信支付 开发配置 具体准备工作请参考Spring Boot入门教程( ...

  6. 集成第三方SDK——支付宝支付

    No1. 当今社会,几乎所有的APP都离不开线上支付功能,说道支付,当代当归支付宝微信所属.一些面试的朋友,也离不开这两样必需品,今天就着重来说一说--支付宝. 说到支付宝,可能每个人都很熟悉.&qu ...

  7. 基于weixin-java-tools集成微信小程序支付功能

    目前,公司正在把业务从公众号向小程序迁移,本人负责订单功能的开发,现在把微信小程序接入微信支付这块的知识分享给大家,可能有部分人对微信支付不太了解,可以参考下面的微信支付流程图. 微信支付流程图 我是 ...

  8. android使用微信与支付宝支付在小米miui系统上ui线程被异常kill的bug修复

    讲真,miui是最不应该出现在这个世界上的系统,深度定制后产生的一系列bug最终都会体现在android开发者的app上: 解决被异常kill的思路,miui在支付activity调起微信时被异常ki ...

  9. 【Android实战】移动支付(微信、支付宝、银联)集成

    微信支付 Demo一直返回-1 集成之后总是返回-1 Demo中的订单模拟 客户端快速集成 集成关键步骤 基本流程 支付宝支付 集成过程 注意事项 银联支付 小结 更新 2016-1-6 ll 微信支 ...

最新文章

  1. shell中的执行流控制
  2. 微信公众帐号开发教程第6篇-消息及消息处理工具的封装
  3. android+ebook控件,Android 自定义控件 eBook 翻书效果
  4. 数据结构题:由逆置数组方法——逆置线性表L的所有元素
  5. 第二章 XHTML简介
  6. 创建表空间、用户和赋权
  7. 一文读懂 Java 工程师学习路线!
  8. 关于DNF的多媒体包NPK文件的那些事儿(7) - IMGV5
  9. 操作记录-2020-11-13:精简代码处理ChIP_seq数据
  10. 利用R语言如何计算出回归分析中的t值和P值
  11. 地铁7号线路图_成都地铁7号线线路图_运营时间票价站点_查询下载
  12. acwing1113 红与黑
  13. 阿里大文娱深耕电影赛道,推出多部爆款电影
  14. java面试题-需要背的内容
  15. 19款国产手机无一幸免:15分钟破解人脸识别,打印眼镜让刷脸形同虚设 ?
  16. android 手机震动1次,Android中手机震动的设置(Vibrator)的步骤
  17. 软件测试职业发展方向有哪些
  18. MTK android WIFI地址 不写随机变动问题
  19. 如何了解Office 365 Plans Pricing
  20. 基于图形化界面创建Vue项目

热门文章

  1. 【vue-baidu-map】自定义地图
  2. 传智健康-检查项管理
  3. 免费报表工具知多少?
  4. 一款免费轻量级web报表工具
  5. GO语言的进阶之路-网络安全之proxy
  6. 使用WritableFont设置字体样式
  7. msm8917:LCD移植 LK+Kernel
  8. Maya常用快捷键有哪些?Maya快捷键大全
  9. 周期性时间序列的预测
  10. 金钱兑换问题 动态规划相关学习