第三方支付现在已经基本普及,作为一个程序员如果连这个都需要介绍的话那就有点不像话了。
流程图
数据流程:
1.购买
2.生成订单
3.订单签名
4.调用安全支付服务
5.回调支付结果
6.商户验签支付结果
7.结束
接入流程
一.接入前的准备
1,商户前期准备:签约首先,商户需要在 https://ms.alipay.com 进行注册,并签约安全支付服务。签约成功后可获取支付宝分配的合作商户 ID(PartnerID),账户 ID(SellerID)
2.密匙配置:签约成功后,商户可登陆 https://ms.alipay.com 获取商户账号对应的支付宝公钥,具体获取步骤请见 “RSA 密钥详解”。接着,商户生成商户公钥和商户私钥(具体生成步骤请见 “ RSA 密钥详解”),并登陆https://ms.alipay.com,上传商户公钥(具体上传步骤请见 “ RSA 密钥详解”)。至此,接入前期准备工作完成,下一节将使用 demo 测试准备工作是否正确。
二。Demo
注意:不要在模拟器下测试Demo,否则可能导致付款账户被锁定
1。Demo 配置运行
1.导入
2.打开PartnerConfig.java”文件,按照注释添加商户账号信息,具体包括:合作商户 ID、账户 ID、支付宝公钥(即服务器公钥)、商户公钥、商户私钥。
示例代码:
// 合作身份者id,以2088开头的16位纯数字
public static final String PARTNER = "2088112738535023";
// 收款支付宝账号
public static final String SELLER = " bangninjia@126.com";
// 商户私钥,自助生成
public static final String RSA_PRIVATE = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAM99AHDnDbybtO/z/XqieV1Y1jHH3Y5m9XCGNXPMBSkIU5nzc/jLmrl034GnlaoB5q3OH2Ze99Tet816OmWfDqmCoZZIZ8g3cw8ntgM92lxwAd97Lh76NtwDQ5KN1slBw2ZUkszyvNq/VGyjqiE/270JwQWslo9qMHaPldpL/Z2tAgMBAAECgYBAYujtIDYaDjOCtrM1CBAjUHr/bacqFncZmPwjV+9OAWB4CJ03Wm9EF6l4AXonDHn5+1mxGc1MSGS/JavTdx1EG0uPyDc16BpSWbvlmKsPQgUKyAs6Fugyl11PowIDvf29geukQcKLVwhgLYHPd5hH1GO1UAF+cj/IsjIWFaGhoQJBAPtIjh8p3DBvAbgvh5fBEwjX0b6q95jkbbfdQZS4YgWFdoaP70Zq3KYw3dHVGgLJxWGxCSW2wEwoHuLzZjNwyeUCQQDTYgGOJYM0PcMkJVnEhy4S2/+mQb7WBU+mBWooUK61lUpajZuBj8xBZggrHkPU4iQB/wWOVCc8XdPaq9ctw6gpAkBH6Sya6HzV836XeiqgmCVdW33vxbeTrpNjkdMJv3Z1xAr2WUyNZ1l7yfJA8W4/LATrfyFyBImlgbnNEwDFadqtAkAr6EakbRxUxKN9JZkA3odueW4f7bYjJJVHygYj+6Zep3T7XEC559Gon/YAZtf2J0cNdxiDWO2Rd3fjCyC2K9cJAkBEQP43KekFeDdADP0QDNhG/bWfqWHfVim46EOxgJr8yw8Kr9SfinQfQZvPKPEFBvorK90/jtsukmwvEaaK+WZj";
// 支付宝公钥
public static final String RSA_PUBLIC = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89L6BkRAFljhNhgPdyPuBV64bfQNN1PjbCzkIM6qRdKBoLPXmKKMiFYnkd6rAoprih3/PrQEB/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UBVOrFXfFl75p6/B5KsiNG9zpgmLCUYuLkxpLQIDAQAB";
public static final String PARTNER = "2088112738535023";
// 收款支付宝账号
public static final String SELLER = " bangninjia@126.com";
// 商户私钥,自助生成
public static final String RSA_PRIVATE = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAM99AHDnDbybtO/z/XqieV1Y1jHH3Y5m9XCGNXPMBSkIU5nzc/jLmrl034GnlaoB5q3OH2Ze99Tet816OmWfDqmCoZZIZ8g3cw8ntgM92lxwAd97Lh76NtwDQ5KN1slBw2ZUkszyvNq/VGyjqiE/270JwQWslo9qMHaPldpL/Z2tAgMBAAECgYBAYujtIDYaDjOCtrM1CBAjUHr/bacqFncZmPwjV+9OAWB4CJ03Wm9EF6l4AXonDHn5+1mxGc1MSGS/JavTdx1EG0uPyDc16BpSWbvlmKsPQgUKyAs6Fugyl11PowIDvf29geukQcKLVwhgLYHPd5hH1GO1UAF+cj/IsjIWFaGhoQJBAPtIjh8p3DBvAbgvh5fBEwjX0b6q95jkbbfdQZS4YgWFdoaP70Zq3KYw3dHVGgLJxWGxCSW2wEwoHuLzZjNwyeUCQQDTYgGOJYM0PcMkJVnEhy4S2/+mQb7WBU+mBWooUK61lUpajZuBj8xBZggrHkPU4iQB/wWOVCc8XdPaq9ctw6gpAkBH6Sya6HzV836XeiqgmCVdW33vxbeTrpNjkdMJv3Z1xAr2WUyNZ1l7yfJA8W4/LATrfyFyBImlgbnNEwDFadqtAkAr6EakbRxUxKN9JZkA3odueW4f7bYjJJVHygYj+6Zep3T7XEC559Gon/YAZtf2J0cNdxiDWO2Rd3fjCyC2K9cJAkBEQP43KekFeDdADP0QDNhG/bWfqWHfVim46EOxgJr8yw8Kr9SfinQfQZvPKPEFBvorK90/jtsukmwvEaaK+WZj";
// 支付宝公钥
public static final String RSA_PUBLIC = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnxj/9qwVfgoUh/y2W89L6BkRAFljhNhgPdyPuBV64bfQNN1PjbCzkIM6qRdKBoLPXmKKMiFYnkd6rAoprih3/PrQEB/VsW8OoM8fxn67UDYuyBTqA23MML9q1+ilIZwBC2AQ2UBVOrFXfFl75p6/B5KsiNG9zpgmLCUYuLkxpLQIDAQAB";
3.运行项目
运行后会提示要求安装支付宝安全支付服务,点击安装。付款测试。
出现这个图片就代表密匙配置有误
Demo 结构说明
类名 | 说明 |
AlixDemo | 主 Activity |
Base64 | Base64 编码类,签名及验签,必须 |
MobileSecurePayer | 封装了对安全支付的调用,可参考性较强 |
MobileSecurePayHelper | 实现安全支付插件的检测,更新下载,安装,可参考性较强 |
Networkmanager | 网络连接管理 |
PartnerConfig | 商户账户信息配置 |
ResultChecker | AlixPay 返回结果的解析处理,可参考性较强 |
Rsa | RSA 签名验签类,必须 |
安全支付集成
1.添加jar文件
添加 demo 中的
alipay_msp.jar
包添加工程中
2.初始化安全服务
在调用安全支付进行支付前,需要先初始化安全支付服务。
3.订单数据生成
在调用安全支付时,需要提交订单信息 orderInfo 其中参数以“key=value”形式呈现,参数之间以“&”分割,所有参数不可缺。
partner="2088002007260245"&seller="2088002007260245"&out_trade_no=
"500000000006548"&subject=" 商 品 名 称 "&body=" 这 是 商 品 描 述
"&total_fee="30"¬ify_url="
http://notify.java.jpxx.org/index.jsp
"&sign="kU2Fa3x6V985g8ayTozI1eJ5fHtm8%2FJGeJQf9in%2BcVmRJjHaExbirn
GGKJ%2F7B63drqc4Kjlk%2FSg6vtSIkOtdvVBrRDpYaKxXVqkJTzRYgUwrrpMudbIj
9aMS2O3dHG0GPyL4Zb6jKDYXHabGG0aBJY3QA7JuTJ23t6SqV%2B5f1xg%3D"&sign
type="RSA"
其中 sign 值的生成,需要特别注意的是:对数据签名后得到的 sign
值必须进行 URLEncode,之后才可作为参数。
4.调用安全支付
准备好参数后,即可调用安全支付进入支付流程并获得调用结果,代码如下:
result = mAlixPay.pay(orderInfo);
AliXPay 函数具体说明请见 AlixPay 方法描述。
result = mAlixPay.pay(orderInfo);
AliXPay 函数具体说明请见 AlixPay 方法描述。
5.支付结果获取和处理
调用安全支付后,将通过两种途径获得支付结果:
1)、 AliXpay.pay()方法的返回。该方法将返回表示支付结果的字符串
2)、支付宝服务器通知。商户需要提供一个 http 协议的接口,包含在参数里传递给安全支付,即 notify_url。支付宝服务器在支付完成后,会用 POST 方法调用 notufy_url,以 xml 为数据格式传输支付结果。
1)、 AliXpay.pay()方法的返回。该方法将返回表示支付结果的字符串
2)、支付宝服务器通知。商户需要提供一个 http 协议的接口,包含在参数里传递给安全支付,即 notify_url。支付宝服务器在支付完成后,会用 POST 方法调用 notufy_url,以 xml 为数据格式传输支付结果。
四。应用的发布
目前,我们为第三方应用客户端提供了两种集成安全支付服务的方式。第一种是运行时安装,即将安全支付服务安装包 apk 与第三方应用客户端整合在一起,在恰当的时机,由第三方应用客户端释放并安装安全支付服务安装包 apk。另一种则称为动态下载安装,在此种情况下,安全支付服务安装包 apk 是预先存放在约定的远程服务器中,第三方应用客户端可以从此处下载 apk 并进行安装。
为了提升用户体验,避免捆绑安装旧版本的安全支付服务之后,接着又需要重新升级并安装成最新版本,我们目前推荐结合使用以上两种集成方式。在最新的 demo 中,会首先连接支付宝服务器,检测并判断捆绑在第三方客户端中的 alipay_plugin.apk 是否为最新版本,如果是,则直接安装。如果捆绑在第三方客户端中的 alipay_plugin.apk 不是最新版本,则从服务器中下载最新版本的安装包,然后进行安装。
为了提升用户体验,避免捆绑安装旧版本的安全支付服务之后,接着又需要重新升级并安装成最新版本,我们目前推荐结合使用以上两种集成方式。在最新的 demo 中,会首先连接支付宝服务器,检测并判断捆绑在第三方客户端中的 alipay_plugin.apk 是否为最新版本,如果是,则直接安装。如果捆绑在第三方客户端中的 alipay_plugin.apk 不是最新版本,则从服务器中下载最新版本的安装包,然后进行安装。
错误代码列表
4、 错误代码列表
错误编号 | 说明 |
9000 | 操作成功 |
4000
|
系统异常
|
4001
|
数据格式不正确
|
4003
|
该用户绑定的支付宝账户被冻结或不允许支付
|
4004 | 该用户已解除绑定 |
4005
|
订单支付失败
|
4006
|
AlixPay 返回结果的解析处理,可参考性较强
|
4010
|
重新绑定账户
|
6000
|
支付服务正在进行升级操作
|
6001
|
用户中途取消支付操作
|
6002
|
网络连接异常
|
4、 错误代码列表
错误编号 | 说明 |
9000 | 操作成功 |
4000
|
系统异常
|
4001
|
数据格式不正确
|
4003
|
该用户绑定的支付宝账户被冻结或不允许支付
|
4004 | 该用户已解除绑定 |
4005
|
订单支付失败
|
4006
|
AlixPay 返回结果的解析处理,可参考性较强
|
4010
|
重新绑定账户
|
6000
|
支付服务正在进行升级操作
|
6001
|
用户中途取消支付操作
|
6002
|
网络连接异常
|