700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 支付宝手机网站支付 支付查询 退款 退款查询 转账接口整合

支付宝手机网站支付 支付查询 退款 退款查询 转账接口整合

时间:2019-01-26 11:37:28

相关推荐

支付宝手机网站支付 支付查询 退款 退款查询 转账接口整合

/*** 二次验签*/public boolean checkSign(HttpServletRequest request, String alipayPublicCertPath) throws AlipayApiException {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] + ",";}//乱码解决,这段代码在出现乱码时使用。如果mysign和sign不相等也可以使用这段代码转化//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");params.put(name, valueStr);}/**公钥模式验证签名* boolean verify_result = AlipaySignature.rsaCheckV1(params, "publicKey", "UTF-8", "RSA2");* **//**证书模式验签方法**/boolean verify_result = AlipaySignature.rsaCertCheckV1(params, rechargeCommon.downloadCert(alipayPublicCertPath), "UTF-8", "RSA2");return verify_result;}/*** 证书模式*/public AlipayClient certAlipayClient(PaySetVO paySetVO) {/** 初始化 **/CertAlipayRequest certAlipayRequest = new CertAlipayRequest();/** 支付宝网关 **/certAlipayRequest.setServerUrl("/gateway.do");/** 应用id,如何获取请参考:/support/helpcenter/190/02493024 **/certAlipayRequest.setAppId(paySetVO.getAliAppId());/** 应用私钥, 如何获取请参考:/support/helpcenter/207/02469554 **/certAlipayRequest.setPrivateKey(paySetVO.getPrivateKey());/** 应用公钥证书路径,下载后保存位置的绝对路径 **/certAlipayRequest.setCertPath(rechargeCommon.downloadCert(paySetVO.getAliCertPath()));/** 支付宝公钥证书路径,下载后保存位置的绝对路径 **/certAlipayRequest.setAlipayPublicCertPath(rechargeCommon.downloadCert(paySetVO.getAliPublicCertPath()));/** 支付宝根证书路径,下载后保存位置的绝对路径 **/certAlipayRequest.setRootCertPath(rechargeCommon.downloadCert(paySetVO.getAliRootCertPath()));/** 设置签名类型 **/certAlipayRequest.setSignType("RSA2");/** 设置请求格式,固定值json **/certAlipayRequest.setFormat("json");/** 设置编码格式 **/certAlipayRequest.setCharset("UTF-8");AlipayClient alipayClient = null;try {alipayClient = new DefaultAlipayClient(certAlipayRequest);} catch (AlipayApiException e1) {e1.printStackTrace();}return alipayClient;}/*** 公钥模式*/public AlipayClient alipayClient(PaySetVO paySetVO) {AlipayClient alipayClient = newDefaultAlipayClient("/gateway.do", paySetVO.getAliAppId().trim(), paySetVO.getPrivateKey().trim(), "json", "UTF-8",paySetVO.getPublicKey().trim(), "RSA2");return alipayClient;}/*** 支付宝小程序统一下单* 1、在服务端调用  alipay.trade.create (统一收单交易创建接口),获得支付宝交易号 tradeNO* 2、 在小程序端使用 tradeNO,调用 my.tradePay 接口唤起支付宝收银台,引导用户完成支付。* 3、服务端处理回调信息* 详见文档:/mini/00arkf*/public AlipayTradeCreateResponse miniAliPay(PaySetVO paySetVO, String notifyUrl, AlipayTradeCreateModel model) {AlipayClient alipayClient = certAlipayClient(paySetVO);AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();/** 后台异步回调地址**/request.setNotifyUrl(notifyUrl);/** 设置业务参数 **/AlipayTradeCreateModel alipayTradeCreateModel = new AlipayTradeCreateModel();/** 商户订单号,商户自定义,需保证在商户端不重复,如:000001 **/alipayTradeCreateModel.setOutTradeNo(model.getOutTradeNo());/** 订单金额,精确到小数点后两位 **/alipayTradeCreateModel.setTotalAmount(model.getTotalAmount());/** 订单标题 **/alipayTradeCreateModel.setSubject(model.getSubject());/** 买家唯一id **/alipayTradeCreateModel.setBuyerId(model.getBuyerId());/** 将业务参数传至request中 **/request.setBizModel(alipayTradeCreateModel);AlipayTradeCreateResponse response = null;try {response = alipayClient.certificateExecute(request);/**String trade_no = response.getTradeNo();获取返回的tradeNO。**/} catch (AlipayApiException e) {e.printStackTrace();}return response;}/*** 统一下单 h5* 1、支付信息提交到服务端,服务端生成支付表单 返回到客户端* 2、客户端拿到服务端返回from 表单 发起表单提交* 3、服务端接收处理回调信息* 详见文档 /apis/api_1/alipay.trade.wap.pay?scene=common*/public AlipayTradeWapPayResponse doAliPay(PaySetVO paySetVO, AlipayTradeWapPayModel alipayTradeWapPayModel, AlipayTradeWapPayRequest alipayTradeWapPayRequest){AlipayClient alipayClient = certAlipayClient(paySetVO);/** 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.wap.pay(手机网站支付接口) **/AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的requestalipayRequest.setReturnUrl(alipayTradeWapPayRequest.getReturnUrl());alipayRequest.setNotifyUrl(alipayTradeWapPayRequest.getNotifyUrl());/** 设置业务参数 **/AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();/** 商户订单号,商户自定义,需保证在商户端不重复,如:000001 **/model.setOutTradeNo(alipayTradeWapPayModel.getOutTradeNo());/** 销售产品码,固定值:QUICK_WAP_WAY **/model.setProductCode("QUICK_WAP_WAY");/** 订单标题 **/model.setSubject(alipayTradeWapPayModel.getSubject());/** 订单金额,精确到小数点后两位 **/model.setTotalAmount(alipayTradeWapPayModel.getTotalAmount());/** 订单描述 **/model.setBody(alipayTradeWapPayModel.getBody());/** 业务扩展参数 **///ExtendParams extendParams = new ExtendParams();/** 系统商编号,填写服务商的PID,返佣参数传值前提:传值账号需要签约返佣协议,用于isv商户。 **///extendParams.setSysServiceProviderId("2088511****07846");/** 花呗参数,传值前提:必须有该接口花呗收款准入条件,且需签约花呗分期 **//** 指定可选期数,只支持3/6/12期,还款期数越长手续费越高 **/// extendParams.setHbFqNum("3");/** 指定手续费承担方式,手续费可以由用户全承担(该值为0),也可以商户全承担(该值为100),但不可以共同承担,即不可取0和100外的其他值。 **///extendParams.setHbFqSellerPercent("0");//model.setExtendParams(extendParams);/** 将业务参数传至request中 **/alipayRequest.setBizModel(model);AlipayTradeWapPayResponse wapPayResponse = null;try {wapPayResponse = alipayClient.pageExecute(alipayRequest);/**获取需提交的form表单 客户端拿到submitFormData做表单提交 String submitFormData = response.getBody();**/} catch (AlipayApiException e) {e.printStackTrace();}return wapPayResponse;// String form = "";// try {////调用SDK生成表单//form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单// } catch (AlipayApiException e) {//e.printStackTrace();// }// //直接将完整的表单html输出到页面// response.setContentType("text/html;charset=UTF-8");// response.getWriter().write(form);//直接将完整的表单html输出到页面// response.getWriter().flush();// response.getWriter().close();}- List item/*** 订单查询`加粗样式`*/public AlipayTradeQueryResponse queryOrder(PaySetVO paySetVO, AlipayTradeQueryModel alipayTradeQueryModel) {AlipayClient alipayClient = certAlipayClient(paySetVO);/** 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.query(统一收单线下交易查询)**/AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();/** 设置业务参数 **/AlipayTradeQueryModel model = new AlipayTradeQueryModel();/** 注:交易号(TradeNo)与订单号(OutTradeNo)二选一传入即可,如果2个同时传入,则以交易号为准 **//** 支付接口传入的商户订单号。如:01290011200000140004 **/model.setOutTradeNo(alipayTradeQueryModel.getOutTradeNo());/** 异步通知/查询接口返回的支付宝交易号,如:22001473951448314322 **/model.setTradeNo(alipayTradeQueryModel.getTradeNo());/** 将业务参数传至request中 **/request.setBizModel(model);/**第三方调用(服务商模式),传值app_auth_token后,会收款至授权token对应商家账号,如何获传值app_auth_token请参考文档:/support/helpcenter/79/02494631 **///request.putOtherTextParam("app_auth_token", "传入获取到的app_auth_token值");AlipayTradeQueryResponse response = null;try {/** 通过alipayClient调用API,获得对应的response类 **//** 证书模式 **/response = alipayClient.certificateExecute(request);/** 公钥模式 **///response = alipayClient.execute(request);} catch (AlipayApiException e) {e.printStackTrace();}return response;/** 获取接口调用结果,如果调用失败,可根据返回错误信息到该文档寻找排查方案:/support/helpcenter/101 **/}/*** 单笔退款*/public AlipayTradeRefundResponse toRefund(PaySetVO paySetVO, AlipayTradeRefundModel alipayTradeRefundModel) {AlipayClient alipayClient = certAlipayClient(paySetVO);/** 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.refund(统一收单交易退款接口) **/AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();/** 设置业务参数 **/AlipayTradeRefundModel model = new AlipayTradeRefundModel();/** 支付接口传入的商户订单号。如:01290011200000140004 交易号二选一 **/model.setOutTradeNo(alipayTradeRefundModel.getOutTradeNo());/** 退款金额,退款总金额不能大于该笔订单支付最大金额 **/model.setRefundAmount(alipayTradeRefundModel.getRefundAmount());/** 异步通知/查询接口返回的支付宝交易号,如:22001473951448314322 商户订单号二选一 **/model.setTradeNo(alipayTradeRefundModel.getTradeNo());/** 如需部分退款,则此参数必传,且每次请求不能重复,如:0001 **/model.setOutRequestNo(WxCommonUtil.getSerialNumber());/** 将业务参数传至request中 **/request.setBizModel(model);/**第三方调用(服务商模式),传值app_auth_token后,会收款至授权token对应商家账号,如何获传值app_auth_token请参考文档:/support/helpcenter/79/02494631 **///request.putOtherTextParam("app_auth_token", "传入获取到的app_auth_token值");AlipayTradeRefundResponse response = null;try {/** 通过alipayClient调用API,获得对应的response类 **//** 证书模式 **/response = alipayClient.certificateExecute(request);/** 公钥模式 **///response = alipayClient.execute(request);} catch (AlipayApiException e) {e.printStackTrace();}/** 获取接口调用结果,如果调用失败,可根据返回错误信息到该文档寻找排查方案:/support/helpcenter/101 **/return response;}/*** 退款查询*/public AlipayTradeFastpayRefundQueryResponse queryRefund(PaySetVO paySetVO, AlipayTradeFastpayRefundQueryModel alipayTradeFastpayRefundQueryModel) throws AlipayApiException {AlipayClient alipayClient = certAlipayClient(paySetVO);AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest();AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel();/** 交易单号 和商户单号二选一**/model.setTradeNo(alipayTradeFastpayRefundQueryModel.getTradeNo());/*** 退款时的流水号* 请求退款接口时,传入的退款请求号,* 如果在退款请求时未传入,则该值为创建交易时的外部交易号* **/model.setOutRequestNo(alipayTradeFastpayRefundQueryModel.getOutRequestNo());/** 商户单号 和交易单号二选一**/model.setOutTradeNo(alipayTradeFastpayRefundQueryModel.getOutTradeNo());/** 将业务参数传至request中 **/request.setBizModel(model);AlipayTradeFastpayRefundQueryResponse response = alipayClient.execute(request);try {/** 证书模式 **/response = alipayClient.certificateExecute(request);/** 公钥模式 **///response = alipayClient.execute(request);} catch (AlipayApiException e) {e.printStackTrace();}/** 获取接口调用结果,如果调用失败,可根据返回错误信息到该文档寻找排查方案:/support/helpcenter/107 **/return response;}/*** 单笔转账*/public AlipayFundTransUniTransferResponse transfer(PaySetVO paySetVO, AlipayFundTransUniTransferModel alipayFundTransUniTransferModel, Participant payee) {AlipayClient alipayClient = certAlipayClient(paySetVO);/** 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.fund.trans.uni.transfer(单笔转账接口) **/AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();/** 设置业务参数,具体接口参数传值以文档说明为准:/apis/api_28/alipay.fund.trans.uni.transfer/ **/AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();/** 商户端的唯一订单号,对于同一笔转账请求,商户需保证该订单号唯一 **/model.setOutBizNo(alipayFundTransUniTransferModel.getOutBizNo());/** 转账金额,TRANS_ACCOUNT_NO_PWD产品取值最低0.1 **/model.setTransAmount(alipayFundTransUniTransferModel.getTransAmount());/** 产品码,单笔无密转账到支付宝账户固定为:TRANS_ACCOUNT_NO_PWD **/model.setProductCode("TRANS_ACCOUNT_NO_PWD");/** 场景码,单笔无密转账到支付宝账户固定为:DIRECT_TRANSFER **/model.setBizScene("DIRECT_TRANSFER");/**备注**/model.setRemark(alipayFundTransUniTransferModel.getRemark());/** 转账业务的标题,用于在支付宝用户的账单里显示 **/model.setOrderTitle(alipayFundTransUniTransferModel.getOrderTitle());Participant participant = new Participant();/** 参与方的唯一标识,收款支付宝账号或者支付宝吧账号唯一会员ID **/participant.setIdentity(payee.getIdentity());/** 参与方的标识类型:ALIPAY_USER_ID 支付宝的会员ID **/participant.setIdentityType(payee.getIdentityType());/** 参与方真实姓名,如果非空,将校验收款支付宝账号姓名一致性。当identity_type=ALIPAY_LOGON_ID时,本字段必填 **/participant.setName(payee.getName());model.setPayeeInfo(participant);/** 业务备注 **/model.setRemark("单笔转账");/** 将业务参数传至request中 **/request.setBizModel(model);AlipayFundTransUniTransferResponse response = null;try {/** 证书模式 **/response = alipayClient.certificateExecute(request);/** 公钥模式 **///response = alipayClient.execute(request);} catch (AlipayApiException e) {e.printStackTrace();}/** 获取接口调用结果,如果调用失败,可根据返回错误信息到该文档寻找排查方案:/support/helpcenter/107 **/return response;}/*** 转账查询*/public AlipayFundTransCommonQueryResponse queryTransfer(PaySetVO paySetVO, AlipayFundTransCommonQueryModel alipayFundTransCommonQueryModel) throws AlipayApiException {AlipayClient alipayClient = certAlipayClient(paySetVO);/** 实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.mon.query(转账业务单据查询接口) **/AlipayFundTransCommonQueryRequest request = new AlipayFundTransCommonQueryRequest();/** 设置业务参数,具体接口参数传值以文档说明为准:/apis/api_28/alipay.mon.query/ **/AlipayFundTransCommonQueryModel model = new AlipayFundTransCommonQueryModel();/** 固定值:TRANS_ACCOUNT_NO_PWD:单笔无密转账到支付宝账户 **/model.setProductCode("TRANS_ACCOUNT_NO_PWD");/** 支付宝转账单据号,单笔转账接口返回 **/model.setOrderId(alipayFundTransCommonQueryModel.getOrderId());/** 描述特定的业务场景,如果传递了out_biz_no则该字段为必传,固定值:DIRECT_TRANSFER:B2C 现金红包、单笔无密转账 **/model.setBizScene("DIRECT_TRANSFER");/** 商户转账唯一订单号,单笔转账接口的入参 **/model.setOutBizNo(alipayFundTransCommonQueryModel.getOutBizNo());request.setBizModel(model);AlipayFundTransCommonQueryResponse response = null;try {/** 证书模式 **/response = alipayClient.certificateExecute(request);/** 公钥模式 **///response = alipayClient.execute(request);} catch (AlipayApiException e) {e.printStackTrace();}/** 获取接口调用结果,如果调用失败,可根据返回错误信息到该文档寻找排查方案:/support/helpcenter/107 **/return response;}/*** 查询用户是否已经关注生活号,支持生活号、内容号、财富号* {* "alipay_open_public_user_follow_query_response": {* "code": "10000",* "msg": "Success",* "is_follow": "T"* },* "sign": "ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE"* }* 用户是否关注,T代表已关注,F代表未关注*/public AlipayOpenPublicUserFollowQueryResponse queryFollowByOne(PaySetVO paySetVO, String aliUserId) {AlipayClient alipayClient = certAlipayClient(paySetVO);AlipayOpenPublicUserFollowQueryRequest request = new AlipayOpenPublicUserFollowQueryRequest();AlipayOpenPublicUserFollowQueryModel model = new AlipayOpenPublicUserFollowQueryModel();model.setUserId(aliUserId);request.setBizModel(model);AlipayOpenPublicUserFollowQueryResponse response = null;try {response = alipayClient.certificateExecute(request);} catch (AlipayApiException e) {e.printStackTrace();}return response;}-----------------------------------调用demo-----------------------------------------/*** 支付宝支付** @param httpResponse,sellerId* @return*/@GetMapping("/pay")@ApiOperation("统一下单")public void getPagePay(HttpServletResponse httpResponse, Integer sellerId) throws Exception {PaySetVO paySetVO = paySetService.findAll(sellerId);AlipayTradeWapPayModel wapPayModel = new AlipayTradeWapPayModel();AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的requestalipayRequest.setReturnUrl(wxApiConfig.getInterfacePath() + "alipay/callbackWeb");alipayRequest.setNotifyUrl(wxApiConfig.getInterfacePath() + "alipay/callback");String orderNum = WxCommonUtil.getTimeOrderNum();wapPayModel.setOutTradeNo(orderNum);wapPayModel.setBody("商品名称");wapPayModel.setSubject("//商品标题/交易标题/订单标题/订单关键字等");wapPayModel.setTotalAmount("0.01");AlipayTradeWapPayResponse response= alipayApi.doAliPay(paySetVO, wapPayModel, alipayRequest);response.getBody(); //返回到前端提交表单即可}/*** 支付宝后台回调** @param* @return*/@PostMapping(value = "/callback")public void alipayNotify(HttpServletRequest request, HttpServletResponse respons) throws Exception {//商户订单号String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");//支付宝交易号String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");//交易状态String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"), "UTF-8");log.info("-------out_trade_no-------" + out_trade_no);log.info("-------trade_no-------" + trade_no);PaySetVO paySetVO = paySetService.findAll(2);if (alipayApi.checkSign(request, paySetVO.getAliPublicCertPath())) {//验证成功//请在这里加上商户的业务逻辑程序代码if (trade_status.equals("TRADE_FINISHED")) {log.info("-------支付宝回调成功-------");//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的//如果有做过处理,不执行商户的业务程序//注意://如果签约的是可退款协议,退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知//如果没有签约可退款协议,那么付款完成后,支付宝系统发送该交易状态通知。} else if (trade_status.equals("TRADE_SUCCESS")) {log.info("-------支付宝回调成功-------");//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的//如果有做过处理,不执行商户的业务程序//注意://如果签约的是可退款协议,那么付款完成后,支付宝系统发送该交易状态通知。}respons.getWriter().println("success");} else {//验证失败respons.getWriter().println("failure");}}/*** 支付宝前台回调 也可以直接在retrun_url 配置成功页面地址** @param request* @return*/@GetMapping(value = "/callbackWeb")public String callbackWeb(HttpServletRequest request) throws Exception {//商户订单号String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"), "UTF-8");//支付宝交易号String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"), "UTF-8");PaySetVO paySetVO = paySetService.findAll(2);if (alipayApi.checkSign(request, paySetVO.getAliPublicCertPath())) {//验证成功//请在这里加上商户的业务逻辑程序代码//该页面可做页面美工编辑// out.clear();// out.println("验证成功<br />");log.info("-------支付宝前台回调成功-------");return "交易成功";} else {//该页面可做页面美工编辑// out.clear();// out.println("验证失败");log.info("-------支付宝前台回调失败-------");return "交易失败";}}/*** 交易查询* 商家可调用 alipay.trade.query(统一收单线下交易查询)接口,通过商户网站唯一订单号* out_trade_no 或支付宝交易号 trade_no 查询对应订单支付情况** @param out_trade_no or trade_no (二选一)*/@GetMapping("/queryOrder")@ApiOperation("交易查询")public AlipayTradeQueryResponse queryOrder(Integer sellerId, String out_trade_no) {PaySetVO paySetVO = paySetService.findAll(sellerId);AlipayTradeQueryModel alipayTradeQueryModel = new AlipayTradeQueryModel();alipayTradeQueryModel.setOutTradeNo(out_trade_no);//订单号AlipayTradeQueryResponse response = alipayApi.queryOrder(paySetVO, alipayTradeQueryModel);if (response.isSuccess()) {log.info("---查询成功----");response.getTotalAmount();//交易的订单金额,单位为元,两位小数。该参数的值为支付时传入的total_amountresponse.getOutTradeNo();//商家订单号response.getTradeNo();//支付宝交易号// 交易状态:WAIT_BUYER_PAY// (交易创建,等待买家付款)、TRADE_CLOSED// (未付款交易超时关闭,或支付完成后全额退款)// 、TRADE_SUCCESS(交易支付成功)// 、TRADE_FINISHED(交易结束,不可退款)String trade_status = response.getTradeStatus();} else {String sub_code = response.getSubCode();//错误码String sub_msg = response.getSubMsg();//错误码描述}return response;}/*** 退款的途径按照支付途径原路返回;* 支付渠道为花呗、余额等退款即时到账;* 银行卡的退款时间以银行退款时间为准,一般情况下 2 小时内可到账;* 开发者也可以在商家中心()中退款;* 退款是否成功可以根据同步响应的 fund_change 参数来判断,返回值为 Y 则表示退款成功;* 退款接口会根据外部请求号 out_request_no 幂等返回,因此同一笔交易需要多次部分退款时,必须使用不同的 out_request_no* ap/apis/api_1/alipay.trade.refund** @param out_trade_no or trade_no (二选一)* out_request_no,refund_amount*/@GetMapping("/refund")@ApiOperation("订单退款")public AlipayTradeRefundResponse refund(Integer sellerId, String out_trade_no, String refund_amount) throws AlipayApiException {PaySetVO paySetVO = paySetService.findAll(sellerId);AlipayTradeRefundModel alipayTradeRefundModel = new AlipayTradeRefundModel();alipayTradeRefundModel.setRefundAmount(refund_amount);//退款金额alipayTradeRefundModel.setOutTradeNo(out_trade_no);//订单号AlipayTradeRefundResponse response = alipayApi.toRefund(paySetVO, alipayTradeRefundModel);if (response.isSuccess() && response.getFundChange().equals("Y")) {log.info("---退款成功----" + response);//退款成功response.getOutTradeNo();//退款商户单号response.getTradeNo();//退款交易单号response.getRefundFee();//退款总金额response.getGmtRefundPay();//退款时间 Date类型} else {//退款异常String sub_code = response.getSubCode();//错误码String sub_msg = response.getSubMsg();//错误描述}return response;}/*** 退款订单查询** @param sellerId alipayTradeFastpayRefundQueryModel* @return*/@GetMapping("/queryRefund")@ApiOperation("订单退款查询")public AlipayTradeFastpayRefundQueryResponse queryRefund(Integer sellerId, AlipayTradeFastpayRefundQueryModel alipayTradeFastpayRefundQueryModel) throws AlipayApiException {PaySetVO paySetVO = paySetService.findAll(sellerId);AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel();/** 交易单号 和商户单号二选一**/model.setTradeNo(alipayTradeFastpayRefundQueryModel.getTradeNo());/*** 退款时的流水号* 请求退款接口时,传入的退款请求号,* 如果在退款请求时未传入,则该值为创建交易时的外部交易号* **/model.setOutRequestNo(alipayTradeFastpayRefundQueryModel.getOutRequestNo());/** 商户单号 和交易单号二选一**/model.setOutTradeNo(alipayTradeFastpayRefundQueryModel.getOutTradeNo());AlipayTradeFastpayRefundQueryResponse response = alipayApi.queryRefund(paySetVO, model);if (response.isSuccess()) {response.getTotalAmount();//该笔退款所对应的交易的订单金额response.getRefundAmount();//本次退款请求,对应的退款金额response.getOutTradeNo();//创建交易传入的商户订单号response.getTradeNo();//支付宝交易号response.getRefundReason();//退款原因log.info("---退款成功---" + response);} else {//查询失败response.getSubCode();//错误码码response.getSubMsg();//错误描述}log.info("----订单退款查询结果---" + response);return response;}/*** 转账到余额** @param sellerId* @retrun*/@GetMapping("/transfer")@ApiOperation("转账到余额")public void transfer(Integer sellerId) throws AlipayApiException {PaySetVO paySetVO = paySetService.findAll(sellerId);AlipayFundTransUniTransferModel model = new AlipayFundTransUniTransferModel();//商户自定义的唯一订单号model.setOutBizNo(WxCommonUtil.getTimeOrderNum());//订单总金额,单位为元,精确到小数点后两位model.setTransAmount("0.01");//转账业务的标题,用于在支付宝用户的账单里显示 (选填)model.setOrderTitle("测试转账");//业务备注 (选填)model.setRemark("测试转账");//收款方账户(必填)Participant payee = new Participant();//参与方的标识类型,目前支持如下枚举:1、ALIPAY_USER_ID 支付宝的会员ID// 2、ALIPAY_LOGON_ID:支付宝登录号,支持邮箱和手机号格式 (必填)payee.setIdentityType("ALIPAY_USER_ID");//参与方的标识ID,比如支付宝用户UID。 (必填)payee.setIdentity("2088612545861215");AlipayFundTransUniTransferResponse response = alipayApi.transfer(paySetVO, model, payee);if (response.isSuccess() && response.getStatus().equals("SUCCESS")) {log.info("----测试转账成功------");} else {log.info("----测试转账失败 重新查单------");String outBizNo = response.getOutBizNo();//商户订单号String orderId = response.getOrderId();//支付宝转账订单号//调用查询接口查询数据AlipayFundTransCommonQueryModel queryModel = new AlipayFundTransCommonQueryModel();queryModel.setOutBizNo(outBizNo); //商户订单号queryModel.setOrderId(orderId);AlipayFundTransCommonQueryResponse queryResponse = alipayApi.queryTransfer(paySetVO, queryModel);if (response.isSuccess() && response.getStatus().equals("SUCCESS")) {log.info("----查询转账订单---转账成功" + queryResponse);} else {log.info("----查询转账订单---转账失败" + queryResponse);}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。