一、支付宝API简介
打开支付宝开放平台:https://open.alipay.com/api,
这是支付宝的API文档网站,内容如下:

在支付宝中把支付分为:当面支付、电脑网页、APP支付、手机网站网页、周期扣款等业务。
我们使用的是手机网站支付 的API,如上图所示,点击手机网站支付,手机网站支付是指商户在移动端网页展示商品或服务,用户在商户页面确认使用支付宝支付后,浏览器自动跳转支付宝APP或支付宝网页完成付款的支付产品。该产品在签约完成后,需要技术集成方可使用。
开发文档:
package com.java.sdk.demo;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.AlipayConfig;
import com.alipay.api.domain.ExtUserInfo;
import com.alipay.api.response.AlipayTradeWapPayResponse;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.alipay.api.domain.ExtendParams;
import com.alipay.api.domain.GoodsDetail;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.FileItem;
import java.util.Base64;
import java.util.ArrayList;
import java.util.List;
public class AlipayTradeWapPay {
public static void main(String[] args) throws AlipayApiException {
// 初始化SDK
AlipayClient alipayClient = new DefaultAlipayClient(getAlipayConfig());
// 构造请求参数以调用接口
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
// 设置商户订单号
model.setOutTradeNo("70501111111S00111111911333");
// 设置订单总金额
model.setTotalAmount("0.01");
// 设置订单标题
model.setSubject("测试商品");
// 设置产品码
model.setProductCode("QUICK_WAP_WAY");
// 设置针对用户授权接口
model.setAuthToken("appopenBb64d181d0146481ab6a762c00714cC27");
// 设置用户付款中途退出返回商户网站的地址
model.setQuitUrl("http://www.taobao.com/product/113714.html");
// 设置订单包含的商品列表信息
List<GoodsDetail> goodsDetail = new ArrayList<GoodsDetail>();
GoodsDetail goodsDetail0 = new GoodsDetail();
goodsDetail0.setGoodsName("ipad");
goodsDetail0.setAlipayGoodsId("20010001");
goodsDetail0.setQuantity(1L);
goodsDetail0.setPrice("2000");
goodsDetail0.setGoodsId("apple-01");
goodsDetail0.setGoodsCategory("34543238");
goodsDetail0.setCategoriesTree("124868003|126232002|126252004");
goodsDetail0.setBody("手机");
goodsDetail0.setShowUrl("http://www.alipay.com/xxx.jpg");
goodsDetail.add(goodsDetail0);
model.setGoodsDetail(goodsDetail);
// 设置订单绝对超时时间
model.setTimeExpire("2026-12-31 10:05:00");
// 设置业务扩展参数
ExtendParams extendParams = new ExtendParams();
extendParams.setSysServiceProviderId("2088511833207846");
extendParams.setHbFqSellerPercent("100");
extendParams.setHbFqNum("3");
extendParams.setIndustryRefluxInfo("{\"scene_code\":\"metro_tradeorder\",\"channel\":\"xxxx\",\"scene_data\":{\"asset_name\":\"ALIPAY\"}}");
extendParams.setRoyaltyFreeze("true");
extendParams.setCardType("S0JP0000");
model.setExtendParams(extendParams);
// 设置商户传入业务信息
model.setBusinessParams("{\"mc_create_trade_ip\":\"127.0.0.1\"}");
// 设置公用回传参数
model.setPassbackParams("merchantBizType%3d3C%26merchantBizNo%3d2016010101111");
// 设置商户的原始订单号
model.setMerchantOrderNo("20161008001");
// 设置外部指定买家
ExtUserInfo extUserInfo = new ExtUserInfo();
extUserInfo.setCertType("IDENTITY_CARD");
extUserInfo.setCertNo("362334768769238881");
extUserInfo.setName("明明");
extUserInfo.setMobile("16587658765");
extUserInfo.setFixBuyer("F");
extUserInfo.setMinAge("18");
extUserInfo.setNeedCheckInfo("F");
extUserInfo.setIdentityHash("27bfcd1dee4f22c8fe8a2374af9b660419d1361b1c207e9b41a754a113f38fcc");
model.setExtUserInfo(extUserInfo);
request.setBizModel(model);
// 第三方代调用模式下请设置app_auth_token
// request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->");
AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "POST");
// 如果需要返回GET请求,请使用
// AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "GET");
String pageRedirectionData = response.getBody();
System.out.println(pageRedirectionData);
if (response.isSuccess()) {
System.out.println("调用成功");
} else {
System.out.println("调用失败");
// sdk版本是"4.38.0.ALL"及以上,可以参考下面的示例获取诊断链接
// String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response);
// System.out.println(diagnosisUrl);
}
}
private static AlipayConfig getAlipayConfig() {
String privateKey = "<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->";
String alipayPublicKey = "<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->";
AlipayConfig alipayConfig = new AlipayConfig();
alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
alipayConfig.setAppId("<-- 请填写您的AppId,例如:2019091767145019 -->");
alipayConfig.setPrivateKey(privateKey);
alipayConfig.setFormat("json");
alipayConfig.setAlipayPublicKey(alipayPublicKey);
alipayConfig.setCharset("UTF-8");
alipayConfig.setSignType("RSA2");
return alipayConfig;
}
}
运行测试:

复制内容到一个html页面中,然后保存;双击html页面。显示如下:

二、支付配置
支付宝提供了更轻量化和简单的api; easy-sdk ;链接地址:https://opendocs.alipay.com/open/02np95

示例代码:
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.factory.Factory.Payment;
import com.alipay.easysdk.kernel.Config;
import com.alipay.easysdk.kernel.util.ResponseChecker;
import com.alipay.easysdk.payment.facetoface.models.AlipayTradePrecreateResponse;
public class Main {
public static void main(String[] args) throws Exception {
// 1. 设置参数(全局只需设置一次)
Factory.setOptions(getOptions());
try {
// 2. 发起API调用(以创建当面付收款二维码为例)
AlipayTradePrecreateResponse response = Payment.FaceToFace()
.preCreate("Apple iPhone11 128G", "2234567890", "5799.00");
// 3. 处理响应或异常
if (ResponseChecker.success(response)) {
System.out.println("调用成功");
} else {
System.err.println("调用失败,原因:" + response.msg + "," + response.subMsg);
}
} catch (Exception e) {
System.err.println("调用遭遇异常,原因:" + e.getMessage());
throw new RuntimeException(e.getMessage(), e);
}
}
private static Config getOptions() {
Config config = new Config();
config.protocol = "https";
config.gatewayHost = "openapi.alipay.com";
config.signType = "RSA2";
config.appId = "<-- 请填写您的AppId,例如:2019091767145019 -->";
// 为避免私钥随源码泄露,推荐从文件中读取私钥字符串而不是写入源码中
config.merchantPrivateKey = "<-- 请填写您的应用私钥,例如:MIIEvQIBADANB ... ... -->";
//注:证书文件路径支持设置为文件系统中的路径或CLASS_PATH中的路径,优先从文件系统中加载,加载失败后会继续尝试从CLASS_PATH中加载
config.merchantCertPath = "<-- 请填写您的应用公钥证书文件路径,例如:/foo/appCertPublicKey_2019051064521003.crt -->";
config.alipayCertPath = "<-- 请填写您的支付宝公钥证书文件路径,例如:/foo/alipayCertPublicKey_RSA2.crt -->";
config.alipayRootCertPath = "<-- 请填写您的支付宝根证书文件路径,例如:/foo/alipayRootCert.crt -->";
//注:如果采用非证书模式,则无需赋值上面的三个证书路径,改为赋值如下的支付宝公钥字符串即可
// config.alipayPublicKey = "<-- 请填写您的支付宝公钥,例如:MIIBIjANBg... -->";
//可设置异步通知接收服务地址(可选)
config.notifyUrl = "<-- 请填写您的支付类接口异步通知接收服务地址,例如:https://www.test.com/callback -->";
//可设置AES密钥,调用AES加解密相关接口时需要(可选)
config.encryptKey = "<-- 请填写您的AES密钥,例如:aa4BtZ4tspm2wnXLb1ThQA== -->";
return config;
}
}
三、支付业务场景
在支付宝中把支付分为:当面支付、电脑网页、APP支付、手机网页、周期扣款等业务。
3.1 当面支付
当面付是指商家通过扫用户付款码或用户扫商家二维码来完成付款的一种支付产品。包括付款码支付和扫码支付两种收款方式。适用于线下实体店支付、面对面支付、自助售货机等场景。
1)付款码支付(用户扫商家):商家提供收款二维码,由用户通过支付宝扫码支付,来实现收款。
2)付款码支付(商家扫用户付款码):商家使用扫码枪或其它扫码机具扫描用户出示的付款码,来实现收款。
3.2 电脑网页
电脑网站支付是指商户在电脑网页展示商品或服务,用户在商户页面确认使用支付宝支付时,浏览器自动跳转支付宝电脑网页完成付款的支付产品。该产品在签约完成后,需要技术集成方可使用。
3.3 APP支付
App 支付是指商家在移动应用 App 中集成 SDK,调起支付宝来完成付款的一种支付产品。该产品在签约完成后,需要技术集成方可使用
3.4 手机网页支付
手机网站支付是指商户在移动端网页展示商品或服务,用户在商户页面确认使用支付宝支付时,浏览器自动跳转支付宝 App 或支付宝网页完成付款的支付产品。该产品在签约完成后,需要技术集成方可使用。
浙公网安备 33010602011771号