項目中我們集成了支付寶,用戶可以使用支付寶來進行支付
項目測試時,我們當然也需要一套測試環境對支付流程進行測試
如果我們使用線上的支付寶配置進行測試,那么我們必須使用真實貨幣進行支付
並且支付的金額會進入生產環境的支付寶綁定銀行卡中,造成諸多不便
這里,支付寶為測試提供了一個沙箱環境,使我們可以使用虛擬貨幣進行支付測試
這篇文章就來詳細說一下支付寶沙箱環境的配置和使用
首先創建支付寶配置文件類:
@Configuration
@Data
public class AliPayConfig {
/**
* 應用ID,您的APPID,收款賬號既是您的APPID對應支付寶賬號
*/
@Value("${sdk.alipay.appID}")
private String appID;
/**
* 商戶私鑰,您的PKCS8格式RSA2私鑰
*/
@Value("${sdk.alipay.merchantPrivateKey}")
private String merchantPrivateKey;
/**
* 支付寶公鑰
*/
@Value("${sdk.alipay.alipayPublicKey}")
private String alipayPublicKey;
/**
* 簽名方式
*/
@Value("${sdk.alipay.signType}")
private String signType;
/**
* 網關
*/
@Value("${sdk.alipay.gatewayUrl}")
private String gatewayUrl;
/**
* 編碼
*/
@Value("${sdk.alipay.charset}")
private String charset;
/**
* 異步通知地址
*/
@Value("${sdk.alipay.notifyUrl}")
private String notifyUrl;
/**
* 類型
*/
@Value("${sdk.alipay.format}")
private String format;
/**
* 商戶號
*/
@Value("${sdk.alipay.sysServiceProviderId}")
private String sysServiceProviderId;
登陸支付寶開放平台進行沙箱環境配置
注意:沙箱環境的支付寶網關、公鑰私鑰都和正式不同,現在做的是沙箱環境的模擬支付
生成RSA密鑰:https://docs.open.alipay.com/291/106074
上傳應用公鑰並獲取支付鑰:https://docs.open.alipay.com/291/105972/
使用應用私鑰生成請求簽名:https://docs.open.alipay.com/291/105974/
使用支付寶公鑰驗簽:https://docs.open.alipay.com/291/106074/
下載密匙生成工具:https://docs.open.alipay.com/291/105971
然后生成密鑰:
生成公鑰 私鑰以后把公鑰上傳到支付寶,在開發者配置中點擊 RSA2(SHA256)密鑰
如下圖:
上傳成功之后點擊查看支付寶公鑰,注意這里不要搞反了在配置文件中我們要的是支付寶給我們的公鑰不是我們剛剛生成的公鑰!
配置成功,現在配置項目
打開配置文件添加配置:
商戶私鑰就是剛剛生成的私鑰
支付寶公鑰不是我們生成的公鑰,是支付寶給我們的公鑰
切記 不然簽名校驗會不通過
添加生成支付代碼,簡單創建支付沒有加參數和業務代碼:
@Override
public String payWithAliPay() throws AlipayApiException {
/**
* 業務代碼
*/
String order_no = UUID.randomUUID().toString(); //77777777
String body = "";
String total_fee = "999.99"; //真實金錢
AlipayClient alipayClient = new DefaultAlipayClient(aliPayConfig.getGatewayUrl(), aliPayConfig.getAppID(), aliPayConfig.getMerchantPrivateKey(), aliPayConfig.getFormat(),
aliPayConfig.getCharset(), aliPayConfig.getAlipayPublicKey(), aliPayConfig.getSignType()); //獲得初始化的AlipayClient
AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();//創建API對應的request類
JSONObject jsonObject = new JSONObject();
/**
* 訂單號
*/
jsonObject.put("out_trade_no", order_no);
/**
* 支付金額
*/
jsonObject.put("total_amount", total_fee);
jsonObject.put("body", "");
/**
* 訂單主題
*/
jsonObject.put("subject", "測試支付寶支付");
/**
* 訂單支付有效時間
*/
jsonObject.put("timeout_express", "90m");
request.setBizContent(jsonObject.toString());
request.setNotifyUrl(aliPayConfig.getNotifyUrl());
AlipayTradePrecreateResponse response = alipayClient.execute(request);
System.err.print(response.getBody());
//根據response中的結果繼續業務邏輯處理
if (response.getMsg().equals("Success")) {
String qrcode = response.getQrCode();
return qrcode;
// return qrcode;
}
return "請求失敗";
}
返回結果:
https://qr.alipay.com/bax06188ujygeuazvcah0008
生成二維碼,這里就不使用代碼生成了
下載沙箱支付寶進行掃描:
支付寶支付是需要回調的
推薦一個內網穿透工具Ngrok
使用方法:
把地址copy到項目的支付寶回調地址中即可
GIT地址:https://github.com/sunluomeng/springboot-alipay
有問題的話可以在公眾號內留言,我會第一時間回復
或者回復“內網” 獲得工具
長按識別二維碼,了解更多
