文档中心 > 当面付

1.获取SDK

2.配置公私钥、公共请求参数

普通代码Config配置示例:

public class Config {
	// 开发者应用私钥。java配置PKCS8格式,PHP/.Net语言配置rsa_private_key.pem文件中原始私钥。
	public static final String RSA_RRIVATE_KEY = "详见密钥生成";
	// 接口请求网关。当面付支付、查询、退款、撤销接口中为固定值
	public static final String URL = "https://openapi.alipay.com/gateway.do";
	// 商户应用APPID,只要您的应用中包含当面付接口且是开通状态,就可以用此应用对应的appid。开发者可登录开放平台-管理中心-对应应用中查看
	public static final String APPID = "2015********8324";
	// 编码字符集。默认 utf-8
	public static final String CHARSET = "utf-8";
	// 返回格式。默认json
	public static final String FORMAT = "json";
	// 支付宝公钥,用于获取同步返回信息后进行验证,验证是否是支付宝发送的信息。
	public static final String ALIPAY_PUBLIC_KEY = "开发者登录开放平台-管理中心-进入应用后查看";
}

AlipayClient是SDK公共请求方法类,AlipayClientFactory是AlipayClient的静态工厂类:

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;

public class AlipayClientFactory {
	// SDK 公共请求类,包含公共请求参数,以及封装了签名与验签,开发者无需关注签名与验签
	private static final AlipayClient client = new DefaultAlipayClient(Config.URL, Config.APPID, Config.RSA_RRIVATE_KEY, Config.FORMAT,
			Config.CHARSET, Config.ALIPAY_PUBLIC_KEY);
	public static AlipayClient getAlipayClientInstance() {
		return client;
	}
}

3.接口调用示例

接口调用示例大致分为3步:

  1. 拼装业务参数
  2. 将参数发送给开放平台服务端
  3. 获取开放平台服务端返回值,并进行具体业务处理

3.1.条码支付

alipay.trade.pay接口代码调用示例:

/**
  * 统一交易支付(条码支付、声波支付)
  * @param appAuthToken 如ISV代替商家调用当面付接口,需将商户授权后获取的app_auth_token带上;如商家申请当面付自己调用,则传null。
  * @param bizContent = "{\"out_trade_no\":\"123213445324532\",\"scene\":\"bar_code\",\"auth_code\":\"用户钱包付款码(数字)\",\"total_amount\":\"0.01\",\"subject\":\"测试\"}";
  * @return
  * @throws AlipayApiException 请处理异常
  */
public AlipayTradePayResponse pay(String appAuthToken, String bizContent)
		throws AlipayApiException {
	AlipayTradePayRequest request = new AlipayTradePayRequest();
	request.putOtherTextParam("app_auth_token", appAuthToken);
	request.setBizContent(bizContent);
	return AlipayClientFactory.getAlipayClientInstance().execute(request);
}

注意:
app_auth_token如何获取,详见“接入准备——第三方应用授权”。

3.2.扫码支付

alipay.trade.precreate接口代码调用示例:

/**
  * 扫码支付
  * @param appAuthToken 如ISV代替商家调用当面付接口,需将商户授权后获取的app_auth_token带上;如商家申请当面付自己调用,则传null。
  * @param bizContent = "{\"out_trade_no\":\"123213445324538\",\"total_amount\":\"0.01\",\"subject\":\"测试\"}";
  * @return
  * @throws AlipayApiException 请处理异常
  */
public AlipayTradePrecreateResponse precreate(String appAuthToken, String bizContent)
		throws AlipayApiException {
	AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
	request.putOtherTextParam("app_auth_token", appAuthToken);
	request.setBizContent(bizContent);
	return AlipayClientFactory.getAlipayClientInstance().execute(request);
}

3.3.订单查询

当支付结果非支付成功的状态时,开发者需调用查询接口,轮询订单状态。

  • 建议每次查询发起间隔时间5s,总轮询次数最多5次;
  • 如支付结果轮询5次后还是非支付成功状态,调用撤销接口,关闭订单并重新发起支付,详见订单撤销

alipay.trade.query接口代码调用示例:

/**
  * 查询订单
  * @param appAuthToken 如ISV代替商家调用当面付接口,需将商户授权后获取的app_auth_token带上;如商家申请当面付自己调用,则传null。
  * @param bizContent = "{\"out_trade_no\":\"123213445324538\"}";
  * @return
  * @throws AlipayApiException 请处理异常
  */
public AlipayTradeQueryResponse query(String appAuthToken, String bizContent)
		throws AlipayApiException {
	AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
	request.putOtherTextParam("app_auth_token", appAuthToken);
	request.setBizContent(bizContent);
	return AlipayClientFactory.getAlipayClientInstance().execute(request);
}

3.4.订单撤销

  • 调用支付宝支付接口时未返回明确的返回结果(如系统错误或网络异常),可使用本接口将交易进行撤销;
  • 如果用户支付失败,支付宝会将此订单关闭;如果用户支付成功,支付宝会将支付的资金退还给用户;
  • 撤销接口只能撤销24小时内的交易,超过24小时的交易,可以调用退款接口进行退款。

注意:
只有发生支付系统超时或者支付结果未知时可调用撤销,正常支付的订单如需实现相同功能请调用退款接口。

alipay.trade.cancel接口代码调用示例:

/**
  * 撤销订单
  * @param appAuthToken 如ISV代替商家调用当面付接口,需将商户授权后获取的app_auth_token带上;如商家申请当面付自己调用,则传null。
  * @param bizContent = "{\"out_trade_no\":\"123213445324538\"}";
  * @return
  * @throws AlipayApiException 请异常处理
  */
public AlipayTradeCancelResponse cancel(String appAuthToken, String bizContent)
		throws AlipayApiException {
	AlipayTradeCancelRequest request = new AlipayTradeCancelRequest();
	request.putOtherTextParam("app_auth_token", appAuthToken);
	request.setBizContent(bizContent);
	return AlipayClientFactory.getAlipayClientInstance().execute(request);
}

3.5.申请退款

当交易发生之后三个月内,由于买家或者卖家的原因需退款,卖家可通过退款接口将支付款退还给买家,支付宝将在收到退款请求并验证成功后,按退款规则将支付款原路退回到买家账号上。

alipay.trade.refund接口代码调用示例:

/**
  * 申请退款
  * @param appAuthToken 如ISV代替商家调用当面付接口,需将商户授权后获取的app_auth_token带上;如商家申请当面付自己调用,则传null。
  * @param bizContent = "{\"trade_no\":\"20160303363475784957483739744\",\"refund_amount\":\"0.01\"}";
  * @return
  * @throws AlipayApiException 请异常处理
  */
public AlipayTradeRefundResponse refund(String appAuthToken, String bizContent)
		throws AlipayApiException {
	AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
	request.putOtherTextParam("app_auth_token", appAuthToken);
	request.setBizContent(bizContent);
	return AlipayClientFactory.getAlipayClientInstance().execute(request);
}

FAQ

关于此文档暂时还没有FAQ
返回
顶部