支付宝支付相关代码

①需要在支付宝中签约相关权限

②配置支付宝公私钥

此处注意,前端金额单位为分,但支付宝的单位为元,此处是支付宝需要注意的地方
支付宝app支付

         //getway变量(网关),appid(支付宝应用appid),privateKey(私钥),publicKey(支付宝公钥)AlipayClient client = new DefaultAlipayClient(getway,appid,privateKey, "json","GBK", publicKey, "RSA2");//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.payAlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();// callbackurl : 支付成功回调地址request.setNotifyUrl(callBackUrl);//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();//对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。model.setBody(payParam.getBody());//商品的标题/交易标题/订单标题/订单关键字等。    model.setSubject(payParam.getSubject());//业务订单号model.setOutTradeNo(payParam.getOrderId());//设置订单超期时间model.setTimeExpire(DateUtil.format(new Date(System.currentTimeMillis() + 1000 * 60 * OutTimeMinute), "yyyy-MM-dd HH:mm:ss"));//支付宝金额(单位元)model.setTotalAmount(payParam.getTotalAmount().divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP).toPlainString());model.setProductCode("QUICK_MSECURITY_PAY");log.info("model:{}", JSON.toJSONString(model, true));request.setBizModel(model);//这里和普通的接口调用不同,使用的是sdkExecuteAlipayTradeAppPayResponse response = client.sdkExecute(request);log.info("支付宝下单response={}", response.getBody());if (response.isSuccess()) {//成功后处理的逻辑} else {//失败时处理的逻辑}

支付宝js支付

         //getway变量(网关),appid(支付宝应用appid),privateKey(私钥),publicKey(支付宝公钥)AlipayClient client = new DefaultAlipayClient(getway,appid,privateKey, "json","GBK", publicKey, "RSA2");AlipayTradeCreateRequest request = new AlipayTradeCreateRequest();// callbackurl : request.setNotifyUrl(callBackUrl);AlipayTradeCreateModel model = new AlipayTradeCreateModel();model.setBody(payParam.getBody());model.setBuyerId(payParam.getBuyerId());model.setSubject(payParam.getSubject());model.setOutTradeNo(payParam.getOrderId());model.setTimeoutExpress(DateUtil.format(DateUtils.addMinutes(new Date(), 10), "yyyy-MM-dd HH:mm:ss"));//转化交易金额单位为元DecimalFormat df = new DecimalFormat("#0.00");model.setTotalAmount(df.format(payParam.getTotalAmount().divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP).toPlainString()));request.setBizModel(model);log.info("model:{}", JSON.toJSONString(model, true));AlipayTradeCreateResponse response = client.pageExecute(request);log.info("支付宝下单response={}", response);if (response.isSuccess()) {//成功后处理的逻辑} else {//失败时处理的逻辑}

支付宝H5支付

         //getway变量(网关),appid(支付宝应用appid),privateKey(私钥),publicKey(支付宝公钥)AlipayClient client = new DefaultAlipayClient(getway,appid,privateKey, "json","GBK", publicKey, "RSA2");//该笔订单允许的最晚付款时间//设置请求参数String content = "{\"out_trade_no\":\"" + payParam.getOrderId() + "\","+ "\"total_amount\":\"" + payParam.getTotalAmount().divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP).toPlainString() + "\","+ "\"subject\":\"" + payParam.getSubject() + "\","+ "\"timeout_express\":\"" + DateUtil.format(new Date(System.currentTimeMillis() + 1000 * 60 * OutTimeMinute), "yyyy-MM-dd HH:mm:ss") + "\","+ "\"body\":\"" + payParam.getBody() + "\","+ "\"product_code\":\"" + "QUICK_MSECURITY_PAY" + "\"}";AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
//            alipayRequest.setReturnUrl(AlipayConfig.return_url);alipayRequest.setNotifyUrl(callBackUrl);alipayRequest.setBizContent(content);//请求AlipayTradeWapPayResponse response = client.pageExecute(alipayRequest);log.info("支付宝下单response={}", response);if (response.isSuccess()) {//成功后处理的逻辑} else {//失败时处理的逻辑}

支付宝订单查询

     log.info("支付宝订单查询queryPayParam={}", queryPayParam);//getway变量(网关),appid(支付宝应用appid),privateKey(私钥),publicKey(支付宝公钥)AlipayClient client = new DefaultAlipayClient(getway,appid,privateKey, "json","GBK", publicKey, "RSA2");AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();//创建API对应的request类AlipayTradeQueryModel model = new AlipayTradeQueryModel();model.setOutTradeNo(queryPayParam.getOrderId());request.setBizModel(model);log.info("支付宝第三方查询 : {}", ToStringUtils.getToString(request.getBizModel()));AlipayTradeQueryResponse execute = client.execute(request);log.info("支付宝订单查询response={}", response);if (response.isSuccess()) {PaidStatusEnum paidStatus;switch (response.getTradeStatus()) {case "TRADE_SUCCESS"://支付成功break;case "TRADE_FINISHED"://已支付break;case "WAIT_BUYER_PAY"://支付中break;case "TRADE_CLOSED"://订单关闭break;default://支付失败break;}}else{//查询失败相关逻辑}

支付宝退单退费

     log.info("支付宝订单退费refundParam={}", refundParam);=================================(业务逻辑代码start)==================================//1.查找支付记录OrderPayRecord payRecord = orderPayRecodService.findByOrderId(refundParam.getOrderId());ValidateUtil.checkNull(payRecord, ORDER_NOT_FOUND, String.format("不存在订单号:%s", refundParam.getOrderId()));ValidateUtil.checkState(payRecord.getAmount().compareTo(refundParam.getRefundFee()) >= 0, ORDER_ALL_REFUNDED,String.format("订单号:%s退款金额不能大于付款金额", refundParam.getOrderId()));//2.检查是否有重复退款就记录int count = orderRefundRecordService.countByRequestNoAndOrderId(refundParam.getOutRequestNo(), refundParam.getOrderId());ValidateUtil.checkState(count == 0, REPEAT_REFUND_REQUEST_NO, String.format("存在重复的退款流水:%s", refundParam.getOutRequestNo()));//3.init refundRecord modify payRecordOrderRefundRecord refundRecord = OrderRefundRecord.build(refundParam);refundRecord.setPayWay(PayEnum.PayWayEnum.ALIPAY);//支付宝transactionTemplate.execute(transactionStatus -> {orderRefundRecordService.save(refundRecord);return null;});=================================(业务逻辑代码end)==================================//退费流程//getway变量(网关),appid(支付宝应用appid),privateKey(私钥),publicKey(支付宝公钥)AlipayClient client = new DefaultAlipayClient(getway,appid,privateKey, "json","GBK", publicKey, "RSA2");AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();AlipayTradeRefundModel model = new AlipayTradeRefundModel();//订单号model.setOutTradeNo(refundParam.getOrderId());//退费流水号model.setOutRequestNo(refundParam.getOutRequestNo());//统一传入金额为分DecimalFormat df = new DecimalFormat("#0.00");//退费金额model.setRefundAmount(df.format(refundParam.getRefundFee().divide(BigDecimal.valueOf(100))));request.setBizModel(model);//request.setNotifyUrl(callBackPrefix + "refund/" + refundParam.getAppId() + ".do"); 这里退款之后会回调支付时填写的地址AlipayTradeRefundResponse response = client.execute(request);log.info("支付宝订单退费response={}", response);if (response.isSuccess()) {//保存下返回json,最总结果以回调为准} else {return new CommonResult().failed("退费失败");}

交易退费查询

     log.info("支付宝订单退费查询queryRefundParam={}", queryRefundParam);//getway变量(网关),appid(支付宝应用appid),privateKey(私钥),publicKey(支付宝公钥)AlipayClient client = new DefaultAlipayClient(getway,appid,privateKey, "json","GBK", publicKey, "RSA2");AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest();AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel();//退费流水号model.setOutRequestNo(queryRefundParam.getRequestNo());//订单号model.setOutTradeNo(queryRefundParam.getOrderId());request.setBizModel(model);AlipayTradeFastpayRefundQueryResponse execute = client.execute(request);log.info("支付宝订单退费查询response={}", response);if (response.isSuccess()) {//定义的枚举类,详见如下代码块RefundStatusEnum refundStatus = RefundStatusEnum.REFUNDED;for (RefundRoyaltyResult refundRoyaltyResult : response.getRefundRoyaltys()) {if (!"SUCCESS".equals(refundRoyaltyResult.getResultCode())) {refundStatus = RefundStatusEnum.FAILED;}}=============================查询处理逻辑start===================================//查询结果与本地不符时,更新本地信息if (refundRecord.getStatus() != refundStatus) {RefundStatusEnum finalRefundStatus = refundStatus;//声明式事务transactionTemplate.execute(transactionStatus -> {refundRecord.setStatus(finalRefundStatus);if (finalRefundStatus == RefundStatusEnum.REFUNDED) {mqUtil.sendRefundMsg(refundRecord.getOrderId(), refundRecord.getRequestNo());try {RespBean respBean = tradeCallBackService.tradeRefundNotify(refundRecord);if (respBean.getCode() != 0) {refundRecord.setUpstreamSynStatus(1);}} catch (Exception e) {throw new BizException(AppExceptionEnum.REMOTECALLEXCEPTION, "");}refundRecord.setSynStatus(SynStatusEnum.PUSHED);refundRecord.setRefundTime(new Date());refundRecord.setTradeNo(response.getTradeNo());OrderPayRecord payRecord = orderPayRecodService.findByOrderId(response.getOutTradeNo());BigDecimal originalRefundFee = Objects.isNull(payRecord.getRefundFee()) ? BigDecimal.ZERO :payRecord.getRefundFee();payRecord.setRefundFee(new BigDecimal(response.getRefundAmount()).add(originalRefundFee));orderPayRecodService.update(payRecord);} else {refundRecord.setErrMsg(response.getSubMsg());}orderRefundRecordService.update(refundRecord);return null;});}=============================查询处理逻辑end===================================}else{//查询失败逻辑}

枚举类代码

public enum RefundStatusEnum implements BaseEnum<Integer> {REFUNDING(1,"退款中"),REFUNDED(2,"已退款"),CLOSED(3,"已关闭"),FAILED(4,"失败");private Integer value;private String name;RefundStatusEnum(Integer value, String name) {this.value = value;this.name = name;}@Overridepublic Integer getValue() {return value;}@Overridepublic String getName() {return name;}
}

支付宝提现

①支付宝签约能力

②支付宝提现加签管理(三个证书)

     CertAlipayRequest certAlipayRequest = new CertAlipayRequest();certAlipayRequest.setServerUrl(aliWiGetway);certAlipayRequest.setAppId(aliWiAppid);certAlipayRequest.setPrivateKey(aliWiPrivateKey);certAlipayRequest.setFormat("json");certAlipayRequest.setCharset("GBK");certAlipayRequest.setSignType("RSA2");certAlipayRequest.setCertPath(new File(aliWiAppCertPublicKey).getAbsolutePath());certAlipayRequest.setAlipayPublicCertPath(new File(aliWiAlipayCertPublicKey).getAbsolutePath());certAlipayRequest.setRootCertPath(new File(aliWiAlipayRootCert).getAbsolutePath());DefaultAlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);AlipayFundTransUniTransferRequest request = new AlipayFundTransUniTransferRequest();String str = "";//alistr为支付宝授权返回参数,例success=true&result_code=200&app_id=xxxxxxxx&auth_code=02af020d57d643xxxxxxxx646950VC76&scope=kuaijie&alipay_open_id=20880017xxxxxxxx78616971213276&user_id=20887xxxxxx43762&target_id=8753239xxxxxxx5888//通过支付宝用户userid提现if(StringUtils.isNotBlank(payParam.getAliStr())){str = payParam.getAliStr().substring(payParam.getAliStr().indexOf("user_id") + 8);str = str.substring(0, str.indexOf("&"));request.setBizContent("{" +"\"out_biz_no\":\"" + payParam.getOrderNo() + "\"," +//转账金额 (上游单位为分,转化成元)"\"trans_amount\":" + payParam.getAmount().divide(new BigDecimal(100)) + "," +//单笔无密转账固定为TRANS_ACCOUNT_NO_PWD"\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," +//单笔无密转账固定为DIRECT_TRANSFER"\"biz_scene\":\"DIRECT_TRANSFER\"," +"\"order_title\":\"" + payParam.getNow() + "发起提现申请" + "\"," +"\"payee_info\":{" +//参与方的标识ID,比如支付宝用户UID。"\"identity\":\"" + str + "\"," +//参与方的标识类型,目前支持如下枚举:1、ALIPAY_USER_ID 支付宝的会员ID  2、ALIPAY_LOGON_ID:支付宝登录号,支持邮箱和手机号格式"\"identity_type\":\"ALIPAY_USER_ID\"," +"    }," +"\"remark\":\"" + "余额提现" + "\"," +"\"business_params\":\"{\\\"sub_biz_scene\\\":\\\"REDPACKET\\\"}\"" +"  }");}else {//通过支付宝账号和支付宝实名姓名提现request.setBizContent("{" +"\"out_biz_no\":\"" + payParam.getOrderNo() + "\"," +//转账金额 (上游单位为分,转化成元)"\"trans_amount\":" + payParam.getAmount().divide(new BigDecimal(100)) + "," +//单笔无密转账固定为TRANS_ACCOUNT_NO_PWD"\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," +//单笔无密转账固定为DIRECT_TRANSFER"\"biz_scene\":\"DIRECT_TRANSFER\"," +"\"order_title\":\"" + payParam.getNow() + "发起提现申请" + "\"," +"\"payee_info\":{" +//参与方的标识ID,比如支付宝用户UID。"\"identity\":\"" + payParam.getAliAccount() + "\"," +//参与方的标识类型,目前支持如下枚举:1、ALIPAY_USER_ID 支付宝的会员ID  2、ALIPAY_LOGON_ID:支付宝登录号,支持邮箱和手机号格式"\"identity_type\":\"ALIPAY_LOGON_ID\"," +//参与方真实姓名,如果非空,将校验收款支付宝账号姓名一致性。当identity_type=ALIPAY_LOGON_ID时,本字段必填。若传入该属性,则在支付宝回单中将会显示这个属性"\"name\":\"" + payParam.getAliRealName() + "\"" +"    }," +"\"remark\":\"" + "余额提现" + "\"," +"\"business_params\":\"{\\\"sub_biz_scene\\\":\\\"REDPACKET\\\"}\"" +"  }");}AlipayFundTransUniTransferResponse response = alipayClient.certificateExecute(request);if (response.isSuccess()) {//提现成功处理逻辑}else{//提现失败处理逻辑}

支付宝提现查询

     CertAlipayRequest certAlipayRequest = new CertAlipayRequest();certAlipayRequest.setServerUrl(aliWiGetway);certAlipayRequest.setAppId(aliWiAppid);certAlipayRequest.setPrivateKey(aliWiPrivateKey);certAlipayRequest.setFormat("json");certAlipayRequest.setCharset("GBK");certAlipayRequest.setSignType("RSA2");certAlipayRequest.setCertPath(new File(aliWiAppCertPublicKey).getAbsolutePath());certAlipayRequest.setAlipayPublicCertPath(new File(aliWiAlipayCertPublicKey).getAbsolutePath());certAlipayRequest.setRootCertPath(new File(aliWiAlipayRootCert).getAbsolutePath());DefaultAlipayClient alipayClient = new DefaultAlipayClient(certAlipayRequest);AlipayFundTransCommonQueryRequest request = new AlipayFundTransCommonQueryRequest();if(StringUtils.isNotBlank(param.getOrderId()) && StringUtils.isNotBlank(param.getPayFundOrderId())) {request.setBizContent("{" +"\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," +"\"biz_scene\":\"DIRECT_TRANSFER\"," +"\"out_biz_no\":\"" + param.getOrderNo() + "\"," +       //业务订单号"\"order_id\":\"" + param.getOrderId() + "\"," +      //第三方orderId"\"pay_fund_order_id\":\"" + param.getPayFundOrderId() + "\"" +      //第三方pay_fund_order_id"  }");}else{request.setBizContent("{" +"\"product_code\":\"TRANS_ACCOUNT_NO_PWD\"," +"\"biz_scene\":\"DIRECT_TRANSFER\"," +"\"out_biz_no\":\"" + param.getOrderNo() + "\"" +"  }");}AlipayFundTransCommonQueryResponse response = alipayClient.certificateExecute(request);if(response.isSuccess()){//提现查询成功逻辑}else{//提现查询失败逻辑}

关注公众号

每周会更新干货知识

支付宝api全(支付宝支付(app,h5,js),支付宝订单查询,支付宝退款,支付宝交易退款查询,支付宝提现,支付宝提现查询)相关推荐

  1. uniapp中唤醒支付宝,微信进行支付并返回app

    支付分为前端发起支付,和后端发起支付两种方式 1.在前端发起支付,uniapp给我们提供好了,可以使用的api接口. uni.requestPayment({provider: 'alipay',or ...

  2. 支付宝支付 App支付以及网页支付接入流程

    支付宝支付申请流程 该文档支付包含两部分:支付宝App支付以及支付宝网页支付(手机网站支付) 注:使用时根据需要去开通即可 前提: 1.注册支付宝开发者账户,注册流程参见<支付宝开发者帐号注册及 ...

  3. Java对接支付宝支付(App+H5)

    App+H5支付方式(比微信简单) 1.登录支付宝开放平台,选择网页和移动应用: 2.填完app相关的信息后,点击App,设置接口加签方式:如下,选择SHA256,然后通过支付宝提供的工具生成公私钥对 ...

  4. 支付宝支付(二):PC支付,H5支付,APP支付通用接口

    目录 一.PC端支付: 二.H5端支付: 三.APP端支付: 一.PC端支付: 1.调用支付接口,返回form表单,前端直接渲染跳转到支付宝PC端统一的支付页面 2.官方文档入口:https://op ...

  5. php支付宝h5 app,H5网站接入支付宝的支付接口

    [HttpPost]public voidAsyncPay() {SortedDictionary sPara =GetRequestPost();//将post请求过来的参数传化为SortedDic ...

  6. 支付宝 实现 移动网页支付、PC网页支付、混合APP支付(支持微信支付)

    1.移动网页支付 支付宝开放平台中申创建移动网页应用: 前端比较省事 1.若后台返回的是form表单执行以下代码,每次用完及时销毁: 当然不想写承载页的还有其他方法调起支付,具体逻辑具体分析,根据不同 ...

  7. 微信支付、支付宝最全接入指引,看完立刻就可以上手!

    每天早上七点三十,准时推送干货 Photo by XPS on Unsplash Hello,大家好,我是阿粉~ 前段时间阿粉在公司接手了一个支付项目,这个项目接入了微信.支付宝.这个项目开发下来,阿 ...

  8. vue 在微信公众号里使用支付宝支付(h5支付宝支付)

    vue 在微信公众号里使用支付宝支付(h5支付宝支付) 需求:在微信公众号里面支持支付宝支付. 思路:微信是不能直接调用支付宝的,所以我们需要使用一个中间页提示用户在浏览器中打开,然后进行支付宝网页或 ...

  9. 支付-支付宝接口全流程

    支付宝支付产品如下:文档:https://b.alipay.com/signing/productSetV2.htm 如何开通支付宝手机网站支付接口? 进入网址:https://b.alipay.co ...

  10. PHP项目集成支付宝PC端扫码支付API(国内支付)

    一.PC端(电脑端)网站扫码支付接口申请流程 1. 注册是支付宝商家账号 -- 注册地址: 2. 注册成功后,找到蚂蚁金服开放平台,点击支付应用: 3. 创建应用 4. 添加应用中的电脑支付功能 5. ...

最新文章

  1. c++socket多个客户端通过不同端口与一个服务端通信_手写RPC,深入底层理解整个RPC通信...
  2. 最后生成神么格式的代码_智能扩充机器人的“标准问”库之Query生成
  3. Java:comp/env/讲解与JNDI
  4. 【HDU - 1276】士兵队列训练问题 (报数问题 模拟)
  5. (kruskal)还是畅通工程
  6. Ubuntu 无法获得锁
  7. 【UNIX环境高级编程】线程同步
  8. 【软考】2021软件设计师复习开坑指南
  9. 表白html苹果电脑,视频教你如何用苹果Mac 向女生表白!
  10. BZOJ2748[HAOI2012] 音量调节
  11. 会话描述协议-SDP
  12. 1992-2020年全国大学生数学建模竞赛国家一等奖论文/美赛/认证杯
  13. 全国各省 省会城市经纬度汇总
  14. TIA Openness开发入门(1)
  15. 当C++遇上AUTOSAR编码规范,你的安全我来护航
  16. 麦客存储侯峰:Filecoin生态构建与价值革命 | 星际崛起IPFS云峰会
  17. python爬取今日头条图片
  18. w10系统服务器如何创建新用户,win10添加新用户的方法分享
  19. 页面里的在线实时聊天实现
  20. LeetCode: 173. Binary Search Tree Iterator

热门文章

  1. ps快捷键及相关基础知识总结(持续ing)
  2. CF卡镜像备份及恢复系统
  3. 信息安全领域必考证书有哪几本?
  4. 微博营销的优劣势。如何利用微博开展营销。
  5. Office2016安装后回滚 错误代码1935
  6. linux下分配磁盘空间,linux如何分配磁盘空间
  7. vc编程的ime输入法菜单开发
  8. “你才二十多岁,可以成为任何你想成为的人”
  9. 2017-10-02清北模拟赛
  10. LoadRunner11代理在Win10操作系统启动不起来,或者报错:该内存不能为written