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相关推荐

  1. Java接入支付宝支付测试买iPhone13 pro max

    Java接入支付宝支付 一.介绍 二.沙箱 三.支付流程 四.准备支付宝 五.代码 1.前端代码 2.后端代码 六.测试 一.介绍 支付宝官方网站 支付宝(中国)网络技术有限公司是国内的第三方支付平台 ...

  2. Java接入支付宝支付超级详细教程——从入门到精通

    ​ Java接入支付宝支付教程 源码下载 源码获取:点击获取源码 本文介绍了"二维码付款"的代码.其他支付方式的代码都在源码中. 一.创建应用 1.登录支付宝开放平台 支付宝开放平 ...

  3. Java接入支付宝支付教程

    Java接入支付宝支付教程 一.创建应用 1.登录支付宝开放平台 支付宝开放平台网址:https://open.alipay.com/platform/developerIndex.htm 2.创建一 ...

  4. Java接入支付宝支付(沙箱)

    支付宝支付(沙箱) 支付宝支付 支付宝官方网站:https://www.alipay.com/ 支付宝(中国)网络技术有限公司是国内的第三方支付平台,致力于提供"简单.安全.快速" ...

  5. Java接入支付宝支付(alipay)

    最近公司有一个需求是接入第三方支付(微信&支付宝),我接到了支付宝支付,所以本博客主要就简述我如何面像文档编程的经过,和中间遇到的小坑小洼,只要一步一步来操作,轻松接入alipay 微信支付的 ...

  6. SpringBoot接入支付宝支付API

    springboot接入支付宝api(网页或单独支付二维码) 更多内容可以参考支付宝开放平台:支付宝开放平台 (alipay.com) 支付宝沙箱:沙箱环境 - 支付宝文档中心 (alipay.com ...

  7. Java 接入支付宝支付 - 沙箱环境

    Table of Contents 一.沙箱环境 二.下载 Java 版 dome 三.生成RSA2密钥 四.代码如下 4.1 AlipayConfig 4.2 AlipayVo 4.3 Alipay ...

  8. java接入支付宝网站api

    由于个人账号权限不够,使用了沙箱环境https://openhome.alipay.com/platform/appDaily.htm 具体的公钥,私钥就不具体说明,支付宝接入文档会提示的 其次下载支 ...

  9. 【超详细,全流程】java对接支付宝支付

    支付流程 一.对接前的准备 1.1创建应用,获取参数:APPID(使用沙箱环境可跳过) 1.1.1添加产品 1.1.2配置密钥,获取第二个参数:商户的私钥 1.1.3支付宝网关 1.1.4生成参数密钥 ...

最新文章

  1. “不给钱就删库”的勒索病毒, 程序员该如何防护?
  2. WPF基础入门3 - Panel和 Canvas基本使用
  3. 线性时变系统能用模型预测控制吗_线性系统理论(二)运动分析
  4. 安卓手机chroot linux,在Android设备上安装 GNU/Linux Chroot 环境
  5. selenium截图模糊_Selenium截屏 图片未加载的问题解决--【懒加载】
  6. Unity Shader着色器优化
  7. python生成数据
  8. 第14篇:Flowable-BPMN操作流程之任务完成
  9. 转载:jQuery 1.3.3 新功能
  10. C#中采用SHA1或MD5加密字符串的函数
  11. 计算机云文档,计算机的云计算论文.doc
  12. hitool备份3798固件方法_创维E900s海思3798芯片当贝桌面不拆机通刷固件及刷机教程201910版...
  13. 过游戏保护系列-巨人游戏保护(1)过PcHunter和Od检测
  14. C语言普通字体转换花体 英文网名神器
  15. mac上可以使用的Windows远程桌面APP
  16. 重置计算机网络设置路由器,重新设置路由器的步骤
  17. Redis相关面试题
  18. 绝对值编码器与增量式编码器简析
  19. Python爬虫技巧--selenium解除webdriver特征值
  20. Google Pay接入

热门文章

  1. Google Chrome插件开发-Context Menus
  2. 【DG】在Linux平台上搭建单实例的dataguard--duplicate
  3. 阿里 P7 到底是怎样的水平 ???
  4. Android开发之路之 webview
  5. sap中如何追踪生产订单的修改记录
  6. 横河变送器EJA430E-JCS4G-917DB
  7. 仿鱼爪新媒交易账号过户转让平台源码担保第三方账号交易系统公众号服务号抖音快手小红书
  8. 网秦创始人林宇称遭史文勇非法拘禁 后者称是恶意中伤
  9. 55句史上最伤人的语录集:看完一阵心酸啊
  10. MyEclipse 8.5 6.x 最新注册码(有效期至2016年)