支付宝-电脑网站支付

简介: 电脑网站支付,也称扫码支付,是专门针对PC端业务而开发的一种支付方式,既有支付宝提供在网页展示一个动态生成的支付二维码,用户通过手机支付宝扫码以后可实现支付功能的一种支付方式。

1、概念

电脑网站支付,也称扫码支付,是专门针对PC端业务而开发的一种支付方式,既有支付宝提供在网页展示一个动态生成的支付二维码,用户通过手机支付宝扫码以后可实现支付功能的一种支付方式。

image.png

2、创建应用

登录支付宝开放平台(open.alipay.com),创建应用,应用审核通过会生成一个APPID。

image.png

3、签约电脑网站支付功能

在 能力列表 中点击 添加能力来添加电脑网站支付功能,并签约方可调用

image.png

4、配置应用公钥和应用私钥

参考文档,非常详细
https://opendocs.alipay.com/open/270/105899

5、接入SDK

/**
* 电脑网站支付
* https://docs.open.alipay.com/270/105899/
* @paramhttpResponse
* @throws ServletException
* @throws IOException
*/
public static void pcWebPay(String amount,HttpServletResponse httpResponse) {
  AlipayClient alipayClient = new DefaultAlipayClient(URL, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE); //获得初始化的AlipayClient
  AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();//创建API对应的request
  alipayRequest.setReturnUrl("https://www.baidu.com");
  alipayRequest.setNotifyUrl("https://xxx.xxx.com/abc/alipay/pcWebPayCallBack");//在公共参数中设置回跳和通知地址
  alipayRequest.setBizContent("{" +
          "    \"out_trade_no\":\""+System.currentTimeMillis()+"\"," +
          "    \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," +
          "    \"total_amount\":"+amount+"," +
          "    \"subject\":\"Iphone6 16G\"," +
          "    \"body\":\"Iphone6 16G\"," +
          "    \"passback_params\":\"123&456&789"," +
          "    \"extend_params\":{" +
          "    \"sys_service_provider_id\":\""+System.currentTimeMillis()+"\"" +
          "    }"+
          "  }");//填充业务参数
  try {
      String form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
      httpResponse.setContentType("text/html;charset=" + CHARSET);
      httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
      httpResponse.getWriter().flush();
      httpResponse.getWriter().close();
  } catch (AlipayApiException e) {
      e.printStackTrace();
  } catch (IOException e) {
      e.printStackTrace();
  }
}
    
/**
* 扫码支付回调 当收银台调用预下单请求API生成二维码展示给用户后,用户通过手机扫描二维码进行支付,支付宝会将该笔订单的变更信息,沿着商户调用预下单请求时所传入的通知地址主动推送给商户。
* 通知参数说明 https://docs.open.alipay.com/194/103296/
* 程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是 success 这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h);
* 程序执行完成后,该页面不能执行页面跳转。如果执行页面跳转,支付宝会收不到 success 字符,会被支付宝服务器判定为该页面程序运行出现异常,而重发处理结果通知;
* @paramalipayPublicKey
* @paramrequest
* @return
*/
public static void qrcodePayCallBack(String alipayPublicKey, HttpServletRequest request, HttpServletResponse response) {
  Map<String, String> result = 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");
      result.put(name, valueStr);
  }

  //支付宝交易凭证号
  String tradeNo = result.get("trade_no");
  //原支付请求的商户订单号
  String outTradeNo = result.get("out_trade_no");
  String appId = result.get("app_id");
  String sellerId = result.get("seller_id");
  String totalAmount = result.get("total_amount");
  String body = result.get("body");
  logger.info("tradeNo=={},outTradeNo=={},appId=={},sellerId=={},totalAmount=={},body=={}",tradeNo,outTradeNo,appId,sellerId,totalAmount,body);
        //切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。  
  try {
      boolean flag = AlipaySignature.rsaCheckV1(result, alipayPublicKey, CHARSET, SIGN_TYPE);
      logger.info("支付宝回调结果===========" + flag);
      if (flag) {
          logger.info("支付宝回调success===========");
          toAliPayResult = "success";
      } else {
          logger.info("支付宝回调failure===========");
          toAliPayResult = "failure";
      }
      //用字节流形式打印success,解决支付宝重复回调
      BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
      out.write(toAliPayResult.getBytes());
      out.flush();
      out.close();
  } catch (AlipayApiException e) {
      e.printStackTrace();
  } catch (IOException e) {
      e.printStackTrace();
  }
}

image.png

6、测试

image.png

image.png

image.png

image.png

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海

上一篇:mac安装Elasticsearch

相关文章
|
Java
java: 错误: 无效的源发行版:15
java: 错误: 无效的源发行版:15
828 0
java: 错误: 无效的源发行版:15
|
10月前
|
Unix Linux 虚拟化
VMware Workstation 17.6.2 发布下载,现在完全免费无论个人还是商业用途
VMware Workstation 17.6.2 发布下载,现在完全免费无论个人还是商业用途
45234 16
VMware Workstation 17.6.2 发布下载,现在完全免费无论个人还是商业用途
|
监控 数据可视化 大数据
蚂蚁金服数据洞察分析平台DeepInsight:人人都是数据分析师
小蚂蚁说: 大数据时代,由数据驱动的用户行为分析、运营分析、业务分析无疑是最被关注的“热词”,尤其对于拥有海量数据的大中型企业来说,对数据的需求已远远超越了传统数据报表所能提供的范畴。如何运用自助式BI实现当代企业精细化运营,已成为企业运营管理的新课题。
7600 0
|
3月前
|
设计模式 人工智能 自然语言处理
AI生成的Logo版权归谁?
AI 生成 Logo 已成为设计领域的重要应用,广泛用于个人品牌和商业场景。本文分析了 AI 生成 Logo 的版权归属问题,结合国内外法律案例指出,用户若深度参与创作,如精心设计提示词、调整参数等,可主张著作权。同时介绍了多个主流 AI Logo 工具的版权规则,并提供确保版权与商用安全的实用技巧,包括审查授权条款、优化创作过程及商标注册建议。
211 5
|
12月前
|
前端开发 Java 应用服务中间件
JVM进阶调优系列(1)类加载器原理一文讲透
本文详细介绍了JVM类加载机制。首先解释了类加载器的概念及其工作原理,接着阐述了四种类型的类加载器:启动类加载器、扩展类加载器、应用类加载器及用户自定义类加载器。文中重点讲解了双亲委派机制,包括其优点和缺点,并探讨了打破这一机制的方法。最后,通过Tomcat的实际应用示例,展示了如何通过自定义类加载器打破双亲委派机制,实现应用间的隔离。
|
11月前
|
供应链 安全 数据挖掘
深度剖析区块链技术在金融科技领域的创新应用与挑战####
本文旨在探讨区块链技术于金融科技(FinTech)领域的革新性应用,分析其如何重塑传统金融服务模式,并深入剖析面临的技术与监管挑战。通过案例研究与数据分析,揭示区块链在提升金融效率、增强安全性及促进金融包容性方面的潜力,同时强调构建健全的法律法规框架与技术创新之间的平衡对于推动行业健康发展的重要性。本文不涉及具体代码实现或技术细节,而是聚焦于区块链应用的战略意义与实践挑战。 ####
|
12月前
|
存储 NoSQL MongoDB
MongoDB 8.0现已全面可用
如何从MongoDB旧版本升级至8.0,可登录参考升级指南:https://www.mongodb.com/zh-cn/docs/manual/tutorial/upgrade-revision/
|
存储
好看又规范的Github Readme 制作指南
本文是关于制作规范且外观吸引人的GitHub README文件的指南,包括了README的基本结构、美化技巧,以及如何使用Markdown格式、徽标和图片来增强文档的可读性和吸引力。
1141 0
|
JavaScript Java 测试技术
基于SpringBoot+Vue的学生宿舍管理系统附带文章和源代码
基于SpringBoot+Vue的学生宿舍管理系统附带文章和源代码
232 2
|
存储 Prometheus 监控
性能监控之国产时序库TDengine TDinsight dashboard 指标解析
【2月更文挑战第1天】性能监控之国产时序库TDengine TDinsight dashboard 指标解析
1076 1
性能监控之国产时序库TDengine TDinsight dashboard 指标解析