springboot整合支付寶支付

                 
  •  
  •  
今日主題:springboot整合支付寶支付

簡介

相信你們在項目開發中可能會碰到須要整合支付寶支付的功能,這個時候,咱們須要知道應該如何整合,我以前寫過一篇普通的支付寶支付的文章,今天來說一下springboot如何整合支付寶支付。html

環境

  • springboot
  • 支付寶開發平臺助手

實現過程

一、首先咱們須要創建一個springboot工程,支付寶開發助手須要去支付寶開發平臺去下載java

   <!-- 支付寶支付SDK -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>3.3.49.ALL</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.7</version>
        </dependency>

二、建立一個配置類spring

public class AlipayConfig {
 
//↓↓↓↓↓↓↓↓↓↓請在這裏配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

 // 應用ID,您的APPID,收款帳號既是您的APPID對應支付寶帳號
 public static String app_id = "";
 
 // 商戶私鑰,您的PKCS8格式RSA2私鑰
    public static String merchant_private_key = "";
 
 // 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。
    public static String alipay_public_key = "";

 // 服務器異步通知頁面路徑  需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網能夠正常訪問
 public static String notify_url = "http://localhost:8080/index.html";

 // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數,必須外網能夠正常訪問
 public static String return_url = "http://localhost:8080/payment/alipayReturnNotice";

    public static String return_url2 = "http://localhost:8080/payment/alipayReturnNotice2";

 // 簽名方式
 public static String sign_type = "RSA2";
 
 // 字符編碼格式
 public static String charset = "utf-8";

    public final static String FORMAT = "JSON";// 返回格式
 
 // 支付寶網關
 public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
 
 // 支付寶網關
 public static String log_path = "C:\\";


//↑↑↑↑↑↑↑↑↑↑請在這裏配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

    /** 
     * 寫日誌,方便測試(看網站需求,也能夠改爲把記錄存入數據庫)
     * @param sWord 要寫入日誌裏的文本內容
     */
    public static void logResult(String sWord) {
        FileWriter writer = null;
        try {
            writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");
            writer.write(sWord);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

3.咱們須要添加一個控制類數據庫

   @Autowired
    private AlipayService alipayService;
    /**
     * 直接購買商品邏輯
     * @param response
     * @param request
     */

    @RequestMapping(value = "/pay")
    @ResponseBody
    public void payMent(String money, HttpServletResponse response, HttpServletRequest request) {
        try {
            String result=alipayService.aliPay(money,response,request);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (AlipayApiException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 支付寶同步通知頁面,成功返回
     * @param request
     * @param response
     * @param httpSession
     * @return
     * @throws Exception
     */
    @RequestMapping(value = "/alipayReturnNotice")
    public String alipayReturnNotice(HttpServletRequest request, HttpServletRequest response, HttpSession httpSession) throws Exception {
        log.info("支付成功, 進入同步通知接口...");
        //獲取支付寶GET過來反饋信息
        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] + ",";
            }
            //亂碼解決,這段代碼在出現亂碼時使用
            // valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
            params.put(name, valueStr);
        }
        log.info("支付寶返回參數:"+params);
        // 調用SDK驗證簽名
        boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type);
        if(signVerified) {
            //商戶訂單號
            String orderNo = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");
            //支付寶交易號
            String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");
            //付款金額
            String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "UTF-8");

            //alipayService.onlyBuy(orderNo);

            log.info("******************** 支付成功(支付寶同步通知) ********************");
            log.info("* 訂單號: {}", orderNo);
            log.info("* 支付寶交易號: {}", trade_no);
            log.info("* 實付金額: {}", total_amount);
            log.info("***************************************************************");

        }else{
            log.error("同步回調簽名驗證失敗");
        }
        return "redirect:/index.html";
    }

業務類的實現方式json

public String aliPay(String money, HttpServletResponse response, HttpServletRequest request) throws Exception {
        response.setContentType("text/html;charset=utf-8");

        //將數據進行插入到訂單表中


        //調用支付寶支付
        PrintWriter out = response.getWriter();
        //得到初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
        //設置請求參數
        AlipayTradePagePayRequest aliPayRequest = new AlipayTradePagePayRequest();
        aliPayRequest.setReturnUrl(AlipayConfig.return_url);
        aliPayRequest.setNotifyUrl(AlipayConfig.notify_url);

        //商戶訂單號,後臺能夠寫一個工具類生成一個訂單號,必填
        String order_number = new String(System.currentTimeMillis()+"");
        //付款金額,從前臺獲取,必填
        String total_amount = new String(money);
        //訂單名稱,必填
        String subject = new String("訂單");

        aliPayRequest.setBizContent("{\"out_trade_no\":\"" + order_number + "\","
                + "\"total_amount\":\"" + total_amount + "\","
                + "\"subject\":\"" + subject + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
        //請求
        String result = null;

        result = alipayClient.pageExecute(aliPayRequest).getBody();

        //輸出
        out.println(result);
        log.info("返回結果={}",result);
        return result;
    }

四、直接訪問控制器的地址,就能夠彈出支付界面api

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

 

 


watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

相關文章
相關標籤/搜索