Android 支付宝微信银联快速接入
随着移动支付的普及,越来越多的App采用第三发支付,在这里我们以支付宝为例,做一个快速集成!
1、首先,我们需要前往支付宝开放平台,申请我们的支付功能:https://open.alipay.com/platform/home.htm
支付宝首页
这里 有两个需要注意的地方 一个是管理中心,另外一个是我的支付宝
管理中心:
管理中心
管理中心 我们需要 创建一个应用 提交给支付宝进行审核。
我的支付宝:
在这里我的支付宝 是一个商户版,一会我们会需要在这里处理一下相关的 密匙
简单介绍完了,那么我们开始进入代码接入流程
一、我们需要到支付宝的sdk地址下载相关的sdk,这个不用我介绍吧
https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.P0wrvI&treeId=54&articleId=104509&docType=1
SDK下载后 长这样哦:
这里我们需要关注的是:客户端和OpenSSL 解压客户端里面的 Android压缩包 打开看看-_-# eclipse...
不过不影响我们把它变成 studio工程
导入到 studio以后 会发现,真的没什么东西,好简单。
下面我们看看内部代码中比较重要的地方:
商户ID、收款账号、pkcs8的私钥、公钥:这里 公钥可不填
那么商户是什么?
PID在这里
收款账号:收款账号就是该支付宝账号,比如 [email protected] 等等
这里最重要的就是公钥 和 私钥 的配置了 ,公钥 就是支付宝 所需要的**,私钥是我们客户端所需要的**。首先我们来看看 公钥如何生成。
当前页面 填写好支付宝密码 和 手机验证码我们会进入以下界面:
注意看 里面的 RSA 加密 ,我已经添加过 所以是查看 如果没添加过 那么这里显示的是添加
好了 我们这个公钥 从那里来呢?回到我们下载的SDK 目录中 打开 OpenSSL 你会看到一个 生成命令的 TXT文档:
RSA**生成命令
生成RSA私钥
openssl>genrsa -out rsa_private_key.pem 1024
生成RSA公钥
openssl>rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
将RSA私钥转换成PKCS8格式
openssl>pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt
注意:“>”符号后面的才是需要输入的命令。
如果在mac下 那么 可以直接使用 openssl 如果是win 下 那么 需要 openssl路径下找到bin文件夹进入以后双击 openssl.exe 就ok了
首先进入 openssl目录
生成后 我们可以通过 txt等工具 打开我们的 公钥
在这里 我们填写到支付宝的公钥 是 排除 -----BEGIN PUBLIC KEY-----和 -----END PUBLIC KEY-----以及制表符的 我们简单出来下效果
不可以有空格和和制表符号 将串嘛 复制到 刚刚我们提到的 合作伙伴秘钥中。
同理:继续改造我们的 私钥 将 私钥 放置到我们的 代码中。
配置完成了 ,那么另外需要注意的地方 就是 getOrderInfo()方法了
支付宝支付
资料参考
https://doc.open.alipay.com/doc2/detail.htm?spm=0.0.0.0.8MCe0H&treeId=59&articleId=103662&docType=1
支付完成上报接口
上报参数说明:
参数名称 | 必选 | 类型 | 描述 |
---|---|---|---|
order_id | 是 | String | 订单ID |
status | 是 | int | 支付结果,1=成功,0=失败 |
product_id | 是 | String | 集成支付的app产品 |
pay_type | 是 | int | 支付类型,支付宝=1,微信=2,3=银联,4=和支付 |
二、Android快速实现微信支付
如果你已经成功集成了微信登录和分享,那么此文将助你快速集成微信支付,此文基于微信支付SDK3.1.1,也就是目前为止最新的SDK
资源下载
不过我相信,即便你看了微信的官方文档,你依然不知道微信支付怎么集成,因为微信支付的官方文档简直太.....
如果你已经准备好了资源包,接下来正式开始集成
我们需要的资源其实有以下几样,在开始前,就这些转备好吧
1)微信支付的APPID
2)微信支付依赖包 >>>libammsdk.jar
3)一个Activity类 >>>WXPayEntryActivity.java
这里需要特别说明一下,这个Activity类,直接从上下载到的范例代码中copy到自己的工程中即可,这个页面是在你调起微信支付完成支付(或取消或失败)后,再回到你的App时会调用的一个页面。页面的布局可以是你自定义的布局,直接放图讲解:
先说一下这个类的路径,网上也有一大堆介绍了,我直接放图,路径一定,而且必须是这样的:
WXPayEntryActivity 的路径
在这个类中需要注意的地方有两个:
1、这个类中的布局是可以自定义的,如果你不需要展示什么布局,而是要跳转页面,把这段代码删除即可
回调页面的布局
2、回调结果的处理,下面是官方的处理方式,直接给了一个dialog,很多人会摸不着头脑,如果你不需要这个dialog,直接删除就好了,不需要把官方demo中的布局和资源都复制过来
官方的处理方式
下面是我自定义的处理方式,比较简单,就是土司显示了一下支付结果,如果你需要支付成功后跳转,那么直接在这里startActivity即可,别忘记最后要将这个页面finish()
自定义的处理方式
这个类中的其余的回调方法,我们都不需要去操作
然后我们就可以开始支付了,支付很简单,真的很简单
参数列表
这是微信支付需要我们携带的参数,对于新人来说,可能比较困惑的是我怎么生成这些参数呢?其实这些参数都是服务器返回给我们的,APPID我们可以自己保存在本地一份,其余的都是服务器返回给我们的,大概介绍一下流程:
发起支付的流程,提交订单的时候的参数根据项目需要配置
最后,服务器返回给我们微信支付的参数后,我们就可以愉快的支付了,这里是关键一步,注意!!
发起支付的关键步骤
至此我们已经可以调起微信支付页面来支付了
最后还有一个需要注意的是,很多人被这一步坑了,就是关于微信开放平台签名的问题。其实只要你手机上的程序的签名和你在微信平台登记的签名一致即可,无论是debug版本,还是release版本
微信开放平台签名
为了方便测试,我暂时填写的是我debug的签名,当然这个是可以改的,修改后会有审核期,几天就不知道,有时会很快,当应用快上线之前,记得去改为正式的签名即可,修改次数我也不知道了,可以自行百度一下!
修改签名
参考资料 https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5
2.1.1.1.集成微信支付需要
参数名称 | 必选 | 类型 | 描述 |
---|---|---|---|
appid | 是 | String | 公众账号ID |
partnerid | 是 | String | 支付结果,1=成功,0=失败 |
prepayid | 是 | String | 预支付交易会话ID |
package | 是 | String | 扩展字段写固定值Sign=WXPay |
noncestr | 是 | String | 随机字符串 |
timestamp | 是 | String | 时间戳 |
sign | 是 | String | 签名 |
返回结果回调中errCode值列表:
返回码 | 必选 |
---|---|
0 | 支付成功 |
-1 | 可能的原因:签名错误、未注册APPID、项目设置APPID不正确、注册的APPID与设置的不匹配、其他异常等。 |
-2 | 无需处理。发生场景:用户不支付了,点击取消,返回APP。 |
三、Android快速实现银联支付 待更新......
银联支付
2.1.1.5.银联调用app所需参数
参数名称 | 必选 | 类型 | 描述 |
---|---|---|---|
orderInfo | 是 | String | 订单信息为交易流水号,即TN,为商户后台从银联后台获取。 |
mode | 是 | String | 银联后台环境标识,“00”将在银联正式环境发起交易,“01”将在银联测试环境发起交易 |
activity 用于启动支付控件的活动对象
2.1.1.6.银联控件返回参数
返回码 | 含义 |
---|---|
success | 支付成功 |
fail | 支付失败 |
cancel | 支付取消 |
一.进入下载官网,选择下载手机控件支付demo:
https://open.unionpay.com/ajweb/help/file/techFile?productId=3
二.直接找到demo中的三个类:
这里不得不吐槽下银联支付的demo了,不像支付宝那样的简单明了调一个方法改一些参数,银联的demo能用到的地方,需要自己手动复制到自己的代码中去。或者自己封装一下。(其中的jar包,.so文件这些就不说,直接复制到自己项目里面 ,特别注意,.so文件要放在src/main 目录下,和java文件并行。还有就是把用到的权限复制到自己项目中)
三.简单说下手机控件银联支付的流程:
概括一下就是,app这边将购买的商品信息提交给app后台,app后台接收到购买信息之后,将信息提交给银联后台,银联接收到支付信息给app后台返回一个交易流水号(也就是app需要的tn号,app后台将这个交易流水号返回给app,app拿到的这个订单流水号为21位纯数字号,为app调用银联所需的tn号)
四.看下这三个类:
这个demo不像支付宝的demo,这个demo,没有什么工具类固定类之类的,直接看BaseActivity 这个类。
这个类里面有注释,前面的不用看了,直接按照注释给的流程走:
步骤一看图,需要注意的,在用银联demo给的tn,和测试账号的时候,用01测试环境,在真正和后台交互的时候要换成00开发环境,不然报错。
demo中的步骤一,我们可以忽略掉,因为这个步骤一是在请求一个银联给的接口,只是用来获取tn值。(咱们上面第三部已经获取了tn值,所以直接跳过步骤一即可)
下面看步骤二
步骤二才是调用银联支付插件的重要地方,看demo,调了一个
doStartUnionPayPlugin(this, tn, mMode);
方法(上下文,tn值,开发环境)。tn值就是上面第三后台给的tn,mMode看第一步骤,自己改一下就行了,00开发环境,01测试环境。但是要注意,这个只是个回调接口方法。真正有用的其实在
JARActivity 中的
UPPayAssistEx.startPay(activity, null, null, tn, mode);
开启调用银联支付。
下面看步骤三
步骤三就是调用银联支付后,返回app的时候用了,看返回结果传,成功,失败,或者是什么返回。
完成以上的,银联控件支付基本就结束了。
但是要特别注意,在第三步骤上:
demo在返回结果上,进行了延签,我们直接把延签过程全部删除,不需要延签。经过延签的话,因为延签不通过,所以每次都是返回失败。
开发路漫漫,每天进步一点点。