Android 支付宝和微信支付集成

来源:互联网 发布:php就业班54期 编辑:程序博客网 时间:2024/05/01 03:16

支付宝支付-移动接口


1. 商户签约审核

1.1商户在b.alipay.com里进行产品签约;(其中,点击右上角的 这里写图片描述,可详细了解签约的过程)

1.2在线申请,点击这里写图片描述
进入下级页面后,选择好套餐后,点击
这里写图片描述
1) 填写相关信息。
(注意刚进去时,默认是网站网址,要选择应用或其他附件)
这里写图片描述
填完信息,点击同意并提交 按钮后,等待审核
商户登录qy.alipay.com,可在“签约订单”中查看审核进度


2. 查看Pid和Key

审核成功后,登陆https://b.alipay.com/order/serviceIndex.htm
登陆账号后,选择上传的应用,查看Pid和Key.
网址是https://b.alipay.com/order/pidAndKey.htm
这里写图片描述
即可查询到合作者身份ID,以2088开头的16位纯数字。
输入支付密码,查询key
这里写图片描述


3. 集成支付宝

3.1 集成准备
集成前需要有PID、Key、企业支付宝的账号;

3.2 下载demo
在【技术支持】里下载demo了:https://b.alipay.com/order/techService.htm

1) Demo介绍
这里写图片描述

其中openssl下是生成密钥和公钥(支付时,需要)
客户端demo 下有Android和iOSd的demo和文档

2) 支付宝Demo和SDK
解压支付宝钱包支付接口开发包2.0标准版(Android 15.0.8).zip进去后一个是sdk,另一个是demo 这里写图片描述导入demo到Eclipse或AS

3) 私钥生成和公钥生成
生成RSA私钥,RSA公钥,PKCS8编码的私钥
打开openssl文件夹下的bin文件夹,执行openssl.exe文件,如下图:
这里写图片描述

生成RSA私钥
输入“genrsa -out rsa_private_key.pem 1024”命令,回车后,在当前bin文件目录中会新增一个rsa_private_key.pem文件,其文件为原始的商户私钥(请妥善保存该文件,PHP开发语言中需要使用该文件),以下为命令正确执行截图
这里写图片描述

生成PKCS8编码的私钥
输入命令“pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt”并回车,当前界面中会直接显示出生成结果:

这里写图片描述
右键点击openssl窗口上边边缘,选择“编辑→标记”,选中要复制的文字:这里写图片描述
此时继续右键点击openssl窗口上边边缘,选择“编辑→复制”,把复制的内容粘贴进一个新的记事本中,可随意命名,只要知道这个是PKCS8格式的私钥即可(请妥善保存该文件)。

4) 与支付宝互换公钥,得到支付宝返回的公钥
商户在使用RSA签名方式的支付宝接口时,真正会用到的密钥是商户私钥与支付宝公钥。商户上传公钥给支付宝,支付宝把公钥给商户,是公钥互换的操作。这就使得商户使用自己的私钥做签名时,支付宝端会根据商户上传的公钥做验证签名。商户使用支付宝公钥做验证签名时,同理,也是因为支付宝用支付宝私钥做了签名。
支付宝的RSA公钥为:

—–BEGIN PUBLIC KEY—–
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89L6BkRA
FljhNhgPdyPuBV64bfQNN1PjbCzkIM6qRdKBoLPXmKKMiFYnkd6rAoprih3/PrQE
B/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UBVOrFXfFl75p6/B5Ksi
NG9zpgmLCUYuLkxpLQIDAQAB
—–END PUBLIC KEY—–

(1) 把支付宝的公钥复制到新建的记事本中,并对该记事本命名为“alipay_public_key.txt”;
(2) 去掉这串字符串中的回车、换行、空格,变成只有一行文字;
(3) 在这串支付宝公钥字符串的头尾部分,分别增加“—–BEGIN PUBLIC KEY—–”、“—–END PUBLIC KEY—–”这两条文字;
(4) 切割这串支付宝公钥字符串,第一行、第二行、第三行分别是64个字符,第四行是24个字符,切割后的格式与商户刚生成的公钥格式一致即可,如下图:
这里写图片描述
(5) 保存该记事本,并改变后缀名为.pem。

3.3 配置Demo
在PayDemoActivity中配置几个变量:
这里写图片描述
现在运行demo就直接可以支付了。详细的demo讲解 参考http://blog.csdn.net/harvic880925/article/details/49779061

3.4 支付宝集成到项目中
I. 把alipaySDK-20150602.jar拷贝到lib下,将demo中的PayResult.java;SignUtils.java;Base64.java,复制到项目工程中.
II. 参考PayDemoActivity 写支付宝支付过程。

4. 注意点(可能会出错点)

支付宝主要的几个参数 :收款时的支付宝账号;
密钥pkcs8;
支付宝公钥(并非本地生成的,而是客户返回来的公钥)
商户PID
在调用订单时,不能漏任何一个参数,详见demo
另外 订单中的金额 格式必须是 0.01,其他的比如0.001 会失败


微信支付-移动接口


5. 客户接入微信支付

5.1 APP微信商户申请
进入https://pay.weixin.qq.com/index.php/home/login?return_url=%2F
选择下方的
这里写图片描述

注意是APP支付,不要选择公众号支付
1) 注册开放平台账号。
这里写图片描述
2) 认证开发者资质
注册好账号后,登陆,点击账号中心,当中的开发者资质认证,如图

这里写图片描述
一步步填写好认证所需的内容后,等待认证。

3) 创建应用
在管理中心,添加应用,如图
这里写图片描述

4) 选择平台
这里写图片描述

其中应用签名是用微信提供的工具签名,签名工具下载地址
https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk

5) 如何签名?
如图
这里写图片描述

图中,讲得有点复杂。应用签名获得方式:①将应用app打包出来,安装到手机中;②打开已下载好的微信签名工具,输入应用app的包名;③点击按钮后,得到的绿色一串就是应用签名(无法复制)。
注意:打包不能用debug.keystore。

6) 按图第二阶段操作


6. 集成微信支付

6.1 微信支付集成 文档
参看https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_1

6.2 微信支付Demo
1) 下载Demo
从https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1 下载
Android【微信支付】APP支付示例

2) 将Demo导入Eclipse或AS
3) 微信支付Demo讲解
这里写图片描述
商户APP工程中引入微信JAR包,调用API前,需要先向微信注册您的APPID,代码:

final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, “wxd930ea5d5a258f4f”);   // 将该app注册到微信 //"wxd930ea5d5a258f4f"为appId  

从Demo中可看出,一些重要的支付请求参数,都是从服务器传过来的,请求参数详见https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_12

6.3 微信支付集成到项目
1) 配置项目中的微信支付
将Demo的libs下的libammsdk.jar复制到项目中的libs。
这里写图片描述

复制到项目中去,改掉,包名,但是.wxapi, 不能变。其中WXPayEntryActivity 是微信支付的返回,可在这个Activity 重写支付成功和失败的操作。

将Constants.java,MD5.java,PayActivity.java,util.java拷贝到项目下。

2) 在AndroidManifest.xml 配置
(1)AndroidManifest.xml中package名字和项目包名一样;
(2)AndroidManifest.xml中添加.wxapi.WXPayEntryActivity

3) 具体调用 (参照Demo)

4) 处理支付结果
接收支付结果的WXPayEntryActivity中的onResp函数里处理支付结果,如下图
这里写图片描述


7. 微信支付集成常见的问题

7.1 测试返回的支付结果是-1
1) 应用签名不一致
应用提交的应用签名,是由XX.keystore文件打包的,测试时,就必须用XX .keystore 打包出来,调用微信支付
2) 应用签名错用debug.keyStore打包(不能用debug.keyStore)
3) 应用包名不一致
应用包名变过了,需要去微信提交应用那更新
4) 后台不一致
后台参数不正确
5) 价格单位是分
如1元,需写成100;写成1.00会调用失败
6) body是中文
body是中文的时候需要字符转换
7) 未清除微信的数据
这是微信支付比较坑爹的地方:在测试机中引起微信支付失败时,微信数据会储存失败记录并保持不变,那么你再次安装应用,并且应该能调微信支付成功,会一直导致-1结果。
记得删除微信缓冲数据(设置-》应用程序管理器->选中微信->清除数据)
8) Demo的注册语句未修改。
详见6.2下面的4)

8. 交付后遇到的一些问题

1) 支付宝的服务器异步通知页面路径 没有配置,
导致后台接受不到订单是否支付。(这个需要App这里配置)
2) 微信支付的订单返回地址 没有配置 ,导致后台接受不到订单是否支付。(这个需要后台配置)

0 0
原创粉丝点击