日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java接入支付宝支付api

發布時間:2024/3/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java接入支付宝支付api 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?https://b.alipay.com/登錄支付寶商家服務開通支付,進入開放平臺,查看開放平臺密鑰的APPID(應用ID),應用公鑰,支付寶公鑰,授權回調地址。

初次支付可能還沒有設置應用密鑰,可以使用支付寶的工具,獲取應用公鑰和應該私鑰。設置應該公鑰,私鑰自己保存。

pom.xml

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><!--支付寶sdk --><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.7.4.ALL</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency><dependency><groupId>commons-configuration</groupId><artifactId>commons-configuration</artifactId><version>1.10</version></dependency><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.1</version></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.3.1</version></dependency><dependency><groupId>org.hamcrest</groupId><artifactId>hamcrest-core</artifactId><version>1.3</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.1.45</version></dependency></dependencies>

工具類

import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.HashMap; import java.util.Map;public class AlipayUtil {/*** map轉obejct*/public static Object mapToObject(Map<String, Object> map, Class<?> beanClass) throws Exception {if (map == null)return null;Object obj = beanClass.newInstance();Field[] fields = obj.getClass().getDeclaredFields();for (Field field : fields) {int mod = field.getModifiers();if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {continue;}field.setAccessible(true);field.set(obj, map.get(field.getName()));}return obj;}/*** obejct轉map* @param obj* @return* @throws Exception*/public static Map<String, Object> objectToMap(Object obj) throws Exception {if(obj == null){return null;}Map<String, Object> map = new HashMap<String, Object>();Field[] declaredFields = obj.getClass().getDeclaredFields();for (Field field : declaredFields) {field.setAccessible(true);map.put(field.getName(), field.get(obj));}return map;} }

配置信息

/*支付寶配置信息*/ public class AlipayConfig {public static String open_api_domain = "https://openapi.alipay.com/gateway.do";//支付寶網關public static String mcloud_api_domain="http://mcloudmonitor.com/gateway.do";//系統商戶保障網關public static String pid="2088102177389651";//商戶的uidpublic static String appid="2016092600602700";//商戶應用的appid//RSA私鑰公鑰和支付寶公鑰public static String private_key = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC6glV6xtCY9oERms9DBLb249rPQ4TJELwvsgDLX9fT31zCiMSOizyL5dglaH2s/uGJ6uEtvRzixq9DYy/NCrdh7gavvdvfx0ANagJt7Be+ZquiLB9noqsOY4NweH+PE95I8zBMpkQJc24F1r7iCpiyQ/vpNJnAQQRyKrD/wukT4aLWItJgCMPaw1Cy3qdWNUxF0Xkv9cF0Hk543W179QtrNCxgtAyzCZg+QtjntYdbO9oySZHLzHZQpjhmoi4E02SH28fz+cikCCzjtnY9pcs3qYW+gFnkgbemEiBwqWQjKgzQm27hIPiHJ9KiVCszy7Cr0L4uv9YRUR5C3qstJk2TAgMBAAECggEAJ6g04sFJc2zers6bCWYEPWTfjriNkG8lhIK11oiPjLZus9J+8Mw8WIbLudCJAHLFpBy0OpR+gt26QHrjnBaOPZ1uAIo/KUrlnLSQxayws8SC9B2ro86bzphsR0rn3JVd62cCOxoTV2sa1tT9i3SzWRxJgSG1G4L3ngrjzc403wv6NAbHzjuRp3kd4fSOnh6uAqQX2Z04LhoRIsFtLO+V3jk8xMUBP4WzXIqbFVbRe8mtvtPfKGpVTK4OKBcENn3qXrpTHsNOxzclwa4ujFVsDCKjt6t0uavtX7UX9dqVQ+PrdQhdA+uGOfPE3TELnjliCpLqdWnABaRURaY1GClQmQKBgQD9Kvhq1vmZHM8nF5KeThw0yHWrHv0rFG+5+pcvHaYUBoEPbROo87hoIC/GZDnxka9H2SHo7daADLmYqZd6rzDGKtD36ta6FxsobEZ8VaNbbWzD1ncMefLuz25447s2fUIbFpUZLx9wURXm4VkBzCpr4rwRxoT8h03Mir74sklH3wKBgQC8mHbZasIxy7MRSDcZpRwMDpkQMF2mbJLosNuZ54tWTS7OI9FdzcasNY2h2GCCbnZxdHFh/IVodZMa5R/I7fJoDANpc0uOEoogd5XjxzMOx+Q/pneO1UNQymVFzKGM927kK3NdpRAY+//ULz7cxj2Z4XpuDMZxbGR3eNhiuYBAzQKBgQDEu8+vtr7frPONfVQCkNB6dAx8neg+wfLQo1s40eFtTmCcjDbq4/o5cEmv8dLVVlDPlHw1dh1qBHl1mNSOEfXlCQC6p1OV6L7B+uILXMFFGxOaW97HYzzVN3yxlMa24T+trS7QEz5rGZfbguKX8wBENj3P0mUlmD9s46TjvigUIQKBgQCCK3GMqwUSPZiAyylMyAtNvx2icN+SqMnVVYyc85XWoTs3CL3PUuJXpjb1iFVEcV3K/SXtDdA+wzgfjhmcI6/2ZKROOkfh7aXstt1789en0gwWap2GtmfZ8Xho7s5qb7XYQq1D61PrCrQPDfUDiMin11sbbjHhw4CsfXpM2eBN2QKBgGyGhE8U4TANCrP6t2ZRgu/RCAILhDyLOhRcwM+cDShJuQtm/7f3sIBlbcTOQq2OUynZwZn2zqnamtMj7p3IiObzx/ctH2DkrYA094SvkWVVq2Nf4MgyGof4iHofrECg3wW/4eltj57hCoGts0HvAhcnhaHEzb4iIEEbuas/6A2M";public static String public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuoJVesbQmPaBEZrPQwS29uPaz0OEyRC8L7IAy1/X099cwojEjos8i+XYJWh9rP7hierhLb0c4savQ2MvzQq3Ye4Gr73b38dADWoCbewXvmaroiwfZ6KrDmODcHh/jxPeSPMwTKZECXNuBda+4gqYskP76TSZwEEEciqw/8LpE+Gi1iLSYAjD2sNQst6nVjVMRdF5L/XBdB5OeN1te/ULazQsYLQMswmYPkLY57WHWzvaMkmRy8x2UKY4ZqIuBNNkh9vH8/nIpAgs47Z2PaXLN6mFvoBZ5IG3phIgcKlkIyoM0Jtu4SD4hyfSolQrM8uwq9C+Lr/WEVEeQt6rLSZNkwIDAQAB";//SHA256withRsa對應支付寶公鑰public static String alipay_public_key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwY8HbGnBgRPuTUwLtbokkX/ZIqhUqjk+S5HGVRVz5X2TeAr7rAV6/+IZRT5L/Y5iab+kcE2n5jc2aOLO5r3WWb85gNIPI+BuXop0ANYVGrtXeP1IgLO+66vI9uggDTs9uzUXlTZ/c5/PA8yXJJO+2+NbQdln1m3BGw3f+gGCyRpc6Rp3TWoze29d64CbHQBNWXAT85u4M6h+12WH2sb5JORCV95dcfAxyxel69TQIornT8kh+PkFC0SK/MujQ+wahcV6Tx0DQrrHwYfQEcEIewVDDSlThT5FZjNfA8CFdNj8n8zRLgx6J1VtiGNmqL9GCcA+hjum4k05206aqcXcZwIDAQAB";//簽名類型: RSA->SHA1withRsa,RSA2->SHA256withRsapublic static String sign_type = "RSA2";// 編碼public static String charset = "UTF-8";// 返回格式public static String format = "json";// 日志記錄目錄public static String log_path = "/log";// 服務器異步通知頁面路徑 需http://或者https://格式的完整路徑,不能加?id=123這類自定義參數,必須外網可以正常訪問public static String notify_url = ""; }

所有支付的api接入

import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.*; import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.request.*; import com.alipay.api.response.*;import java.util.HashMap; import java.util.Map;public class Alipay {public static AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);/*** 應用場景 當面付條形碼支付* @param data* @throws AlipayApiException*/public Map microPay(Map<Object,String> data) throws Exception {/**** 商戶訂單號* 訂單標題* 訂單總金額,單位為元,不能超過1億元(如果同時傳入了【打折金額】,【不可打折金額】,【訂單總金額】三者,則必須滿足如下條件:【訂單總金額】=【打折金額】+【不可打折金額】)* 付款條碼(用戶支付寶錢包手機app點擊“付款”產生的付款條碼)* 商戶門店編號,通過門店號和商家后臺可以配置精準到門店的折扣信息,詳詢支付寶技術支持* 支付超時,線下掃碼交易定義為5分鐘*/String outTradeNo = data.get("outTradeNo");String subject = data.get("subject");String totalAmount = data.get("totalAmount");String authCode = data.get("authCode");String timeoutExpress = data.get("timeoutExpress");//獲得初始化的AlipayClient//AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);AlipayTradePayRequest alipayTradePayRequest = new AlipayTradePayRequest(); //創建API對應的request類AlipayTradePayModel alipayTradePayModel = new AlipayTradePayModel();alipayTradePayModel.setOutTradeNo(outTradeNo);alipayTradePayModel.setSubject(subject);alipayTradePayModel.setTotalAmount(totalAmount);alipayTradePayModel.setAuthCode(authCode);alipayTradePayModel.setTimeoutExpress(timeoutExpress);alipayTradePayRequest.setBizModel(alipayTradePayModel);AlipayTradePayResponse alipayTradePayResponse = alipayClient.execute(alipayTradePayRequest); //通過alipayClient調用API,獲得對應的response類return AlipayUtil.objectToMap(alipayTradePayResponse);}/** 應用場景 當面付生成支付二維碼* (必填) 商戶網站訂單系統中唯一訂單號,64個字符以內,只能包含字母、數字、下劃線,需保證商戶系統端不能重復,建議通過數據庫sequence生成,* (必填) 訂單標題,粗略描述用戶的支付目的。如“xxx品牌xxx門店當面付掃碼消費”* (必填) 訂單總金額,單位為元,不能超過1億元 如果同時傳入了【打折金額】,【不可打折金額】,【訂單總金額】三者,則必須滿足如下條件:【訂單總金額】=【打折金額】+【不可打折金額】* 支付超時,定義為120分鐘 120m*/public Map barCodePay(Map<Object,String> data) throws Exception {String outTradeNo = data.get("outTradeNo");String subject = data.get("subject");String totalAmount = data.get("totalAmount");String timeoutExpress = data.get("timeoutExpress");//獲得初始化的AlipayClient//AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);AlipayTradePrecreateRequest alipayTradePrecreateRequest = new AlipayTradePrecreateRequest();//創建API對應的request類AlipayTradePrecreateModel alipayTradePrecreateModel = new AlipayTradePrecreateModel();alipayTradePrecreateModel.setOutTradeNo(outTradeNo);alipayTradePrecreateModel.setSubject(subject);alipayTradePrecreateModel.setTotalAmount(totalAmount);alipayTradePrecreateModel.setTimeoutExpress(timeoutExpress);alipayTradePrecreateRequest.setBizModel(alipayTradePrecreateModel);AlipayTradePrecreateResponse alipayTradePrecreateResponse = alipayClient.execute(alipayTradePrecreateRequest);return AlipayUtil.objectToMap(alipayTradePrecreateResponse);}/*** 先生成訂單信息 再由原生ios android調起支付寶客戶端* 應用場景 APP支付* @param data* @throws AlipayApiException*/public Map appCreateOrder(Map<Object,String> data)throws Exception{//實例化客戶端//AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, "json", "utf-8", AlipayConfig.alipay_public_key, AlipayConfig.sign_type);//實例化具體API對應的request類,類名稱和接口名稱對應,當前調用接口名稱:alipay.trade.app.payAlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();//SDK已經封裝掉了公共參數,這里只需要傳入業務參數。以下方法為sdk的model入參方式(model和biz_content同時存在的情況下取biz_content)。AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();String body = data.get("body");String subject = data.get("subject");String outTradeNo = data.get("outTradeNo");String timeoutExpress = data.get("timeoutExpress");String totalAmount = data.get("totalAmount");model.setBody(body);model.setSubject(subject);model.setOutTradeNo(outTradeNo);model.setTimeoutExpress(timeoutExpress);model.setTotalAmount(totalAmount);model.setProductCode("QUICK_MSECURITY_PAY");request.setBizModel(model);request.setNotifyUrl("http://.....");AlipayTradeAppPayResponse response = null;try {//這里和普通的接口調用不同,使用的是sdkExecuteresponse = alipayClient.sdkExecute(request);} catch (AlipayApiException e) {e.printStackTrace();}return AlipayUtil.objectToMap(response);//就是orderString 可以直接給客戶端請求,無需再做處理。}/*** 應用場景 手機網站支付* @param data* @throws AlipayApiException*/public Map wapPay(Map<Object,String> data) throws Exception {// 商戶訂單號,商戶網站訂單系統中唯一訂單號,必填String outTradeNo = data.get("outTradeNo");// 訂單名稱,必填String subject = data.get("subject");// 付款金額,必填String totalAmount = data.get("totalAmount");// 商品描述,可空String body = data.get("body");// 超時時間 可空String timeoutExpress = data.get("timeoutExpress");// 頁面返回地址String returnUrl = data.get("returnUrl");// 銷售產品碼 必填String productCode="QUICK_WAP_WAY";/**********************/// SDK 公共請求類,包含公共請求參數,以及封裝了簽名與驗簽,開發者無需關注簽名與驗簽//調用RSA簽名方式//AlipayClient client = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);AlipayTradeWapPayRequest alipayRequest=new AlipayTradeWapPayRequest();// 封裝請求支付信息AlipayTradeWapPayModel model=new AlipayTradeWapPayModel();model.setOutTradeNo(outTradeNo);model.setSubject(subject);model.setTotalAmount(totalAmount);model.setBody(body);model.setTimeoutExpress(timeoutExpress);model.setProductCode(productCode);alipayRequest.setBizModel(model);// 設置異步通知地址alipayRequest.setNotifyUrl(AlipayConfig.notify_url);// 設置同步地址alipayRequest.setReturnUrl(returnUrl);// 調用SDK生成表單String form = alipayClient.pageExecute(alipayRequest).getBody();Map map = new HashMap();map.put("form",form); // response.setContentType("text/html;charset=" + AlipayConfig.CHARSET); // response.getWriter().write(form);//直接將完整的表單html輸出到頁面 // response.getWriter().flush(); // response.getWriter().close();return map;}/*** 應用場景 電腦網站支付* @param data* @throws AlipayApiException*/public Map pcPay(Map<Object,String> data) throws AlipayApiException {// 商戶訂單號,商戶網站訂單系統中唯一訂單號,必填String outTradeNo = data.get("outTradeNo");// 訂單名稱,必填String subject = data.get("subject");// 付款金額,必填String totalAmount = data.get("totalAmount");// 商品描述,可空String body = data.get("body");// 超時時間 可空String timeoutExpress = data.get("timeoutExpress");// 頁面返回地址String returnUrl = data.get("returnUrl");// 銷售產品碼 必填String productCode="FAST_INSTANT_TRADE_PAY";// SDK 公共請求類,包含公共請求參數,以及封裝了簽名與驗簽,開發者無需關注簽名與驗簽//調用RSA簽名方式//AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);AlipayTradePagePayRequest alipayTradePagePayRequest = new AlipayTradePagePayRequest();//創建API對應的requestalipayTradePagePayRequest.setNotifyUrl(AlipayConfig.notify_url);alipayTradePagePayRequest.setReturnUrl(returnUrl);AlipayTradePagePayModel alipayTradePagePayModel = new AlipayTradePagePayModel();alipayTradePagePayModel.setOutTradeNo(outTradeNo);alipayTradePagePayModel.setSubject(subject);alipayTradePagePayModel.setTotalAmount(totalAmount);alipayTradePagePayModel.setProductCode(productCode);alipayTradePagePayModel.setBody(body);alipayTradePagePayModel.setTimeoutExpress(timeoutExpress);alipayTradePagePayRequest.setBizModel(alipayTradePagePayModel);String form = alipayClient.pageExecute(alipayTradePagePayRequest).getBody(); //調用SDK生成表單Map map = new HashMap();map.put("form",form);return map;}/*** 賬單下載* @param data* @return* @throws Exception*/public Map downloadBill(Map<Object,String> data) throws Exception {// 賬單類型,商戶通過接口或商戶經開放平臺授權后其所屬服務商通過接口可以獲取以下賬單類型:trade、signcustomer;// trade指商戶基于支付寶交易收單的業務賬單;signcustomer是指基于商戶支付寶余額收入及支出等資金變動的帳務賬單;String billType = data.get("billType");// 賬單時間:日賬單格式為yyyy-MM-dd,月賬單格式為yyyy-MM。String billDate = data.get("billDate");/**********************/// SDK 公共請求類,包含公共請求參數,以及封裝了簽名與驗簽,開發者無需關注簽名與驗簽AlipayClient client = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);AlipayDataDataserviceBillDownloadurlQueryRequest alipayRequest = new AlipayDataDataserviceBillDownloadurlQueryRequest();AlipayDataDataserviceBillDownloadurlQueryModel model =new AlipayDataDataserviceBillDownloadurlQueryModel();model.setBillType(billType);model.setBillDate(billDate);alipayRequest.setBizModel(model);AlipayDataDataserviceBillDownloadurlQueryResponse alipayResponse = client.execute(alipayRequest);return AlipayUtil.objectToMap(alipayResponse);}/*** 支付撤銷* @param data* @return* @throws Exception*/public Map cancel(Map<Object,String> data) throws Exception {//商戶訂單號和支付寶交易號不能同時為空。 trade_no、 out_trade_no如果同時存在優先取trade_no//商戶訂單號,和支付寶交易號二選一String outTradeNo = data.get("outTradeNo");//支付寶交易號,和商戶訂單號二選一String tradeNo = data.get("tradeNo");AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type); //獲得初始化的AlipayClientAlipayTradeCancelRequest alipayTradeCancelRequest = new AlipayTradeCancelRequest();//創建API對應的request類AlipayTradeCancelModel alipayTradeCancelModel = new AlipayTradeCancelModel();alipayTradeCancelModel.setOutTradeNo(outTradeNo);alipayTradeCancelModel.setTradeNo(tradeNo);AlipayTradeCancelResponse alipayTradeCancelResponse = alipayClient.execute(alipayTradeCancelRequest);//通過alipayClient調用API,獲得對應的response類return AlipayUtil.objectToMap(alipayTradeCancelResponse);}/*** 關閉支付接口* @param data* @return* @throws Exception*/public Map close(Map<Object,String> data) throws Exception {//商戶訂單號和支付寶交易號不能同時為空。 trade_no、 out_trade_no如果同時存在優先取trade_no//商戶訂單號,和支付寶交易號二選一String outTradeNo = data.get("outTradeNo");//支付寶交易號,和商戶訂單號二選一String tradeNo = data.get("tradeNo");// SDK 公共請求類,包含公共請求參數,以及封裝了簽名與驗簽,開發者無需關注簽名與驗簽AlipayClient client = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);AlipayTradeCloseRequest alipayRequest=new AlipayTradeCloseRequest();AlipayTradeCloseModel model =new AlipayTradeCloseModel();model.setOutTradeNo(outTradeNo);model.setTradeNo(tradeNo);alipayRequest.setBizModel(model);AlipayTradeCloseResponse alipayResponse=client.execute(alipayRequest);return AlipayUtil.objectToMap(alipayResponse);}/*** 回調處理* @param params* @return* @throws AlipayApiException*/public boolean notify(Map params) throws AlipayApiException { // //獲取支付寶POST過來反饋信息 // Map<String,String> params = new HashMap<String,String>(); // Map requestParams = request.getParameterMap(); // for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) { // String name = (String) iter.next(); // String[] values = (String[]) requestParams.get(name); // String valueStr = ""; // for (int i = 0; i < values.length; i++) { // valueStr = (i == values.length - 1) ? valueStr + values[i] // : valueStr + values[i] + ","; // } // //亂碼解決,這段代碼在出現亂碼時使用。 // //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8"); // params.put(name, valueStr); // }//切記alipaypublickey是支付寶的公鑰,請去open.alipay.com對應應用下查看。boolean flag = AlipaySignature.rsaCheckV1(params, AlipayConfig.alipay_public_key, AlipayConfig.charset, AlipayConfig.sign_type);return flag;}/*** 訂單查詢* @param data* @return* @throws Exception*/public Map query(Map<Object,String> data) throws Exception {//商戶訂單號和支付寶交易號不能同時為空。 trade_no、 out_trade_no如果同時存在優先取trade_no//商戶訂單號,和支付寶交易號二選一String outTradeNo = data.get("outTradeNo");//支付寶交易號,和商戶訂單號二選一String tradeNo = data.get("tradeNo");/**********************/// SDK 公共請求類,包含公共請求參數,以及封裝了簽名與驗簽,開發者無需關注簽名與驗簽AlipayClient client = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();AlipayTradeQueryModel model=new AlipayTradeQueryModel();model.setOutTradeNo(outTradeNo);model.setTradeNo(tradeNo);alipayRequest.setBizModel(model);AlipayTradeQueryResponse alipayTradePayResponse = client.execute(alipayRequest);return AlipayUtil.objectToMap(alipayTradePayResponse);}/*** 退款查詢* @param data* @return* @throws Exception*/public Map refundQuery(Map<Object,String> data) throws Exception {//商戶訂單號和支付寶交易號不能同時為空。 trade_no、 out_trade_no如果同時存在優先取trade_no//商戶訂單號,和支付寶交易號二選一String outTradeNo = data.get("outTradeNo");//支付寶交易號,和商戶訂單號二選一String tradeNo = data.get("tradeNo");//請求退款接口時,傳入的退款請求號,如果在退款請求時未傳入,則該值為創建交易時的外部交易號String outRequestNo = data.get("outRequestNo");/**********************/// SDK 公共請求類,包含公共請求參數,以及封裝了簽名與驗簽,開發者無需關注簽名與驗簽AlipayClient client = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);AlipayTradeFastpayRefundQueryRequest alipayRequest = new AlipayTradeFastpayRefundQueryRequest();AlipayTradeFastpayRefundQueryModel model=new AlipayTradeFastpayRefundQueryModel();model.setOutTradeNo(outTradeNo);model.setTradeNo(tradeNo);model.setOutRequestNo(outRequestNo);alipayRequest.setBizModel(model);AlipayTradeFastpayRefundQueryResponse alipayResponse=client.execute(alipayRequest);return AlipayUtil.objectToMap(alipayResponse);}/*** 退款* @param data* @return* @throws Exception*/public Map refund(Map<Object,String> data) throws Exception {//商戶訂單號和支付寶交易號不能同時為空。 trade_no、 out_trade_no如果同時存在優先取trade_no//商戶訂單號,和支付寶交易號二選一String outTradeNo = data.get("outTradeNo");//支付寶交易號,和商戶訂單號二選一String tradeNo = data.get("tradeNo");//退款金額,不能大于訂單總金額String refundAmount = data.get("outTradeNo");//退款的原因說明String refundReason = data.get("outTradeNo");//標識一次退款請求,同一筆交易多次退款需要保證唯一,如需部分退款,則此參數必傳。String outRequestNo = data.get("outTradeNo");/**********************/// SDK 公共請求類,包含公共請求參數,以及封裝了簽名與驗簽,開發者無需關注簽名與驗簽AlipayClient client = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);AlipayTradeRefundRequest alipayTradeRefundRequest = new AlipayTradeRefundRequest();AlipayTradeRefundModel model=new AlipayTradeRefundModel();model.setOutTradeNo(outTradeNo);model.setTradeNo(tradeNo);model.setRefundAmount(refundAmount);model.setRefundReason(refundReason);model.setOutRequestNo(outRequestNo);alipayTradeRefundRequest.setBizModel(model);AlipayTradeRefundResponse alipayTradeRefundResponse =client.execute(alipayTradeRefundRequest);return AlipayUtil.objectToMap(alipayTradeRefundResponse);}public static void main(String[] args) throws Exception {Map<Object,String> map = new HashMap<Object,String>();map.put("body","23131313131313");map.put("outTradeNo","23131313131313");map.put("subject","hahaha");map.put("totalAmount","100");map.put("timeoutExpress","30m");map.put("returnUrl","https://www.baidu.com");Alipay aliAppPay = new Alipay();System.out.println("返回內容"+aliAppPay.pcPay(map));} }

人臉識別配置

import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.logging.Logger;import com.alibaba.fastjson.JSON; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.AlipayTradePayModel; import com.alipay.api.request.AlipayTradePayRequest; import com.alipay.api.request.ZolozAuthenticationCustomerSmilepayInitializeRequest; import com.alipay.api.response.AlipayTradePayResponse; import com.alipay.api.response.ZolozAuthenticationCustomerSmilepayInitializeResponse; import com.alipay.zoloz.smile2pay.service.Zoloz; import com.alipay.zoloz.smile2pay.service.ZolozCallback; import org.slf4j.LoggerFactory;public class AlipaySmile {Logger log = (Logger) LoggerFactory.getLogger(AlipaySmile.class);private static final String TAG = "smiletopay";private Zoloz zoloz;// 值為"1000"調用成功// 值為"1003"用戶選擇退出// 值為"1004"超時// 值為"1005"用戶選用其他支付方式static final String CODE_SUCCESS = "1000";static final String CODE_EXIT = "1003";static final String CODE_TIMEOUT = "1004";static final String CODE_OTHER_PAY = "1005";static final String TXT_EXIT = "已退出刷臉支付";static final String TXT_TIMEOUT = "操作超時";static final String TXT_OTHER_PAY = "已退出刷臉支付";static final String TXT_OTHER = "抱歉未支付成功,請重新支付";//刷臉支付相關static final String SMILEPAY_CODE_SUCCESS = "10000";static final String SMILEPAY_SUBCODE_LIMIT = "ACQ.PRODUCT_AMOUNT_LIMIT_ERROR";static final String SMILEPAY_SUBCODE_BALANCE_NOT_ENOUGH = "ACQ.BUYER_BALANCE_NOT_ENOUGH";static final String SMILEPAY_SUBCODE_BANKCARD_BALANCE_NOT_ENOUGH = "ACQ.BUYER_BANKCARD_BALANCE_NOT_ENOUGH";static final String SMILEPAY_TXT_LIMIT = "刷臉支付超出限額,請選用其他支付方式";static final String SMILEPAY_TXT_EBALANCE_NOT_ENOUGH = "賬戶余額不足,支付失敗";static final String SMILEPAY_TXT_BANKCARD_BALANCE_NOT_ENOUGH = "賬戶余額不足,支付失敗";static final String SMILEPAY_TXT_FAIL = "抱歉未支付成功,請重新支付";static final String SMILEPAY_TXT_SUCCESS = "刷臉支付成功";/*** mock數據,真實商戶請填寫真實信息.*/private Map mockInfo() {Map merchantInfo = new HashMap();//以下信息請根據真實情況填寫//商戶 PidmerchantInfo.put("merchantId", "");//ISV PIDmerchantInfo.put("partnerId", "");//添加刷臉付功能的appidmerchantInfo.put("appId", "");//機具編號,便于關聯商家管理的機具merchantInfo.put("deviceNum", "TEST_ZOLOZ_TEST");//商戶的門店編號merchantInfo.put("storeCode", "TEST");//支付寶門店編號merchantInfo.put("alipayStoreCode", "TEST");return merchantInfo;}/*** 發起刷臉支付請求,先zolozGetMetaInfo獲取本地app信息,然后調用服務端獲取刷臉付協議.*/private void smilePay(Map<Object,String> data)throws Exception{//調用zolozGetMetaInfo完成設備信息采集zoloz.zolozGetMetaInfo(mockInfo(), new ZolozCallback() {// 解析zolozGetMetaInfo返回的結果,如果成功,則請求商戶服務端調用人臉初始化接口@Overridepublic void response(Map smileToPayResponse) {if(smileToPayResponse!=null){String code = (String)smileToPayResponse.get("code");String metaInfo = (String)smileToPayResponse.get("metainfo");if (CODE_SUCCESS.equalsIgnoreCase(code) && metaInfo != null){// 將metaInfo發送給商戶服務端,由商戶服務端發起刷臉初始化OpenAPI的調用//正式接入請上傳metaInfo到服務端,不要忘記UrlEncode,使用服務端使用的sdk從服務端訪問openapi獲取zimId和zimInitClientData;AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.public_key,AlipayConfig.sign_type);ZolozAuthenticationCustomerSmilepayInitializeRequest request= new ZolozAuthenticationCustomerSmilepayInitializeRequest();// zolozGetMetaInfo接口返回的metainfo對象中加入業務參數com.alibaba.fastjson.JSONObject zimmetainfo = JSON.parseObject(metaInfo);com.alibaba.fastjson.JSONObject merchantInfo = zimmetainfo.getJSONObject("merchantInfo");merchantInfo.put("pay_amount", data.get("totalAmount"));//可選,支付幣種訂單金額,值為double類型merchantInfo.put("pay_currency", "CNY");//可選,支付幣種,目前僅支持 人民幣:CNY// com.alibaba.fastjson.JSONObject extInfo = new com.alibaba.fastjson.JSONObject(); // // /* start: 如果是姓名+身份證號方式的刷臉支付,請加入以下代碼 */ // extInfo.put("certNo", "身份證號"); //必填,當前被認證用戶的身份證號 // extInfo.put("certName", "身份證姓名");//必填,當前被認證用戶的姓名(保持和身份證一致) // extInfo.put("certType", "IDCARD"); //必填,寫為IDCARD,表明身份證 // extInfo.put("bizType", "8"); //必填,固定寫為8,表明基于姓名和身份證號的刷臉支付場景 // /* end: -------------------------------------------- */ // // zimmetainfo.put("extInfo", extInfo);request.setBizContent(zimmetainfo.toJSONString());try {ZolozAuthenticationCustomerSmilepayInitializeResponse response = alipayClient.execute(request);if (response != null && SMILEPAY_CODE_SUCCESS.equals(response.getCode())) {try {ZolozAuthenticationCustomerSmilepayInitializeResponse zolozResponse= (ZolozAuthenticationCustomerSmilepayInitializeResponse)response;String result = zolozResponse.getResult();com.alibaba.fastjson.JSONObject resultJson = com.alibaba.fastjson.JSON.parseObject(result);String zimId = resultJson.getString("zimId");String zimInitClientData = resultJson.getString("zimInitClientData");data.put("zimId",zimId);data.put("zimInitClientData",zimInitClientData);//人臉調用smile(data);} catch (Exception e) {log.info(TXT_OTHER);}} else {log.info(TXT_OTHER);}} catch (AlipayApiException e) {e.printStackTrace();}}}}});}/*** 發起刷臉支付請求.* zimId 刷臉付token,從服務端獲取,不要mock傳入* zimInitClientData 刷臉付協議,從服務端獲取,不要mock傳入*/private void smile(Map<Object,String> data) {// 將上一步中initialize接口返回的zimInitClientData對象和zimId作為入參Map params = new HashMap();params.put("zim.init.resp", data.get("zimInitClientData"));/* start: 如果是預輸入手機號方案,請加入以下代碼,填入會員綁定的手機號,必須與支付寶帳號對應的手機號一致 用于會員刷臉付方案。填入用戶登錄會員系統的手機號 *///params.put("phone_number", "1381XXXXX");/* end: --------------------------------------------- *//* 可選:smile_mode用于指定選擇刷臉模式,值為int類型,0:主屏幕顯示(默認值);1:雙面屏機具,副屏幕顯示 */params.put("smile_mode", 0);zoloz.zolozVerify(data.get("zimId"), params, new ZolozCallback() {@Overridepublic void response(Map smileToPayResponse) {if(smileToPayResponse!=null){String code = (String)smileToPayResponse.get("code");String fToken = (String)smileToPayResponse.get("ftoken");String subCode = (String)smileToPayResponse.get("subCode");String msg = (String)smileToPayResponse.get("msg");//刷臉成功if (CODE_SUCCESS.equalsIgnoreCase(code) && fToken != null){try {data.put("fToken",fToken);pay(data);} catch (Exception e) {e.printStackTrace();}}}}});}/*** 發起刷臉支付請求.* ftoken 刷臉返回的token**/private void pay(Map<Object,String> data) throws Exception{//獲得初始化的AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.open_api_domain, AlipayConfig.appid, AlipayConfig.private_key, AlipayConfig.format, AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);AlipayTradePayRequest alipayTradePayRequest = new AlipayTradePayRequest(); //創建API對應的request類AlipayTradePayModel alipayTradePayModel = new AlipayTradePayModel();//auth_code和scene填寫需要注意alipayTradePayModel.setAuthCode(data.get("fToken")); // 人臉zolozVerify接口返回的ftokenalipayTradePayModel.setScene("security_code");//對于刷臉付,必須寫為security_codealipayTradePayModel.setSubject(data.get("subject"));alipayTradePayModel.setTimeoutExpress(data.get("timeoutExpress"));alipayTradePayModel.setTotalAmount(data.get("totalAmount"));alipayTradePayRequest.setBizModel(alipayTradePayModel);AlipayTradePayResponse alipayTradePayResponse = alipayClient.execute(alipayTradePayRequest); //通過alipayClient調用API,獲得對應的response類System.out.print(alipayTradePayResponse.getBody());if (alipayTradePayResponse != null && SMILEPAY_CODE_SUCCESS.equals(alipayTradePayResponse.getCode())) {}} }

?

總結

以上是生活随笔為你收集整理的java接入支付宝支付api的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。