java實現支付寶接口-支付流程


支付寶支付流程及注意事項(沙箱測試版) ---demo已做升級

​ 項目demo下載-CSDN(新-推薦)https://download.csdn.net/download/qq_39938758/11751843

 項目demo下載-CSDN(舊):https://download.csdn.net/download/qq_39938758/10581629

一、准備工作

1、springbootdemo

  • 下載springboot得demo

  • 2、idea開發工具(有的跳過)

    • idea下載鏈接
    • 3、獲得沙箱帳號

      • 注冊螞蟻金服開發者賬號(免費,不像蘋果會收取費用)

        注冊地址:https://open.alipay.com,用你的支付寶賬號掃碼登錄,完善個人信息,選擇服務類型(我選的是自研)。

      • 進入沙箱,第一次需要填寫信息!(我已經有了所以就不需要了)
      • 記得把下面生成的商戶公鑰保存到沙箱上
      • 4、生成2048位商戶公私鑰(私鑰保存與支付寶)

        • 進入官方地址:https://docs.open.alipay.com/291/105971

        • 下載生成工具

        • 生成公私鑰,並且保存
        • 保存公私鑰
        • 把支付寶公鑰 保存到沙箱環境。
        • 5、pom.xml文件依賴alipay得jar包
        • <dependency>    
              <groupId>com.alipay.sdk</groupId>
              <artifactId>alipay-sdk-java</artifactId>
              <version>3.0.0</version>
          </dependency><!-- 因為sdk有用這個包,所以需要有這個的哦。不過一般springboot項目已經自己引入了,就不用引入哈 -->
          <dependency>
              <groupId>commons-logging</groupId>
              <artifactId>commons-logging</artifactId>
              <version>1.1.1</version>
          </dependency><!-- 這個包是用戶參數轉成JSON用的 -->
          <dependency>
              <groupId>com.alibaba</groupId>
              <artifactId>fastjson</artifactId>
              <version>1.2.33</version>
          </dependency>
          <!-- 簡化代碼插件的包,記得要在idea安裝 lombok的插件哦 -->
          <dependency>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
          </dependency>

          二、支付寶支付代碼流程

          Demo項目結構: 請下載lombok插件

        • 第一步: 配置alipay.properties
        • # 應用ID,您的APPID,收款賬號既是您的APPID對應支付寶賬號
          app_id = 2016091600527203
          # 商戶私鑰,您的PKCS8格式RSA2私鑰
          merchant_private_key = MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCAWY4SMml0Y9cWjf/19/zTFu9YFsmsV/QiD/9yk37MNrYxElo6hcdWbxBMX984kZVMs9WR0y3LcoENo43dOch+5UWsmHdMdX/DLJ4p4qx7JuYKUIcYT89dzAJe6e0LN/b7Sng7MoN9QD/iuzGTfHehZ2nU9VqBE7OW05m74MfT9rEYjLuJQc7IGezFV3uBbAUjtHUhIzq4iQ5shMf8JewbWXAh45FhHadD6yVFxPDmkyQJSRlfE39jXN+I4RILegMeJJNu5Mzd5GmTGukksLOoCBVoWpa5CgoPymBHosQpWgpjw5ItCJ4o0ttxnKW10kWQxcE+5E7nwTMpXdy3/veRAgMBAAECggEAdgtnmh7ZVF2a7biOCDgbRD2cxcS3mRWPiGB0TXmQLdvH9xvs9lQhwMIHGGc4kvt6eAAR1buHK81VGikpiaTiXKsbSKE1X5HVfrkjglxizCU7f5MOnPKSQq8mIws8o4vGUNnt+Gv9+Q1FdI88Cmx4Tm8hK+a4ZWysSHS2uNAEmVG5EB5zZmAG/N+oXGRQ+Kisf5pO27AQpc7bC1w6FZ1Te1wZKEX+5GPZc7dRLINvbzX7eEXiAE9Rv3RzRU+98HGXgA3kMTmQXqN24y2NIKOB5TZz8zsuUmW+haoxvRoL4fxnIhuaH39lwvsJyQa/T8kLWw9+2CmVDvEfWk/y2sDkAQKBgQDuWkOdlwJIySzXwTNlPQ7q0X3GJ3rjkgG0xysIHP69GCk5WwxlKx8WOORfnoPpYT0V8G1IYfy7RpVzqRkx3mYOEEk1OQGVhGRPuDnjhdyc39NVcrPU2P09aVnOp074Fwr7ei7tUAhSNJE0YNgyteq4pDRCl3cggeqQB/KWrgFj0QKBgQCJ2kxHaH8zPVGot3NdGhnuw9KibdPL3kx2n6ZSBL5IGQZk0sMCsnfb2dHCTZJhZs9MCG7okpBD9m0JsmY9b3FEupbA4YbF+4PKId+ShlUJNY2RDPNzb3kyYbEFzHcUJo7qFkeASTWIxKeZYXhtWT0Ue0Zf+lnsalKcm/dq8bgHwQKBgA0yyF24l/LJ2QbVdvAbMnFESm+njgF9+0Q0Zyia2mxEIzw+02/itGT5n4O/9lP9A3Hsj1CbxG/mV65A5dlCFGqg8jzVPEY4P4m+jM4RgobZSg2IPXcC0PsOk1+DGjdYp04HlQOlE+DhckzxM+eS9T1mMlKhqoINT5zMI92+IuuRAoGAcTPc0/8SBcfjGQOdLuVSSmpwvIYoGRByBi/QayYOBDLYt08EaWCZYOccg80j2eyNasi6Gy7QXZ8tp3rizqyHfYMkbTxGaqrCbOkoKbE6f5eEq4rRGQh/pEnpDvP7DYckcULecJCt76ReZWxPcqyHphwdjI+P7L7bHFRP93iMQYECgYAk/zyG+5qjEcAnyIptvrgxSklBz/2P1AEex4ZcJpkc3EgYB5sSqiSt4tpAb3s+XfQkP/+5djgGdFSIn4QmczSSf/35cck8G+bISOPoZ08wGRv8LzhXXRVpIooAtEYnJk+Xp3E1RcFmuq2IZCRX7IU3AMFRg941vW+4EAdKmk6oPQ==
          # 支付寶公鑰,查看地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。
          alipay_public_key = MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgFmOEjJpdGPXFo3/9ff80xbvWBbJrFf0Ig//cpN+zDa2MRJaOoXHVm8QTF/fOJGVTLPVkdMty3KBDaON3TnIfuVFrJh3THV/wyyeKeKseybmClCHGE/PXcwCXuntCzf2+0p4OzKDfUA/4rsxk3x3oWdp1PVagROzltOZu+DH0/axGIy7iUHOyBnsxVd7gWwFI7R1ISM6uIkObITH/CXsG1lwIeORYR2nQ+slRcTw5pMkCUkZXxN/Y1zfiOESC3oDHiSTbuTM3eRpkxrpJLCzqAgVaFqWuQoKD8pgR6LEKVoKY8OSLQieKNLbcZyltdJFkMXBPuRO58EzKV3ct/73kQIDAQAB
          # 服務器異步通知頁面路徑  需http://格式的完整路徑,不能加?id=123這類自定義參數 
          notify_url = http://外網ip:端口/error.html
          # 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義參數 
          return_url = http://外網ip:端口/sccess.html
          # 簽名方式
          sign_type = RSA2
          # 字符編碼格式
          charset = utf-8
          # 支付寶網關
          gatewayUrl = https://openapi.alipaydev.com/gateway.do
          # 支付寶網關
          log_path = "C:\\"

          第二步: 編寫測試頁面 index.html

        • <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>Title</title>
          </head>
          <body>
          <H1>支付寶demo測試</H1>
          <hr>
          <form action="order/alipay" method="post">
              *商戶訂單 :<br>
              <input type="text" name="out_trade_no"><br>
              *訂單名稱 :<br>
              <input type="text" name="subject"><br>
              *付款金額 :<br>
              <input type="text" name="total_amount"><br>
               商品描述 :<br>
              <input type="text" name="body"><br>
              <input type="submit" value="支付寶支付">
          </form>
          </body>
          </html>

          第三步: 編寫參數bean

        • /*支付實體對象*/
          @Data
          @Accessors(chain = true)
          public class AlipayBean {
              /*商戶訂單號,必填*/
              private String out_trade_no;
              /*訂單名稱,必填*/
              private String subject;
              /*付款金額,必填*/
              private StringBuffer total_amount;
              /*商品描述,可空*/
              private String body;
              /*超時時間參數*/
              private String timeout_express="10m";
              private String product_code="FAST_INSTANT_TRADE_PAY";
          }

          第四步: 編寫應用加載完成加載相關配置參數

        • /* 應用啟動加載文件*/
          @Component
          public class PropertiesConfig implements ApplicationListener {
              //保存加載配置參數
              private static Map<String, String> aliPropertiesMap = new HashMap<String, String>();
              
              /*獲取配置參數值*/
              public static String getKey(String key) {
                  return aliPropertiesMap.get(key);
              }
              
              /*監聽啟動完成,執行配置加載到aliPropertiesMap*/
              public void onApplicationEvent(ApplicationEvent event) {
                  if (event instanceof ApplicationReadyEvent) {
                      this.init(aliPropertiesMap);//應用啟動加載
                  }
              }
          ​
              /*初始化加載aliPropertiesMap*/
              public void init(Map<String, String> map) {
                  // 獲得PathMatchingResourcePatternResolver對象
                  PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
                  try {
                      //加載resource文件(也可以加載resources)
                      Resource resources = resolver.getResource("classpath:config/alipay.properties");
                      PropertiesFactoryBean config = new PropertiesFactoryBean();
                      config.setLocation(resources);
                      config.afterPropertiesSet();
                      Properties prop = config.getObject();
                      //循環遍歷所有得鍵值對並且存入集合
                      for (String key : prop.stringPropertyNames()) {
                          map.put(key, (String) prop.get(key));
                      }
                  } catch (Exception e) {
                      new Exception("配置文件加載失敗");
                  }
              }
          }

          第五步: 編寫支付寶util

        • /* 支付寶 */
          public class AlipayUtil {
              public static String connect(AlipayBean alipayBean) throws AlipayApiException {
                   //1、獲得初始化的AlipayClient
                  AlipayClient alipayClient = new DefaultAlipayClient(
                          PropertiesConfig.getKey("gatewayUrl"),//支付寶網關
                          PropertiesConfig.getKey("app_id"),//appid
                          PropertiesConfig.getKey("merchant_private_key"),//商戶私鑰
                          "json",
                          PropertiesConfig.getKey("charset"),//字符編碼格式
                          PropertiesConfig.getKey("alipay_public_key"),//支付寶公鑰
                          PropertiesConfig.getKey("sign_type")//簽名方式
                  );
                  //2、設置請求參數
                  AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
                  //頁面跳轉同步通知頁面路徑
                  alipayRequest.setReturnUrl(PropertiesConfig.getKey("return_url"));
                  // 服務器異步通知頁面路徑
                  alipayRequest.setNotifyUrl(PropertiesConfig.getKey("notify_url"));
                  //封裝參數
                  alipayRequest.setBizContent(JSON.toJSONString(alipayBean));
          ​
                  //3、請求支付寶進行付款,並獲取支付結果
                  String result = alipayClient.pageExecute(alipayRequest).getBody();
                  //返回付款信息
                  return  result;
              }
          }

          第六步: 編寫業務層

        •     /*支付服務*/
              public interface PayService {
                  /*支付寶*/
                  String aliPay(AlipayBean alipayBean) throws AlipayApiException;
              }
          /* 支付服務 */
          @Service(value = "alipayOrderService")
          public class PayServiceImpl implements PayService {
              @Override
              public String aliPay(AlipayBean alipayBean) throws AlipayApiException {
                  return AlipayUtil.connect(alipayBean);
              }
          }

          第七步:編寫web接口測試

        • /* 訂單接口 */
          @RestController()
          @RequestMapping("order")
          public class OrderController {
              @Resource
              private PayService payService;//調用支付服務
          /*阿里支付*/
              @PostMapping(value = "alipay")
              public String alipay(String out_trade_no,String subject,String total_amount,String body) throws AlipayApiException {
          ​
                  return  payService.aliPay(new AlipayBean()
                           .setBody(body)
                           .setOut_trade_no(out_trade_no)
                           .setTotal_amount(new StringBuffer().append(total_amount))
                           .setSubject(subject));
              }
          }

          備注1:相關注意事項

          1、注意下載lombok插件和依賴lombokjar

          2、其中service可以不要的,直接接口調用util文件也可以,當然你也可以直接在接口寫連接加載都可以

          備注2:支付寶相關資料鏈接

          1、實現支付寶支付功能

          2、叫你如何用支付寶測試掃一掃付錢功能

          備注3:個人說明

          • * 沙箱版和正式流程無誤,只是參數變化  和需要把應用增加到支付寶里面

-------------------------------------------------------------------------------------------------------------------------------------------------歡迎光臨,期待您的下次光臨!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM