天天看點

Java(支付寶)[沙箱環境]

注冊支付寶開放平台

支付寶開放平台:https://www.alipay.com/

支付寶掃碼注冊後,以後掃碼就可以登入了。

使用沙箱環境

選擇 開發中心 → 研發服務。

Java(支付寶)[沙箱環境]

使用沙箱環境文檔:https://docs.open.alipay.com/200/105311/

栗子

添加 maven 依賴:

<dependency>
	<groupId>com.alipay.sdk</groupId>
	<artifactId>alipay-sdk-java</artifactId>
	<version>3.7.73.ALL</version>
</dependency>
<dependency>
	<groupId>commons-logging</groupId>
	<artifactId>commons-logging</artifactId>
	<version>1.1.1</version>
</dependency>
           

支付方法:

  • 檢視沙箱應用,可以找到 appid、gateway_url(支付寶網關)、alipay_public_key(支付寶公鑰)。
  • 生成密鑰(merchant_private_key):https://docs.open.alipay.com/291/105971
  • sign_type:RSA2
  • notify_url:外網可以通路的回調位址。
  • return_url:外網可以通路的傳回位址。
@PostMapping("goPay")
@ResponseBody
public String goPay(@RequestParam("taskId") String taskId) {
    String result = "";
    try {
        AlipayClient alipayClient = new DefaultAlipayClient(gateway_url, app_id, merchant_private_key, "json", charset, alipay_public_key, sign_type);
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(return_url);
        alipayRequest.setNotifyUrl(notify_url);
        Order order = orderService.get(taskId);
        String out_trade_no = taskId + "_" + new Date().getTime();
        Double amount = (double) order.getAmount();
        String total_amount = (amount / 100) + "";
        String subject = taskId;
        String timeout_express = "1c";
        alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\","
                + "\"total_amount\":\"" + total_amount + "\","
                + "\"subject\":\"" + subject + "\","
                + "\"timeout_express\":\"" + timeout_express + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
        result = alipayClient.pageExecute(alipayRequest).getBody();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result;
}
           

回調方法:

@RequestMapping("/notifyUrl")
public void notifyUrl(HttpServletRequest request) throws Exception {
    Map<String, String> params = new HashMap<String, String>();
    Map<String, String[]> requestParams = request.getParameterMap();
    for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext(); ) {
        String name = (String) iter.next();
        String[] values = (String[]) requestParams.get(name);
        String valueStr = "";
        for (int i = 0; i < values.length; i++) {
            valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
        }
        params.put(name, valueStr);
    }
    boolean signVerified = AlipaySignature.rsaCheckV1(params, alipay_public_key, charset, sign_type);
    if (!signVerified) {
        return;
    }
    String trade_status = request.getParameter("trade_status");
    if (trade_status.equals("TRADE_SUCCESS")) {
        System.out.println("支付成功");
    }
}
           

傳回方法:

@RequestMapping("/returnUrl")
public String returnUrl() {
	return "success";
}