支付宝沙箱支付(Alipay Sandbox Payment
)是支付宝提供的一个模拟支付环境,用于开发和测试支付宝支付功能的开发者工具。在真实的支付宝环境中进行支付开发和测试可能涉及真实资金和真实用户账户,而沙箱环境则提供了一个安全、隔离的环境,使开发者能够模拟支付过程,测试支付功能,而不会使用真实资金。
支付宝开放平台https://openhome.alipay.com/
根据自己电脑系统下载对应版本
密钥生成完成后重新回到支付宝开放平台进入控制台
下滑找到沙箱
设置自定义密钥的公钥模式
将我们刚刚在工具中生成的应用公钥填写?
在沙箱账号中可以直接看到我们的商家信息和卖家信息,也可手动对其进行充值
当前版本只支持安卓
到这里我们的准备工作就完成了,更详细参考快速接入 - 支付宝文档中心 (alipay.com)
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-easysdk</artifactId>
<version>2.0.1</version>
</dependency>
package com.yu.NewPowerCart.config;
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;
import com.yu.NewPowerCart.pojo.Order;
import org.springframework.stereotype.Component;
@Component
public class AlipayConfig {
private Config aliconfig() {
Config config = new Config();
//沙箱支付宝地址
config.gatewayHost = "openapi-sandbox.dl.alipaydev.com";
//协议https
config.protocol = "https";
//应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
config.appId = "";
//支付宝公钥
config.alipayPublicKey = "";
//签名方式
config.signType = "RSA2";
//商户私钥(应用私钥),您的PKCS8格式RSA2私钥
config.merchantPrivateKey = "";
return config;
}
public String goAlipay(Order order) {
try {
// 1. 设置参数(全局只需设置一次)
Factory.setOptions(aliconfig());
// 2. 发起API调用(subject商品标题、outTradeNo订单编号、totalAmount总金额、returnUrl异步通知地址)
AlipayTradePagePayResponse response = Factory.Payment.Page()
.pay("商城项目收款",
order.getOid().toString(),
order.getTotal().toString(),
//支付成功之后的异步通知(跳出到自己系统的哪个位置)
"http://localhost:8080/order/payDone");
return response.body;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
?注:代码中空的地方需要填写自己的信息
查看地址:支付宝开放平台 (alipay.com)
?公钥在这里查看,注意:不是应用公钥是支付宝公钥!!!
商户私钥(应用私钥) 在我们的密钥生成工具中
@RequestMapping("/pay")
@ResponseBody
public String pay(User user, String oid){
//根据订单id获取订单
Order order = orderService.getById(oid);
//调用支付宝的支付功能
String body = new AlipayConfig().goAlipay(order);
System.out.println(body);
return body;
}
@RequestMapping("/payDone")
public String payDone(@RequestParam Map<String,String> ms) throws Exception {
//验签
Boolean f = Factory.Payment.Common().verifyNotify(ms);
if(!f){
throw new BusinessException(JsonResponseStatus.UN_KNOWN);
}
String oid = ms.get("out_trade_no");
//调用支付宝的支付功能
orderService.update(new UpdateWrapper<Order>()
.eq("oid",oid).set("status",1).set("pay_date",new Date()));
return "ok";
}