繼前一篇[支付寶電腦在線支付一(靜態頁面)]這篇文件主要是講支付寶后台調用的實現。收銀台頁面默認會顯示支付寶支付的二維碼,用戶也可以通過點擊[立即支付]按鈕跳轉到支付寶的收銀台。
1.先添加支付寶的Maven依賴
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.4.27.ALL</version>
</dependency>
2.推薦二維碼支付實現
推薦二維碼支付是套在一個iframe里面的,如下:
<iframe name="alipayScanIframe" src="alipayQRCode.html?bizId=100&alipayPayMethod=4" width="103" height="103" frameborder="0"
scrolling="no" style="height: 103px;width:103px; border:1px solid #aaa;"></iframe>
后台alipayQRCode方法部分實現如下,支付寶API上面類似的代碼。這里只需要注意如果是生成二維碼支付的話qr_pay_mode的值要為4並且指定寬度。
DefaultAlipayClient("https://openapi.alipay.com/gateway.do", yourAppId,
YourAlipayPrivateKey(), "json",
"utf-8",
YourAlipayPublicKey(),
"RSA2");
// 設置請求參數
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(alipayReturnUrl);
alipayRequest.setNotifyUrl(alipayNotifyUrl);
// 商戶訂單號,商戶網站訂單系統中唯一訂單號,必填
String out_trade_no = orderInfo.getOrderCode();
// 付款金額,必填
String total_amount = orderInfo.getConfirmMoney().toString();
// 訂單名稱,必填
String subject = orderInfo.getDataInfo().getNetCode() + "的訂單";
// 商品描述,可空
String body = orderInfo.getDataInfo().getNetCode() + "的訂單";
Map<String, String> maps = new HashMap<String, String>(16);
maps.put("out_trade_no", out_trade_no);// 訂單號
maps.put("total_amount", total_amount);
maps.put("subject", subject);
maps.put("body", body);
maps.put("product_code", "FAST_INSTANT_TRADE_PAY"); // 固定值
maps.put("out_trade_no", out_trade_no);
//前台傳的Map集合,自己弄的
if (params != null)
{
// 收銀台的方式
String alipayPayMethod = params.get("alipayPayMethod");
// PC掃碼支付的方式,支持前置模式和跳轉模式
if (!StringUtil.isRealEmpty(alipayPayMethod))
{
maps.put("qr_pay_mode", alipayPayMethod);
if ("4".equals(alipayPayMethod))
{
maps.put("qrcode_width", "120");// 注:qr_pay_mode=4時該參數生效
}
}
}
alipayRequest.setBizContent(JSON.toJSONString(maps));
// 生成HTML返回給頁面
String form = alipayClient.pageExecute(alipayRequest).getBody();
getResponse().setContentType("text/html;charset=utf-8");
getResponse().getWriter().write(form);// 直接將完整的表單html輸出到頁面
getResponse().getWriter().flush();
getResponse().getWriter().close();
3.頁面跳轉支付
<!-- 提交后台發起支付-->
<form id="formPaySubmit" action="paySubmit.html" method="post" target="_blank">
<input type="hidden" name="payType" value="" />
<input type="hidden" name="bizId" value="100" />
</form>
頁面跳轉是由后台發起支付,上面代碼當點擊按鈕的時候在新的窗口提交一個表單到后台。給支付寶的參數只需要將上面代碼的qr_pay_mode的值改成2即可。
4.異步支付結果通知
支付結果支付寶會異步通知給上面設置的NotifyUrl中。具體的業務要根據實際情況實現。
