背景:項目原有樂刷聚合支付,無法參加支付寶、微信等支付機構的官方活動
需求:增加原生支付(支付寶條碼支付)
方法:
一、官方文檔:https://docs.open.alipay.com/194/106039
二、沒有真實企業賬號的可以使用沙箱環境:https://docs.open.alipay.com/200/105311
三、兩種方法實現:
(一)基於支付寶標准SDK:alipay-sdk-java
1、pom文件中添加SDK依賴
地址:https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java
2、配置支付寶參數
在系統常量類里追加(我這里配的是沙箱參數,就直接寫在實現類里)
3.實現代碼

1 package com.bhp.aaa.bbb.service; 2 3 import com.alibaba.fastjson.JSONObject; 4 import com.alipay.api.AlipayApiException; 5 import com.alipay.api.AlipayClient; 6 import com.alipay.api.DefaultAlipayClient; 7 import com.alipay.api.request.AlipayTradeCancelRequest; 8 import com.alipay.api.request.AlipayTradePayRequest; 9 import com.alipay.api.request.AlipayTradeQueryRequest; 10 import com.alipay.api.request.AlipayTradeRefundRequest; 11 import com.alipay.api.response.AlipayTradeCancelResponse; 12 import com.alipay.api.response.AlipayTradePayResponse; 13 import com.alipay.api.response.AlipayTradeQueryResponse; 14 import com.alipay.api.response.AlipayTradeRefundResponse; 15 import com.google.common.collect.ImmutableMap; 16 import org.springframework.beans.factory.annotation.Autowired; 17 import org.springframework.stereotype.Service; 18 import org.wustrive.java.core.request.ViewResult; 19 import org.wustrive.java.dao.jdbc.dao.BaseDao; 20 21 import javax.servlet.http.HttpServletRequest; 22 import java.util.Map; 23 24 @Service 25 public class AlipayService1 { 26 // 正式 27 /*private static String gateway = SysConstants.Alipay.gateway; 28 private static String appId = SysConstants.Alipay.app_id; 29 private static String privateKey = SysConstants.Alipay.app_private_key; 30 private static String publicKey = SysConstants.Alipay.alipay_public_key;*/ 31 32 // 沙箱 33 //網關 34 private static String gateway = "https://openapi.alipaydev.com/gateway.do"; 35 //應用ID 36 private static String appId = "你自己的APPID"; 37 //應用秘鑰 38 private static String privateKey = "你自己的應用秘鑰"; 39 //支付寶公鑰 40 private static String publicKey = "你自己的支付寶公鑰"; 41 42 @Autowired 43 private BaseDao baseDao; 44 45 // 初始化一個統一的客戶端 46 AlipayClient alipayClient = new DefaultAlipayClient(gateway,appId,privateKey,"json","utf-8",publicKey,"RSA2"); 47 48 // 發起支付 49 public ViewResult alipayPay(AppUser appUser, String outTradeNo, String payMoney, String authCode){ 50 51 ViewResult viewResult = ViewResult.newInstance(); 52 String sql = "SELECT short_name FROM sys_merchants WHERE id=:merchantsId"; 53 String short_name = baseDao.queryForString(sql, ImmutableMap.of("merchantsId",appUser.getMerchantsId())); 54 55 JSONObject data = new JSONObject(); 56 data.put("out_trade_no",outTradeNo); 57 data.put("scene","bar_code"); 58 data.put("auth_code",authCode); 59 data.put("subject",short_name+"消費"); 60 data.put("store_id",appUser.getShopId()); 61 data.put("total_amount",payMoney); 62 63 AlipayTradePayRequest request = new AlipayTradePayRequest(); 64 //request.setNotifyUrl(notifyUrl); 65 request.setBizContent(data.toJSONString()); 66 try { 67 AlipayTradePayResponse response = alipayClient.execute(request); 68 if(response.isSuccess()){ 69 viewResult.success(response.getBody()); 70 } else { 71 viewResult.fail(response.getBody()); 72 } 73 } catch (AlipayApiException e) { 74 viewResult.fail(e); 75 e.printStackTrace(); 76 }finally { 77 return viewResult; 78 } 79 } 80 81 // 發起查詢 82 public ViewResult alipayQuery(String trade_no ){ 83 ViewResult viewResult = ViewResult.newInstance(); 84 JSONObject data = new JSONObject(); 85 data.put("trade_no",trade_no); 86 AlipayTradeQueryRequest request = new AlipayTradeQueryRequest(); 87 request.setBizContent(data.toJSONString()); 88 try { 89 AlipayTradeQueryResponse response = alipayClient.execute(request); 90 if(response.isSuccess()){ 91 viewResult.success(response.getBody()); 92 } else { 93 viewResult.fail(response.getBody()); 94 } 95 } catch (AlipayApiException e) { 96 viewResult.fail(e); 97 e.printStackTrace(); 98 } finally { 99 return viewResult; 100 } 101 } 102 103 // 發起撤銷 104 public ViewResult alipayCancel(String trade_no){ 105 ViewResult viewResult = ViewResult.newInstance(); 106 JSONObject data = new JSONObject(); 107 data.put("trade_no",trade_no); 108 AlipayTradeCancelRequest request = new AlipayTradeCancelRequest(); 109 request.setBizContent(data.toJSONString()); 110 try { 111 AlipayTradeCancelResponse response = alipayClient.execute(request); 112 if(response.isSuccess()){ 113 viewResult.success(response.getBody()); 114 } else { 115 viewResult.fail(response.getBody()); 116 } 117 } catch (AlipayApiException e) { 118 viewResult.fail(e); 119 e.printStackTrace(); 120 } finally { 121 return viewResult; 122 } 123 } 124 125 // 發起退款 126 public ViewResult alipayRefund(String trade_no,String refund_amount){ 127 ViewResult viewResult = ViewResult.newInstance(); 128 JSONObject data = new JSONObject(); 129 data.put("trade_no",trade_no); 130 data.put("refund_amount",refund_amount); 131 AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); 132 request.setBizContent(data.toJSONString()); 133 try { 134 AlipayTradeRefundResponse response = alipayClient.execute(request); 135 if(response.isSuccess()){ 136 viewResult.success(response.getBody()); 137 } else { 138 viewResult.fail(response.getBody()); 139 } 140 } catch (AlipayApiException e) { 141 viewResult.fail(e); 142 e.printStackTrace(); 143 } finally { 144 return viewResult; 145 } 146 } 147 148 149 150 151 }
未完,待續……