项目中我们集成了支付宝,用户可以使用支付宝来进行支付
项目测试时,我们当然也需要一套测试环境对支付流程进行测试
如果我们使用线上的支付宝配置进行测试,那么我们必须使用真实货币进行支付
并且支付的金额会进入生产环境的支付宝绑定银行卡中,造成诸多不便
这里,支付宝为测试提供了一个沙箱环境,使我们可以使用虚拟货币进行支付测试
这篇文章就来详细说一下支付宝沙箱环境的配置和使用
首先创建支付宝配置文件类:
@Configuration@Datapublic class AliPayConfig { /** * 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 */ @Value("${sdk.alipay.appID}") private String appID; /** * 商户私钥,您的PKCS8格式RSA2私钥 */ @Value("${sdk.alipay.merchantPrivateKey}") private String merchantPrivateKey; /** * 支付宝公钥 */ @Value("${sdk.alipay.alipayPublicKey}") private String alipayPublicKey; /** * 签名方式 */ @Value("${sdk.alipay.signType}") private String signType; /** * 网关 */ @Value("${sdk.alipay.gatewayUrl}") private String gatewayUrl; /** * 编码 */ @Value("${sdk.alipay.charset}") private String charset; /** * 异步通知地址 */ @Value("${sdk.alipay.notifyUrl}") private String notifyUrl; /** * 类型 */ @Value("${sdk.alipay.format}") private String format; /** * 商户号 */ @Value("${sdk.alipay.sysServiceProviderId}") private String sysServiceProviderId;
登陆支付宝开放平台进行沙箱环境配置
配置截图
注意:沙箱环境的支付宝网关、公钥私钥都和正式不同,现在做的是沙箱环境的模拟支付
生成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/下载密匙生成工具:https://docs.open.alipay.com/291/105971
配置截图
然后生成密钥:
生成公钥 私钥以后把公钥上传到支付宝,在开发者配置中点击 RSA2(SHA256)密钥
如下图:
配置信息
上传成功之后点击查看支付宝公钥,注意这里不要搞反了在配置文件中我们要的是支付宝给我们的公钥不是我们刚刚生成的公钥!
配置成功,现在配置项目
打开配置文件添加配置:
商户私钥就是刚刚生成的私钥支付宝公钥不是我们生成的公钥,是支付宝给我们的公钥切记 不然签名校验会不通过
添加生成支付代码,简单创建支付没有加参数和业务代码:
@Override
public String payWithAliPay() throws AlipayApiException {
/**
* 业务代码
*/
String order_no = UUID.randomUUID().toString(); //77777777
String body = "";
String total_fee = "999.99"; //真实金钱
AlipayClient alipayClient = new DefaultAlipayClient(aliPayConfig.getGatewayUrl(), aliPayConfig.getAppID(), aliPayConfig.getMerchantPrivateKey(), aliPayConfig.getFormat(),
aliPayConfig.getCharset(), aliPayConfig.getAlipayPublicKey(), aliPayConfig.getSignType()); //获得初始化的AlipayClient
AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//创建API对应的request类
JSONObject jsonObject = new JSONObject();
/**
* 订单号
*/
jsonObject.put("out_trade_no