Android接入支付宝和微信支付

本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点

前言

很多APP都需要支付功能,国内一般就是支付宝和微信了。目前这2种接入方式对于APP端来说都已经比较方便了,因为大部分的安全校验之类的逻辑都在服务端。

APP端总结起来就是三步走:

  1. 接入支付的库
  2. 接受服务端的订单信息,发起调用支付宝和微信
  3. 接收支付宝和微信的回调

支付宝接入

首先是接入支付宝的aar文件

比较坑的是支付宝还需要下载aar文件导入,而不是gradle里面一行依赖就能搞定的。

我们需要去官网下载最新的DEMO和SDK,官网地址在这里

然后把下载下来的aar包,放到项目目录下面的libs目录下,通过下面的gradle依赖进来

// 支付宝 SDK AAR 包所需的配置
compile(name: 'alipaySdk-15.6.0-20190226104104-noUtdid', ext: 'aar')
调用支付宝SDK的方法发起支付

调用支付宝SDK发起支付,只需要一个参数,就是服务端返回的订单信息。所以这里的支付顺序是先要我们调用服务端的接口创建一个订单,然后服务端把订单信息返回给我们,我们APP拿着这个订单信息去调用支付宝支付。

//下面的orderInfo就是咱自己的服务端返回的订单信息,里面除了订单ID等,还有签名等安全信息
//使用方式基本按照支付宝的DEMO里面就行了final Runnable payRunnable = new Runnable() {@Overridepublic void run() {PayTask alipay = new PayTask(PayDemoActivity.this);Map<String, String> result = alipay.payV2(orderInfo, true);Log.i("msp", result.toString());Message msg = new Message();msg.what = SDK_PAY_FLAG;msg.obj = result;mHandler.sendMessage(msg);}
};// 必须异步调用
Thread payThread = new Thread(payRunnable);
payThread.start();
由上面的调用可见,支付宝是通过消息机制来接收回调的,所以我们得在Handler的消息中接收回调信息。
private Handler mHandler = new Handler() {@SuppressWarnings("unused")public void handleMessage(Message msg) {switch (msg.what) {case SDK_PAY_FLAG: {//这里接收支付宝的回调信息//需要注意的是,支付结果一定要调用自己的服务端来确定,不能通过支付宝的回调结果来判断break;}default:break;}};
};

需要注意的是,支付结果一定要调用自己的服务端来确定,不能通过支付宝的回调结果来判断!

其他

实际情况里需要考虑用户手机上有没有安装过支付宝

  • 已经安装过支付宝,会直接调用支付宝支付
  • 没有安装支付宝,会调起支付宝的H5页面支付

以上就是支付宝的接入了,步骤还是比较简单的,也没有什么坑。下面的微信支付就有坑了…

微信支付接入

接入微信的SDK

官网在这

相比于支付宝,微信接入SDK就比较简单了,一行代码搞定

//微信支付SDK
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'

这里需要注意的是,微信的SDK里面支付和社交登录等这些是集成在一起的,无法分开。所以如果项目里之前已经集成过微信登录的话就不需要重复集成了!

调用微信SDK发起支付
String content = ...    (这个是服务端返回的订单信息)
//需要一个注册微信支付的APPID
IWXAPI api = WXAPIFactory.createWXAPI(mContext, APPID);
JSONObject json = new JSONObject(content); 
PayReq req = new PayReq();
req.appId			= json.getString("appid");
req.partnerId		= json.getString("partnerid");
req.prepayId		= json.getString("prepayid");
req.nonceStr		= json.getString("noncestr");
req.timeStamp		= json.getString("timestamp");
req.packageValue	= json.getString("package");
req.sign			= json.getString("sign");
api.sendReq(req); //这里就发起调用微信支付了
接收微信支付的回调

可以看到上面的代码和支付宝就不一样了,没有用Handler。

微信支付比较特殊的一个地方是需要我们用一个特殊的Activity来接收回调的信息。这个处理不好很容易就碰到接收不到回调的情况。

我们需要新建一个名叫WXPayEntryActivity的Activity,内容的话可以参考微信SDK里面的。需要注意的有几点:

  • WXPayEntryActivity这个Activity的路径要符合要求,比如APP的包名是com.niubi.company,那这个Activity的路径就需要是com.niubi.company.wxapi.WXPayEntryActivity
  • 这个WXPayEntryActivity当然需要在AndroidManifest文件中注册
<activityandroid:name=".wxapi.WXPayEntryActivity"android:exported="true"android:launchMode="singleTop"/>

特别需要注意的是上面的exported属性和launchMode属性一定要加上,否则是接收不到回调的

  • 我们在支付完成以后,一般是希望直接回到我们自己的应用里面。这个时候我们就需要让上面的WXPayEntryActivity不显示,否则就会闪一下或是停留在这个黑黑页面。
    不显示的话要注意2点,一个是不要有布局,另一个就是要及时的finish掉这个Activity
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{...@Overridepublic void onResp(BaseResp resp) {Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {<!--AlertDialog.Builder builder = new AlertDialog.Builder(this);--><!--builder.setTitle(R.string.app_tip);--><!--builder.setMessage(getString(R.string.pay_result_callback_msg, String.valueOf(resp.errCode)));--><!--builder.show();-->//这里肯定不能是像上面的DEMO一样弹出对话框了,而是通知我们发起支付调用的页面//然后及时finish掉这个页面,贴个伪代码:sendPayNotice()finish();}}
}
其他

同样的,微信支付成功与否,也要通过调用自己的服务端来查看,而不能依赖微信的回调状态,这个要切记。

总结

以上就是微信和支付宝的支付接入,基本上按照上述步骤都不会有问题了。特别是微信支付,一定要特别注意文中提到的注意点,那些都是踩过的坑啊!


                       欢迎关注我的微信公众号,和我一起每天进步一点点!

AntDream

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/71470.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信推送和支付宝付款接口的使用

我们在开发的过程中经常会碰到调用微信或者支付宝接口进行付款&#xff0c;付款完成之后&#xff0c;如果用户绑定了我的账号&#xff0c;我只要有活动了&#xff0c;就要给这个关注我的用户推动消息&#xff0c;让用户知道&#xff0c;比如说&#xff0c;我们经常会关注一些公…

网页调起支付宝付款和微信付款

网页调起支付宝付款和微信付款 昨天在指导客户制作付款网页的时候写了部分说明文档&#xff0c;觉得其中有很多对第一次接触这方面的人能有所帮助&#xff0c;在此分享一下 调起付款的步骤 1.获取微信code&#xff08;支付宝是auth_code&#xff0c;以下统称code) 不论是微…

个人如何接入支付宝或者微信支付等支付接口

企业途径&#xff1a;直接注册一个有资质的公司&#xff0c;并把工商局下发的企业许可证传给支付宝或者微信&#xff0c;让它们进行资质审核认证&#xff0c;如果微信或者支付宝觉得你的资质足够跟他们合作了&#xff08;整体来说很困难&#xff0c;不怎么容易达到足够的资质&a…

设计聊天机器人,5个误区小心别踩

设计聊天机器人&#xff0c;5个误区小心别踩&#xff01; 最近一段时间&#xff0c;各种AI对话工具大火&#xff0c;海外有ChatGPT&#xff0c;国内有百度下面的文心一言。越来越多人开始将智能工具搬到了自己的产品里。 而市场上有很多聊天工具都有自动化的功能&#xff0c;虽…

世界上最复杂的函数_巨蟹座是世界上最懒的星座。

01 巨蟹座是世界上最懒的星座。 1、世界上最懒的星座&#xff0c;别人整点拖延症&#xff0c;巨蟹整年拖延症。 让ta学习、工作、运动、洗头的最好方式是拿枪顶脑袋。 2、自我保护意识无比强&#xff01; 敏感排行居首位&#xff01; 自己说的话百般酝酿&#xff0c;别人说的话…

巨蟹座适合计算机应用和文秘,业务能力强 适合当秘书的星座

十二星座中&#xff0c;每种星座擅长的领域都不一样。有些人适合当老板&#xff0c;有些人适合当员工&#xff0c;有些人适合当秘书。一般来说&#xff0c;秘书是一个非常难做的位置&#xff0c;甚至比老板和员工还要辛苦。不过&#xff0c;对于下面这几个星座来说&#xff0c;…

巨蟹座 55e外表达2000度 火山活泼岩浆遍布

巨蟹座 55e外表达2000度 火山活泼岩浆遍布 这个发明暗示巨蟹座 55e这个超级地球的外表十分杂乱&#xff0c;猛烈的火山喷发招致熔岩流遍及寰球&#xff0c;全部地表大局部被掩盖着滚烫的火山喷发物。假如巨蟹座 55e 与木卫一进行对照&#xff0c;那可以巨蟹座 55e 更“绚烂”一…

计算机专业巨蟹座男生,巨蟹座男生适合的职业

巨蟹座男生适合的职业 巨蟹座是一个重视生活细节的星座&#xff0c;只要和生活有关的事物都会引起蟹子的重视。虽然做事低调的性格使蟹子更喜欢从事一些非前线的工作&#xff0c;但懂得如何掌握人心&#xff0c;在职场上往往也最容易展现人事处理的才干。所以蟹子最适合服务业&…

新媒体运营胡耀文教程:短视频脚本的3个套路,新手也能做爆款

你是否觉得&#xff0c;看短视频比看电视还过瘾&#xff1f;劲爆的画面、巧妙的神转折、不拖沓的剧情、嗨爆的BGM…都足以让人“忘却人间”。 而这一系列设计的背后&#xff0c;都承载于一个重要部分&#xff1a;短视频脚本。 就像拍电视剧、电影一样&#xff0c;短视频脚本是…

纯干货!短视频脚本怎么写?零基础新手小白也能写好短视频脚本!【覃小龙课堂】

hi&#xff0c;我是你的老朋友兼顾问&#xff1a;覃小龙&#xff0c;您可以叫我覃总。今天给您分享我做影视剪辑的一些经验方法&#xff0c;零粉丝也能做&#xff0c;主题名为&#xff1a; 纯干货&#xff01;短视频脚本怎么写&#xff0c;零基础也能写好短视频脚本 在写脚本以…

短视频脚本怎么写?6个套路

做短视频的基础就是脚本&#xff0c;脚本是创作的基石&#xff0c;是贯穿这个视频始末的逻辑。那么&#xff0c;短视频脚本怎么做呢&#xff1f;其实&#xff0c;在拍摄脚本里面&#xff0c;我们可以把所有的东西拆分为以下 6 个要素&#xff1a; 01 镜头景别 镜头分为远景、全…

实现排序的几种方式/sorted(o1,o2)

1 实现排序的几种方式 首先我们先看代码 List<Person> personList new ArrayList<>();personList.add(new Person("王一",1));personList.add(new Person("王二",2));personList.add(new Person("王五",5));personList.add(new Per…

经典十大排序算法(含升序降序,基数排序含负数排序)【Java版完整代码】【建议收藏系列】

经典十大排序算法【Java版完整代码】 写在前面的话十大排序算法对比冒泡排序快速排序直接选择排序堆排序归并排序插入排序希尔排序计数排序桶排序基数排序完整测试类 写在前面的话 虽然已经有很多人总结过这十大排序算法&#xff0c;优秀的文章也不少&#xff0c;但是Java完整版…

使用O2OA二次开发搭建企业办公平台(一)平台部署篇:平台下载和部署

转载&#xff1a;https://my.oschina.net/u/3931542/blog/2209110 本博客为O2OA系列教程&#xff0c;教程目录和各章节天梯将在连载完后更新。 服务器下载和安装 1、服务器安装包下载 访问http://www.o2oa.io网站&#xff0c;如下图所示: 在网站顶部导航里点击下载&#xff0…

O2PLS(绘制载荷图)--R

##绘制载荷图## gene_loading <- as.data.frame(fit0$W.) meta_loading <- as.data.frame(fit0$C.) colnames(gene_loading) <- c("pq1","pq2") colnames(meta_loading) <- c("pq1","pq2") #添加新的一列&#xff0c;按组…

Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合

Java8 Stream 1 Stream概述2 Stream的创建3 Stream的使用案例使用的员工类3.1 遍历/匹配&#xff08;foreach/find/match&#xff09;3.2 筛选&#xff08;filter&#xff09;3.3 聚合&#xff08;max/min/count)3.4 映射(map/flatMap)3.5 归约(reduce)3.6 收集(collect)3.6.1 …

O2S.Components.PDFView4NET显示pdf(winform)

O2S.Components.PDFView4NET显示pdf&#xff08;winform&#xff09; 首先得把这个dll导入工具箱 选中该dll组件 按确定就多出来这些东西 然后再按确定&#xff0c;工具箱就有下面这些组件啦 2. 拉一个PDFpageview&#xff0c;和一个pdfdocument就可以用来显示了 然后放代码…

Java8对中文汉字排序的Comparator实现类

最近由于工作需要需要对中文汉字排序&#xff0c;编写了Comparator实现类分享给大家。 直接上代码&#xff1a; import java.util.Comparator;public class ChineseComparator<T> implements Comparator<T> {private static boolean isDigit(char ch) {return ch …

Collectors.toMap mergeFunction参数,(o1,o2)->o1的含义

文章目录 前言结论代码示例源码分析 前言 在java8 Stream流中经常有看到这么一种写法Collectors.toMap(Person::getName, Function.identity(),(o1, o2)->o2), 经常会比较好奇o1,o2指的是什么含义&#xff0c;本篇博文主要讲解o1,o2的含义。 结论 这里使用(o1, o2)->o…

O2OA:移动办公市场中的另一股清流

相比多数管理软件为外资品牌主导的尴尬局面&#xff0c;移动OA市场罕有为国产厂商独霸天下。 一方面&#xff0c;随着中国经济的蓬勃发展&#xff0c;企业数量快速增长。有资料显示&#xff0c;截至2017年三季度末&#xff0c;全国工商注册的中小企业总量超过4200万家&#xff…