1. 程式人生 > 程式設計 >springboot 整合支付寶支付的示例程式碼

springboot 整合支付寶支付的示例程式碼

最簡單的springboot整合支付寶

1 註冊沙箱

沙箱是一個模擬環境登入,百度螞蟻金服開放平臺,支付寶掃碼登入如下

springboot 整合支付寶支付的示例程式碼

springboot 整合支付寶支付的示例程式碼

然後沙箱需要註冊一下,非常之簡單,註冊好以後進入到如下頁面,選沙箱工具,然後下載一個生成金鑰的工具。然後解壓按照裡面的readme生成公私金鑰,

springboot 整合支付寶支付的示例程式碼

選擇沙箱應用 上傳公鑰即可。。沙箱到這裡就基本完成了,裡面還有沙箱版本的的android app可以下載下來。

springboot 整合支付寶支付的示例程式碼

java 程式

1 新建一個springboot專案

因為我們建立的是一個web工程,所以,僅僅演示支付寶的demo,只需要勾選web就足夠了。

springboot 整合支付寶支付的示例程式碼

2 新增alipay-sdk-java和fastjson

fastjson 的作用是用到了其中的JSON.toString方法。
alipay-sdk-java的作用不用說自然是支付寶的sdk,是必不可少的。

 <dependency>
      <groupId>com.alipay.api</groupId>
      <artifactId>alipay-sdk-java</artifactId>
      <version>20170615110434</version>
    </dependency>

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

3 Config

新建一個支付寶的config檔案,如下
因為支付寶支付完成以後會有一個回撥函式返回商家頁面

springboot 整合支付寶支付的示例程式碼

該頁面完成過一會兒結束以後會有一個回撥,,因為回撥地址必須是公網可以直接訪問,這也就是下面用到了netapp對映的原因neturl即為對映的公網地址。

package com.example.pay.config.pay;

import org.springframework.context.annotation.Configuration;

import java.io.FileWriter;
import java.io.IOException;

/**
 * @author ligen
 * @title: AliPayConfig
 * @projectName demo
 * @description:
 * @date 2019/6/1014:20
 */
@Configuration
public class AliPayConfig {

//↓↓↓↓↓↓↓↓↓↓請在這裡配置您的基本資訊↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
 //  netapp對映的地址,,,根據自己的需要修改
  private static String neturl = "http://g5kike.natappfree.cc";

  // 應用ID,您的APPID,收款賬號既是您的APPID對應支付寶賬號 按照我文章圖上的資訊填寫
  public static String app_id = "2016092800619078";

  // 商戶私鑰,您的PKCS8格式RSA2私鑰 剛剛生成的私鑰直接複製填寫
  public static String merchant_private_key ="貼上生成的私鑰";

  // 支付寶公鑰,對應APPID下的支付寶公鑰。 按照我文章圖上的資訊填寫支付寶公鑰,別填成商戶公鑰
  public static String alipay_public_key = "貼上生成的公鑰";
  // 伺服器非同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義引數,其實就是你的一個支付完成後返回的頁面URL
  public static String notify_url = neturl+"/alipay/notify_url";

  // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義引數,其實就是你的一個支付完成後返回的頁面URL
  public static String return_url = neturl+"/alipay/return_url";

  // 簽名方式
  public static String sign_type = "RSA2";

  // 字元編碼格式
  public static String charset = "utf-8";

  // 支付寶閘道器
  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();
        }
      }
    }
  }
}

4 Service

呼叫支付寶的支付介面就是將一包資料通過支付寶SDK的一個介面傳送給支付寶的伺服器,然後他會返回給你一個輸入密碼確認支付的介面。
所以只需要幹兩件事

1 組裝資料

資料最少有5項,注意map的key和value都是字串

springboot 整合支付寶支付的示例程式碼

2 建立客戶端

建立一個 Client例項,其中的值即為我們Config中的值

springboot 整合支付寶支付的示例程式碼

3 傳送資料

這裡面先將資料轉化為request 最後將request通過Client發出去。用到了fastjson的toString方法。也就是前面匯入fastjson依賴的原因

springboot 整合支付寶支付的示例程式碼

package com.example.pay.config.pay;

import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.example.pay.domain.AlipayVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author ligen
 * @title: AliPayService
 * @projectName demo
 * @description:
 * @date 2019/6/119:11
 */
@Service
public class AliPayService {
  Logger logger = LoggerFactory.getLogger("AliPayService.class");


  @Autowired
  AlipayVo staticVo;

  //  支付服務
  public String aliPay() throws AlipayApiException {

    // 構建支付資料資訊
    Map<String,String> data = new HashMap<>();
    data.put("subject",staticVo.getSubject()); //訂單標題
    data.put("out_trade_no",new SimpleDateFormat().format(new Date())); //商戶訂單號,64個字元以內、可包含字母、數字、下劃線;需保證在商戶端不重複   //此處模擬訂單號為時間
    data.put("timeout_express",staticVo.getTimout_express()); //該筆訂單允許的最晚付款時間
    data.put("total_amount",staticVo.getTotle_amout()); //訂單總金額,單位為元,精確到小數點後兩位,取值範圍[0.01,100000000]
    data.put("product_code","FAST_INSTANT_TRADE_PAY"); //銷售產品碼,商家和支付寶簽約的產品碼,為固定值QUICK_MSECURITY_PAY


    //構建客戶端
    DefaultAlipayClient alipayRsa2Client = new DefaultAlipayClient(
        AliPayConfig.gatewayUrl,AliPayConfig.app_id,AliPayConfig.merchant_private_key,"json",AliPayConfig.charset,AliPayConfig.alipay_public_key,AliPayConfig.sign_type);
//    AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();// APP支付
    AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); // 網頁支付
//    AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest(); //移動h5
    request.setNotifyUrl(AliPayConfig.notify_url);
    request.setReturnUrl(AliPayConfig.return_url);
    request.setBizContent(JSON.toJSONString(data));
    logger.info(JSON.toJSONString(data));
    String response = alipayRsa2Client.pageExecute(request).getBody();
    logger.info(response);
    return response;
  }
}

5 controller 層很簡單 程式碼如下

package com.example.pay.controller;

import com.alipay.api.AlipayApiException;
import com.example.pay.config.pay.AliPayService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**

@author ligen
@title: PayController
@projectName demo
@description:
@date 2019/6/1013:25
*/
@Api(tags = “支付寶測試”)
@RestController
public class PayController {

Logger logger = LoggerFactory.getLogger("PayController.class");

@Autowired
AliPayService aliPayService;

@ApiOperation("支付介面")
@RequestMapping(value = "alipay/toPay/{amount}",method = RequestMethod.GET)
public String alipay(@PathVariable(value = "amount") Integer amount) throws AlipayApiException {
  return aliPayService.aliPay(amount);
}

@ApiOperation("支付非同步通知介面")
@GetMapping("alipay/notify_url")
public String notifyAlipay() {

  logger.info("----notify-----");
  return " a li pay notify ";
}

@ApiOperation("支付完成以後的回撥介面")
@GetMapping("alipay/return_url")
public String returnAlipay() {
  logger.info("----return-----");
  return " a li pay return ";
}
}

6 執行

瀏覽器訪問(我這裡設定了埠號為1234) 路徑最後面200是金額引數。

springboot 整合支付寶支付的示例程式碼

會跳轉到如下頁面,

springboot 整合支付寶支付的示例程式碼

此時可以使用沙箱支付寶app支付了,這裡我們使用賬戶登入。。。記住是付款使用者登入,而不是收款使用者。。。那麼哪裡看付款收款呢。
開啟螞蟻金服->開發者中心->沙箱 如下圖

springboot 整合支付寶支付的示例程式碼

登入第二個賬號後如下圖 密碼預設都是111111

springboot 整合支付寶支付的示例程式碼

springboot 整合支付寶支付的示例程式碼

如果設定了return url 將在該頁面結束以後自動跳轉至return url對應的頁面,如下 我在return url只是返回了一個字串。

springboot 整合支付寶支付的示例程式碼

程式碼git 地址

https://github.com/ligengithub/pay.git

到此這篇關於springboot 整合支付寶支付的示例程式碼的文章就介紹到這了,更多相關springboot 整合支付寶支付內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!