支付宝-沙箱环境配置和使用

一,前言:

项目中我们集成了支付宝,用户可以使用支付宝来进行支付
项目测试时,我们当然也需要一套测试环境对支付流程进行测试
如果我们使用线上的支付宝配置进行测试,那么我们必须使用真实货币进行支付
并且支付的金额会进入生产环境的支付宝绑定银行卡中,造成诸多不便
这里,支付宝为测试提供了一个沙箱环境,使我们可以使用虚拟货币进行支付测试
这篇文章就来详细说一下支付宝沙箱环境的配置和使用

二,前置了解

在正式进入沙箱配置和使用之前,我们先说一下需要了解的一些知识和概念

首先,后台服务器在调用支付宝接口(如发起支付)时,需要实例化一个支付宝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个参数如何使用:

支付宝网关:沙箱网关为https://openapi.alipaydev.com/gateway.do
APPID:使用自动创建的沙箱管径APPID即可
应用私钥:步骤三生成的应用私钥
支付宝公钥:步骤三种得到的支付宝公钥

将服务器端实例化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供调试使用


维护日志

20180314:
添加了支付宝AndroidApp接入沙箱环境注意事项,Android开启沙箱配置

猜你喜欢

转载自blog.csdn.net/ABAP_Brave/article/details/79215081