支付寶支付流程及注意事項(沙箱測試版) ---demo已做升級
項目demo下載-CSDN(新-推薦):https://download.csdn.net/download/qq_39938758/11751843
項目demo下載-CSDN(舊):https://download.csdn.net/download/qq_39938758/10581629
一、准備工作
1、springbootdemo

-
2、idea開發工具(有的跳過)
- idea下載鏈接

-
3、獲得沙箱帳號
-
注冊螞蟻金服開發者賬號(免費,不像蘋果會收取費用)
注冊地址:https://open.alipay.com,用你的支付寶賬號掃碼登錄,完善個人信息,選擇服務類型(我選的是自研)。

- 進入沙箱,第一次需要填寫信息!(我已經有了所以就不需要了)

- 記得把下面生成的商戶公鑰保存到沙箱上

-
4、生成2048位商戶公私鑰(私鑰保存與支付寶)
-
下載生成工具

- 生成公私鑰,並且保存

- 保存公私鑰

- 把支付寶公鑰 保存到沙箱環境。
- 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:支付寶相關資料鏈接
備注3:個人說明
- * 沙箱版和正式流程無誤,只是參數變化 和需要把應用增加到支付寶里面
-
-------------------------------------------------------------------------------------------------------------------------------------------------歡迎光臨,期待您的下次光臨!
