https://docs.open.alipay.com/200/105311
支付报提供了沙箱模式给广大开发者,可以在沙箱模式下测试好了在使用正式环境
1引入依赖
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.8.62.ALL</version>
</dependency>
2创建一个记录重要属性的类:下面的属性需要去支付宝应用平台设置,活着沙箱模式设置
public class AlipayConfig_copy {
// 1.商户appid
// 个人测试
// public static String APPID = "2019063065717235";
//2.私钥 pkcs8格式的
// public static String RSA_PRIVATE_KEY ="MIIEvQIBADACUCWbz6cmKASbx70jxyAy1evdPlAt2unDE6fsHKvYkTJYADK/Fppu+S2az6yqiMIMGZ+U1N4nXS2CZAe5YkBiiMVQfNa4c9pvdTbLOtIr3k6HN0TkEPAn+swDX04oXIyi9ysGRcW463uiVTGUfJAK0f7nhpG9VEiH2Ce2zWdrLp6z1AgMBAAECggEAWujkuulxpmqkOxKWEjPRYDjS9T+CYhncIUrBiwyj6LtHFDI/ohr+bsFyc1EVB46GwBWieBHEXAt/ffKMyM+ZH1pYD160O3oiNMmGo1AMN0gNo3y8ILtJXx6CysuVXpTSZwm5BfnlwlzX1u/evNBMp45Y5ruMEI9TG6VG0iEfszifz0hVOjO7P4lpJZWfuliDk6DKrXV2x4IygP9dYapImioDKNsLMpFKnzjrcbOhwj4Jq7v1dtXako/98XNv9nzOtT5wCtYiEsZjLFV/0LlxH6K4q8y0VLUKR0yZtyFTZ/FzjD/H1yhfNwKD8r3fv9gdbDBknG6BKC8IhwsFJME9wQKBgQDGYtkWNRZwyCln8MqU3k20hr/+kWlu13WMRdxkjKMRYmhMRHYfY0mZqnSpR3ioZvnXWMybnJbDGDEYvym7o9joYc91MfEVdqlfa1FzF2ibZD6KEDHOTZen8MLGVoabP8xFCVgYAhtEL3bH0blQanwLPXYMUMqT923jmMv+pIWHCQKBgQC08Rn/lCZUQ8U1a6nGEZGyfHQxDlVbKchiWTuWfZOAUsW/MvjpTQnLfdHHeyNRdad12lwBbpvIsxWi312ClvPhorzwC29LIlQJoGEtKp3lyW5Kd1C2U79/PkoUc8BD7pVIKiNQRoYgDro1DRuJqJhGG068ZdpTKa/PHnkb4tgljQKBgQCjMLDOucDJ6X1WCRc7ulpFRAsvR0JpcUc6qkUPWTjSlhahljdsvmnOxA7PKQGx1XNzl5JH91l1BrNsXePgfHlzPvI+v2RHeaL94PPRLtJX8PAY9hViVSWJel1eddKoZqSLrZIPvbvcLQcSfAxqgA2l2Vr/6n2ZlhGJBSnZQFCusQKBgA9et6WlMQhRZWwfRCGmFmlB9yC/pfKDfxkTmWM0MZZh8ZhHPSucNqvJeUtno11lEB+Lt+sLOUJ4K+tU6/2O0xKkn0YIwqBwPxE+RWLvzs/ZJ3w93GZQgODPKr3IA1oB5z5lDfDgvL32YkzlWyR7ZMv3v91zDXOpA90lKoZ64391AoGASrNhwDUb75QSO9Awrwel3NRqdeULqRrBVV4hgj1It5K4FNY+JZIDGKLgEC+yRLA8XwCxplM963vlog5X86Q0AqtXMFv4QQcPvCHA0jIalYEBAVYL5WZaHxtbbB9Gj/ne4MCwovaw+buGvRmEQTaud3iHgBibYXqFOF0UnVcaUiE=";
// 3.支付宝公钥
// public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BALK+ff25orUZgcw3TBGxHJ/L40DnwbXeo8kX+UVxzIeJM7C9PmEs7bCFB+1slxmN/a6QIDAQAB";
// 4.服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http:/xxxxxxx";
//5.页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址
public static String return_url = "http://www.xxx.com/alipay/return_url.do";
// 6.请求支付宝的网关地址
public static String URL = "https://openapi.alipaydev.com/gateway.do";
// public static String URL = "https://openapi.alipay.com/gateway.do";
//沙盒环境https://openapi.alipaydev.com/gateway.do
//正式环境https://openapi.alipay.com/gateway.do
// 7.编码
public static String CHARSET = "UTF-8";
// 8.返回格式
public static String FORMAT = "json";
// 9.加密类型
public static String SIGNTYPE = "RSA2";
}
3创建支付宝订单
public String createZfbOrder(String userId,String amount) {
//订单号
String outTradeNo = UUID.randomUUID().toString().replaceAll("-", "");
//金额
//实例化客户端
AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.URL, AlipayConfig.APPID, AlipayConfig.RSA_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, "RSA2");
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
// 对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。
model.setBody("充值");
// 商品的标题/交易标题/订单标题/订单关键字等。
model.setSubject("充值有福币");
// 商户网站唯一订单号
model.setOutTradeNo(outTradeNo);
// 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。
// 注:若为空,则默认为15d。
model.setTimeoutExpress("30m");
// 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
model.setTotalAmount(amount);
// 固定值
model.setProductCode("QUICK_MSECURITY_PAY");
// 商品主类型:0—虚拟类商品;1—实物类商品 虚拟类商品不支持使用花呗渠道
model.setGoodsType("0");
//优惠参数 注:仅与支付宝协商后可用
// model.setPromoParams("{\"storeIdType\":\"1\"}");
request.setBizModel(model);
request.setNotifyUrl(AlipayConfig.notify_url);
try {
//这里和普通的接口调用不同,使用的是sdkExecute
AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
return response.getBody();
} catch (AlipayApiException e) {
e.printStackTrace();
}
return null;
}
4将上面方法返回的东西丢给app 让app让app用支付宝的SDK掉起支付宝App进行支付
5支付后的信息回发送到我们设置的回调地址上