简介

首先要说明的是个人感觉接入支付宝比微信简单多了,很轻松的,所以同学们不要紧张~

当然还是老规矩啦,上来肯定的贴上官网地址,因为我这些服务天天在更新,而我的文章是教大家方法,而让你不是照葫芦画瓢

另外。此实现只是让大家参考,复制后直接可以运行起来而已。可以减少大量的测试时间。

运行Demo

我们来到官方demo的下载地址

可以看到有三个,选择你需要的就行了,下载解压完直接导入eclipse并配置一些参数运行就可以查看效果了,因为小编使用的是java语言,所以这里就只贴上java版本的代码了。

添加依赖发

        <!--alipay--><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.19.12.ALL</version></dependency><!--alipay-->

话不多说,开始下单支付,贴代码

    // 请求使用的编码格式,如utf-8,gbk,gb2312等public static final String ALIPAY_CHARSET = "utf-8";// 支付宝网关public static final String ALIPAY_GATEWAY_URL =                 "https://openapi.alipay.com/gateway.do";// 仅支持JSONpublic static final String ALIPAY_FORMAT = "JSON";// 销售产品码,与支付宝签约的产品码名称。注:目前电脑支付场景下仅支持FAST_INSTANT_TRADE_PAYpublic static final String PRODUCT_CODE = "FAST_INSTANT_TRADE_PAY";/*** 支付宝-线上支付-支付** @param response  * @param request* @param alipayOnlinePayVO  在支付前,可以考虑把要支付的内容封装起来,方便以后扩展。* @throws Exception*/public String pay(HttpServletResponse response, HttpServletRequest request,         AlipayOnlinePayVO alipayOnlinePayVO) throws Exception {AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setReturnUrl("www.test.cn/pay/returnUrl"); // 支付成功跳转url// 如果通知路径,需要使用系统标识,可以考虑使用路径参数alipayRequest.setNotifyUrl("www.test.cn/pay/returnUrl"); // 支付成功通知url//获得初始化的AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(ALIPAY_GATEWAY_URL,   // 支付宝网关地址"",                   // 支付宝分配给开发者的ID"",                   // 商户私钥ALIPAY_FORMAT,        // 仅支持JSONALIPAY_CHARSET,       // 字符集(建议utf-8)"",                   // 商户公钥"RES2");              // 签名类型(RSA2,RSA)String subject = "订单标题";   // 订单标题。(必选)// 防止中文乱码???,需要转一下String convertSubject = new String(subject.getBytes(), "UTF-8");//String body = "";//若想给BizContent增加其他可选请求参数,以增加自定义超时时间参数timeout_express来举例说明alipayRequest.setBizContent("{\"out_trade_no\":\"" + order_no + "\"," // 订单号+ "\"total_amount\":\"" + order_amount + "\"," // 订单总金额+ "\"subject\":\"" + convertSubject + "\","    // 订单标题+ "\"timeout_express\":\"" + time_out + "m" + "\"," // 订单超时时间+ "\"product_code\":\"" + PRODUCT_CODE + "\"}");//请求参数可查阅【电脑网站支付的API文档-alipay.trade.pag.pay-请求参数】章节//请求String result = alipayClient.pageExecute(alipayRequest).getBody();//输出 结果 直接返回前端页面return result;}

这样,我们就可以扫码支付了

支付成功以后,会调用我们支付时添加的通知地址,支付宝会告知我们的系统,这条订单已经支付成功或者失败了。并且前端页面会执行跳转页面操作。

订单通知终态代码

    /*** 参会者个人-支付宝订单支付终态-通知* 电脑网站支付* 电脑网站支付接口,详见 电脑网站支付异步通知触发条件* 默认TRADE_SUCCESS(交易成功)状态触发异步通知。* TRADE_CLOSED(交易关闭)、TRADE_FINISHED(交易完成)、WAIT_BUYER_PAY(交易创建)不触发异步通知。* WAIT_BUYER_PAY 交易创建,等待买家付款  交易创建* TRADE_CLOSED  未付款交易超时关闭,或支付完成后全额退款 交易关闭* TRADE_SUCCESS 交易支付成功,可退款   支付成功* TRADE_FINISHED    交易结束,不可退款    交易完成** @param request* @param resp* @return* @throws Exception*/@PostMapping("notify/{acCode}")public ResultModel notify(HttpServletRequest request,@PathVariable("acCode") String acCode) throws Exception {//获取支付宝POST过来反馈信息Map<String, String> params = new HashMap<String, String>();Map<String, String[]> requestParams = request.getParameterMap();for (Iterator<String> 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);}// 获取订单号String orderNo = "";if (params.containsKey("out_trade_no")) {orderNo = params.get("out_trade_no");}// 这里是小编自己 的支付宝配置信息 通过数据库查询的 Alipay alipayConfig = alipayConfigRepository.findOneByacCode(acCode);if (null == alipayConfig ) {log.info("支付宝通知异常,支付宝配置信息不存在,订单信息: 【:" + params + "】");}// 验签方式boolean signVerified = false;if ("RSA".equals(alipayConfig .getSignType())) {// RSA加密方式signVerified = AlipaySignature.rsaCheckV1(params,alipayConfig .getAlipayPublicKey(),  // 商户公钥ALIPAY_CHARSET);} else if ("RSA2".equals(alipayConfig .getSignType())) {// RSA2加密方式signVerified = AlipaySignature.rsaCheckV1(params,alipayConfig .getAlipayPublicKey(), // 商户公钥ALIPAY_CHARSET,alipayConfig .getSignType()); //调用SDK验证签名} else {log.info("验签方式异常,错误数据信息打印: 【:" + params + "】");}//——请在这里编写您的程序(以下代码仅作参考)——/* 实际验证过程建议商户务必添加以下校验:1、需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号,2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额),3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方(有的时候,一个商户可能有多个seller_id/seller_email)4、验证app_id是否为该商户本身。*/if (signVerified) {//验证成功//商户订单号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");String merchantId = "";if (params.containsKey("seller_id")) {merchantId = new String(request.getParameter("seller_id").getBytes("ISO-8859-1"), "UTF-8");}String completeDate = "";if (params.containsKey("gmt_payment")) {completeDate = new String(request.getParameter("gmt_payment").getBytes("ISO-8859-1"), "UTF-8");}GuestOrderEntity guestOrderEntity = guestOrderRepository.findByOrderNo(out_trade_no, activeCode);if (trade_status.equals("TRADE_FINISHED")) {//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//如果有做过处理,不执行商户的业务程序//注意://退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知} else if (trade_status.equals("TRADE_SUCCESS")) {// TRADE_SUCCESS(交易成功)状态触发异步通知。//判断该笔订单是否在商户网站中已经做过处理//如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序//如果有做过处理,不执行商户的业务程序//注意://付款完成后,支付宝系统发送该交易状态通知// 订单成功返回的数据}log.info("success");} else {//验证失败log.info("fail");//调试用,写文本函数记录程序运行情况是否正常String sWord = AlipaySignature.getSignCheckContentV1(params);
//            AlipayConfig.logResult(sWord);log.info("验签失败,数据打印: " + sWord);}//——请在这里编写您的程序(以上代码仅作参考)——return ResultModelUtil.success();}

另外呢,写这篇文章的目的就是方便自己以后的使用,以及各位参考的大佬可以少走一些弯路。

接入支付宝电脑网站支付实现JAVA版相关推荐

  1. 支付宝开放平台开发助手_支付宝:如何创建和接入支付宝电脑网站支付-新手必备...

    1.登录支付宝 1.打开支付宝官网,以"我是支付宝商家"用户登录 https://www.alipay.com/ 2.进入"产品中心",选择并申请支付类型 2. ...

  2. Laravel 集成支付宝电脑网站支付

    前期准备: 1.下载SDK,里面还有Demo,可以参照Demo里面的内容快速接入 支付宝电脑网站支付SDK&Demo 2.把下载的zip文件解压,放到项目目录里,这里作者放在app文件夹里,方 ...

  3. Spring Boot集成支付宝电脑网站支付功能

    Spring Boot集成支付宝电脑网站支付功能 接入准备 登录 创建应用 添加能力 生成私钥与公钥 开发设置 沙箱环境 示例Demo的使用与学习 下载Demo 启动项目 参数配置 执行测试 Spri ...

  4. 支付宝电脑网站支付 demo 启动过程

    接支付的这个需求,想了很久,看了官网总是没有头绪,依旧不知道怎么做,于是把demo下载下来跑一下,由于太菜,弄了一天. 准备工作: 支付宝开发平台登录后注册获取APPID,支付宝公钥,私钥 (http ...

  5. java接入支付宝手机网站支付

    适用范围:申请支付宝手机网站支付接口并完成认证,适用于手机wap网页,微信默认不支持可通过引导用户至浏览器支付,发送请求后调用支付宝客服端完成支付,如果没有安装APP则使用网页支付. 支付宝其他支付方 ...

  6. 支付宝电脑网站支付及回调

    官方文档:https://docs.open.alipay.com/270 支付 电脑网站支付的支付接口 alipay.trade.page.pay 调用时序图如下: 调用顺序如下: 商户系统请求支付 ...

  7. SpringBoot(二)集成支付宝 - 电脑网站支付和查询账单案例

    一.简介 电脑支付常用于电商和后台管理系统的账户充值等场景. 电脑网站支付 文档 电脑网站支付流程图 项目源代码(含数据库):码云Gitee 二.集成步骤 0.创建应用.配置密钥 集成前需要先创建应用 ...

  8. 支付宝-电脑网站支付初长成

    前言 企业制定金额生成微信二维码集成完后,客户需要再集成支付宝,经过差文档及看博客终于实现出来(支付宝生成指定金额二维码,需要在"蚂蚁金服开放平台"注册账号,并且开通"电 ...

  9. PHP接入支付宝手机网站支付、移动支付接口

    payment 项目2.0版本 前面已经说完了 PHP接入支付宝 即时到帐接口 回调接口也已经完成.这篇主要讲 手机网站支付 . 移动支付 接口的调用.调用方式与即时到帐 基本一样. 关于代码部分的详 ...

最新文章

  1. 通过从全局和类内部重载operator new /delete来获取内存管理权
  2. python socketserver最大连接_大聊Python----SocketServer
  3. 【c语言数据结构笔记】1.2 数据结构
  4. Java 蓝桥杯 判断闰年
  5. asp.net ajax 1.0中detailview与updatepanel混合使用的例子
  6. IT技术人需要具备哪些才能成功
  7. 针对主流浏览器的CSS-HACK写法及IE常用条件注释
  8. PCIe协议在具体实现时的大体框图
  9. 分享个B端产品分析报告
  10. VGG-16网络结构详解
  11. 利用postman测试post请求
  12. BZOJ3202 [Sdoi2013]项链
  13. HTML压缩(JSP的GZIP实现)
  14. 源码分析 --- MapReduce如何确定任务的SplitSize、Splits、Map、Reduce
  15. python读书心得体会范文_读书心得体会范文(通用3篇)
  16. [转载]世界各国语言文字举例
  17. 2012第50周星期一自制力网摘
  18. 朋游风景:让智能手机成为贴身导游
  19. 『重磅福利』提供WoS数据C1和EM重复字段清洗服务
  20. 用遗传算法求解TSP问题

热门文章

  1. Win10 添加虚拟打印机
  2. Arduino基础入门篇26—步进电机
  3. iOS开发者程序许可协议
  4. Android开发和安全系列工具
  5. celeste mod如何安装
  6. 2016计算机2级试题,2016年计算机二级考试题及答案
  7. 第 40 章 呼吸灯与 SPWM 波
  8. 以终为始,向死而生——5月份英语总结
  9. 海康威视工业相机MAC地址
  10. 南非世界杯-我在南非(二)