前言
支付宝沙箱支付(Alipay Sandbox Payment
)是支付宝提供的一个模拟支付环境,用于开发和测试支付宝支付功能的开发者工具。在真实的支付宝环境中进行支付开发和测试可能涉及真实资金和真实用户账户,而沙箱环境则提供了一个安全、隔离的环境,使开发者能够模拟支付过程,测试支付功能,而不会使用真实资金。
一.沙箱支付
1.准备工作
(1)进入支付宝开放平台
支付宝开放平台https://openhome.alipay.com/
(2)下载安装支付宝开放平台密钥工具
根据自己电脑系统下载对应版本
小程序文档 - 支付宝文档中心
(3)生成密钥
(4)生成支付宝公钥
密钥生成完成后重新回到支付宝开放平台进入控制台
下滑找到沙箱
设置自定义密钥的公钥模式
将我们刚刚在工具中生成的应用公钥填写
(4).配置沙箱账号
在沙箱账号中可以直接看到我们的商家信息和卖家信息,也可手动对其进行充值
(5)下载沙箱支付宝
当前版本只支持安卓
登录 - 支付宝欢迎登录支付宝,支付宝-全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验以及转账收款/水电煤缴费/信用卡还款等生活服务应用;为广大为从事电子商务的网站提供支付产品/支付服务的在线订购和技术支持等服务,帮助商家快速接入支付工具,高效、安全、快捷地开展电子商务。https://open.alipay.com/develop/sandbox/tool/alipayclint
到这里我们的准备工作就完成了,更详细参考快速接入 - 支付宝文档中心 (alipay.com)
二.SpringBoot集成
1.导入依赖
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-easysdk</artifactId><version>2.0.1</version>
</dependency>
2.配置 AlipayConfig
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";//协议httpsconfig.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)
公钥在这里查看,注意:不是应用公钥是支付宝公钥!!!
商户私钥(应用私钥) 在我们的密钥生成工具中
3.编写对应Controller控制支付及跳转
@RequestMapping("/pay")@ResponseBodypublic 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";}