Java Web整合支付寶沙箱支付
阿新 • • 發佈:2018-11-19
前言
支付寶推出一個沙箱環境,能夠很好的模擬支付寶支付,並且還提供了demo,但demo是一個普通web專案,怎麼整合到Java Web專案呢,其實很簡單
簡單配置請參照支付寶沙箱支付開發文件
一、支付部分
AlipayConfig配置:博主使用的是頁面跳轉同步通知,返回路徑return_url為公網訪問地址,且不能攜帶引數,APPID、商戶私鑰、支付寶公鑰和支付寶閘道器換為自己的。
public class AlipayConfig{ // 應用ID,您的APPID,收款賬號既是您的APPID對應支付寶賬號 public static String app_id = "2016091600523365"; // 商戶私鑰,您的PKCS8格式RSA2私鑰 public static String merchant_private_key = "商戶私鑰"; // 支付寶公鑰,檢視地址:https://openhome.alipay.com/platform/keyManage.htm 對應APPID下的支付寶公鑰。 public static String alipay_public_key = "支付寶公鑰"; // 伺服器非同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義引數,必須外網可以正常訪問 public static String notify_url = "http://工程公網訪問地址"; // 頁面跳轉同步通知頁面路徑 需http://格式的完整路徑,不能加?id=123這類自定義引數,必須外網可以正常訪問 public static String return_url = "http://工程公網訪問地址"; // 簽名方式 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(); } } } } }
ServiceImpl層:
@Override public void save(HttpServletRequest request, HttpServletResponse response) throws AlipayApiException, IOException{ //設定編碼 response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); //獲得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type); //設定請求引數 AlipayTradePagePayRequest aliPayRequest = new AlipayTradePagePayRequest(); aliPayRequest.setReturnUrl(AlipayConfig.return_url); aliPayRequest.setNotifyUrl(AlipayConfig.notify_url); //商戶訂單號,必填 String order_number = new String(訂單號); //付款金額,必填 String total_amount = new String(付款金額); //訂單名稱,必填 String subject = new String("支付寶沙箱支付(名稱隨便起)"); aliPayRequest.setBizContent("{\"out_trade_no\":\"" + order_number + "\"," + "\"total_amount\":\"" + total_amount + "\"," + "\"subject\":\"" + subject + "\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //請求 String result = alipayClient.pageExecute(aliPayRequest).getBody(); //輸出 out.println(result);//以下寫自己的訂單程式碼 }
其中:
PrintWriter out = response.getWriter();
out.println(result);
是將支付寶請求輸出在頁面上。
二、退款
ServiceImpl層:
//退款 @Override public void refund(HttpServletResponse response,HttpSession session) throws IOException, AlipayApiException { response.setContentType("text/html;charset=utf-8"); PrintWriter out = response.getWriter(); //獲得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type); //設定請求引數 AlipayTradeRefundRequest alipayRequest = new AlipayTradeRefundRequest(); //商戶訂單號,必填 String out_trade_no = new String(訂單號); //需要退款的金額,該金額不能大於訂單金額,必填 String refund_amount = new String(退款金額); //標識一次退款請求,同一筆交易多次退款需要保證唯一,如需部分退款,則此引數必傳 String out_request_no = new String(UUID.randomUUID().toString()); alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"," + "\"refund_amount\":\""+ refund_amount +"\"," + "\"out_request_no\":\""+ out_request_no +"\"}"); //請求 String result = alipayClient.execute(alipayRequest).getBody(); //輸出 out.println(result);以下寫自己的訂單退款程式碼 }
退款可按照訂單號或者支付寶訂單號進行退款,博主採用的是按訂單號退款。
結語
以上是沙箱接入的簡要步驟,希望能幫到其他人。