一,前言:
项目中我们集成了支付宝,用户可以使用支付宝来进行支付
项目测试时,我们当然也需要一套测试环境对支付流程进行测试
如果我们使用线上的支付宝配置进行测试,那么我们必须使用真实货币进行支付
并且支付的金额会进入生产环境的支付宝绑定银行卡中,造成诸多不便
这里,支付宝为测试提供了一个沙箱环境,使我们可以使用虚拟货币进行支付测试
这篇文章就来详细说一下支付宝沙箱环境的配置和使用
复制代码
二,前置了解
在正式进入沙箱配置和使用之前,我们先说一下需要了解的一些知识和概念
首先,后台服务器在调用支付宝接口(如发起支付)时,需要实例化一个支付宝 client
这里需要一些构造参数,而沙箱和正式环境的不同就在于这些参数:
复制代码
/**
* Created by Brave on 17/5/16.
* 支付宝参数配置-多环境
*/
@Component
public class AliPayConfig {
@Value("${alipay.url}")
private String alipay_url;// 支付宝网关(固定)
@Value("${alipay.appid}")
private String alipay_appid;// APPID 即创建应用后生成
@Value("${alipay.publickey}")
private String alipay_publickey;// 开发者私钥,由开发者自己生成
@Value("${app.privatekey}")
private String app_privatekey;// 支付宝公钥,由支付宝生成
@Value("${alipay.format}")
private String alipay_format;// 参数返回格式,只支持json
@Value("${alipay.charset}")
private String alipay_charset;// 编码集,支持GBK/UTF-8
@Value("${alipay.signtype}")
private String alipay_signtype;// 商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2
@Value("${alipay.pid}")
private String alipay_pid;// 合作者身份ID(PID)是商户与支付宝签约后,商户获得的支付宝商户唯一识别码
// getter and setter ...
}
/**
* Created by Brave on 17/5/16.
* 支付宝客户端单例
*/
public class AliPayClient {
private AliPayClient() {}
private static DefaultAlipayClient instance;
public static synchronized DefaultAlipayClient getInstance(AliPayConfig aliPayConfig) {
if (instance == null){
instance = new DefaultAlipayClient(
aliPayConfig.getAlipay_url(),
aliPayConfig.getAlipay_appid(),
aliPayConfig.getApp_privatekey(),
aliPayConfig.getAlipay_format(),
aliPayConfig.getAlipay_charset(),
aliPayConfig.getAlipay_publickey(),
aliPayConfig.getAlipay_signtype());
}
return instance;
}
}
复制代码
可以看到,在实例化 Client 时,使用了 8 个参数的构造方法(还有其他构造方法),
其中,前 4 个参数正式和沙箱环境使用的值是不同的,后四个可以是相同的,
根据我们对各个字段的注释应该可以知道:
1)沙箱环境和正式环境的支付宝网关不同:
因为使用了沙箱环境的支付宝网关
2)沙箱环境和正式环境的APPID不同:
因为沙箱环境是新创建的一个应用
3)沙箱环境和正式环境的开发者私钥(应用私钥)不同:
因为沙箱环境新建了新的应用,每个应用都应该重新生成一套应用公钥和私钥
4)沙箱环境和正式环境的支付宝公钥不同:
因为为沙箱环境配置了新的应用公钥,所以生成的支付宝公钥
复制代码
到这里,又要清晰一组概念,应用公钥、应用私钥、支付宝公钥是什么?
这里我们不去说原理,只说使用
新建一个支付宝应用后,我们使用支付宝提供的"RSA签名验签工具"生成一套应用公钥,应用私钥
应用私钥:需填写到代码中供签名时使用。
应用公钥:需提供给支付宝账号管理者上传到支付宝开放平台
支付宝公钥:为应用配置应用公钥后,由支付宝生成
复制代码
支付宝相关文档:
生成 RSA 密钥:https://docs.open.alipay.com/291/106074
上传应用公钥并获取支付宝公钥:https://docs.open.alipay.com/291/105972/
使用应用私钥生成请求签名:https://docs.open.alipay.com/291/105974/
使用支付宝公钥验签:https://docs.open.alipay.com/291/106074/
三,沙箱环境配置
宝相关文档其实已经把配置所得听明白了,这里写给那些不想看文档的人,毕竟文档是文档,不是实际操作
复制代码
1,登陆支付宝开放平台,点击进入“开放平台-开发者中心-沙箱环境”。
2,进入沙箱环境页面,系统自动创建一个应用并可以看到应用信息
3,设置应用公钥,开发者要保证接口中使用的私钥与此处的公钥匹配,否则无法调用接口
秘钥生成文档:https://docs.open.alipay.com/291/105971
以MAC为例:
下载秘钥生成工具,运行“RSA签名验签工具.bat”(WINDOWS)或“RSA签名验签工具.command”(MAC_OSX)
复制代码
详细步骤:
1.根据开发语言选择密钥格式。
2.选择密钥长度,建议使用2048位。
3.点击 “生成密钥”,会自动生成商户应用公钥和应用私钥。
4.点击“打开密钥文件路径”,即可找到生成的公私钥。如图:
复制代码
生成的私钥需妥善保管,避免遗失,不要泄露。
应用私钥需填写到代码中供签名时使用。
应用公钥需提供给支付宝账号管理者上传到支付宝开放平台
复制代码
4,验证公钥正确性:
下载签名工具:
运行支付宝报文签名生成器 SHA256withRSA2048_V1.0.command
将私钥文本信息粘贴到左侧点击生成签名
将生成的签名放入上一步的”RSA 秘钥调试工具”文本框内,进行验证
出现上图显示”验证成功"说明配置公钥正确
配置应用公钥完成后,会出现支付宝公钥:
点击查看支付宝公钥,获得支付宝公钥
至此,就获取到了支付宝公钥和应用私钥,接下来,开始使用支付宝沙箱环境;
四,沙箱环境的使用
1,后台服务参数修改:
在前置了解中,我们已经将支付宝实例化的代码和参数贴了出来
也说明了沙箱环境其实就是新生成的一个支付宝应用
实例化的8个参数中有四个是不同的,另外4个是和线上环境相同的即可
复制代码
下面我们看一下需要修改为沙箱环境的 4 个参数如何使用:
将服务器端实例化 Client 的参数改为上述参数即可启用沙箱环境进行支付宝测试
2,APP 支付沙箱接入注意点:
1、APP支付支持沙箱接入;在沙箱调通接口后,必须在线上进行测试与验收,
所有返回码及业务逻辑以线上为准;
2、APP支付只支持余额支付,不支持银行卡、余额宝等其他支付方式;
3、APP支付只支持Android版接入,在使用sdk时,在支付接口前调用如下方法
EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
复制代码
3,安装沙箱版支付宝 App:
沙箱环境下,支付宝也提供了沙箱版支付宝App(目前只能使用Android版本进行测试,IOS不可用)
复制代码
扫描二维码下载沙箱版 App:
4,获得沙箱版 App 登陆账号密码
支付宝开放平台-开发者中心-研发服务-沙箱账号:
https://openhome.alipay.com/platform/appDaily.htm?tab=tool
使用买家用户名密码登陆进行支付即可使用沙箱环境了
在这个页面下我们可以自由的为账户进行充值
最后,附上一张 App 的截图:
是不是特别爽
五,结尾
到这里,就完整地介绍了支付宝沙箱环境的使用流程;
其实,支付宝正式环境的配置和沙箱环境基本是一致的;
后面我们会说一下集成支付宝的方法以及逻辑上的注意事项
并且我们还有一套较为完善的支付宝监控的日志记录
此部分模块化已完成,后期会抽离成为一个 Demo 供调试使用
评论