系统交互流程
请求 alipay.trade.wap.pay(手机网站支付接口2.0接口)生成 form 表单数据返回给前端,前端模拟表单提交唤起收银台,用户输入支付密码确认支付后创建订单。
注意:订单创建实际创建时间也为用户支付时间,非唤起收银台时间。
示例代码
bizContent={
"out_trade_no":"20220923010102211",//商户交易号,确保唯一,
"total_amount":0.01,//订单总金额
"subject":"手机网站支付",//订单标题
"product_code":"QUICK_WAP_WAY",
"timeout_express":"30m",//可选,订单相对超时时间,在订单创建后开始生效,超时未支付订单将关闭。
"quit_url":"http:\/\/domain.com\/quit",//用户付款中途退出返回商户网站的地址
"business_params":"{\"data\":123}",//非必填,业务信息,具体值要和支付宝约定
"passback_params":"merchantBizType%3d3C%26merchantBizNo%3d2016010101111"//非必填,商户自定义参数需要urlEncode
}
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, "json", CHARSET, ALIPAY_PUBLIC_KEY, "RSA2"); //获得初始化的AlipayClient
AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request
alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp");
alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共参数中设置回跳和通知地址
alipayRequest.setBizContent(参考上面bizContent值示例);
try {
form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
} catch (AlipayApiException e) {
e.printStackTrace();
}
参数名称 | 参数说明 |
out_trade_no | 商户订单号,需保证在商家系统中唯一。 |
subject | 商品的标题/交易标题/订单标题/订单关键字等。不可使用特殊字符,如 /,=,& 等。 |
total_amount | 订单金额。 |
quit_url | 用户付款中途退出返回商户网站的地址。 |
time_expire | 非必填,过期时间,用户多长时间不支付订单关闭,如果不传默认是和签约协议保持一致。 |
enable_pay_channels | 非必填,可用渠道,用户只能在指定渠道范围内支付 。当有多个渠道时用 “,” 分隔 。 |
disable_pay_channels | 非必填,禁用渠道,用户不可用指定渠道支付 ,当有多个渠道时用 “,” 分隔 。enable_pay_channels 与 disable_pay_channels 互斥。具体支持的支付渠道可查看 常见问题。 |
return_url | 支付成功后点击完成会自动跳转回商家页面地址, 同时在 URL 地址上附带支付结果参数,回跳参数可查看本文 附录 > 前台回跳参数说明。在 iOS 系统中,唤起支付宝客户端支付完成后,不会自动回到浏览器或商家 App。用户可手工切回到浏览器或商家 App。 |
notify_url | 异步通知地址,用于接收支付宝推送给商户的支付/退款成功的消息。 |
business_params | 非必填 ,业务信息,具体值要和支付宝约定。关于安全方面的可以参考 商户风险联防数据回传合作。 |
passback_params | 非必填,商户自定义参数,需要UrlEncode处理之后传入。passback_params只在异步通知中返回,同步通知不返回。 |
注意:由于前台回跳的不可靠性,前台回跳只能作为商家支付结果页的入口,最终支付结果必须以异步通知或查询接口返回为准,不能依赖前台回跳。