源码已上传github,欢迎专注:https://github.com/shirayner/alipay-wap

一、基础部分

1.手机网站支付产品介绍

1.1 阅读官方介绍: 手机网站支付产品介绍

1.2 看完官方的介绍之后,可以做出如下总结:

通过接入此接口,能让商家接入支付宝的支付功能。具体支付流程如下:

(1)若用户已安装支付宝客户端,则在支付时会唤起支付宝客户端进行支付。

(2)若用户未安装支付宝客户端,则需要在网页中登录支付宝账号进行支付。

2.接入准备

参考:java支付宝开发-01-沙箱环境接入  ,配置好沙箱环境,并下载好沙箱钱包

二、代码实现

1.AlipayConfig

此文件主要存放支付宝的一些配置信息 ,大家需要  登录沙箱环境  ,找到相关配置参数,并据此修改配置文件。

  1. package com.ray.alipaywap.config;
  2.  
  3. /**
  4. * @author : shirayner
  5. * @date : 2018/3/9
  6. * @time : 9:36
  7. * @desc : 支付宝的相关配置
  8. **/
  9. public class AlipayConfig {
  10. //支付宝网关名-正式环境
  11. //public static final String OPEN_API_DOMAIN="https://openapi.alipay.com/gateway.do";
  12. //支付宝网关名-沙箱环境
  13. public static final String OPEN_API_DOMAIN="https://openapi.alipaydev.com/gateway.do";
  14.  
  15. /** 一、应用相关
  16. *
  17. */
  18.  
  19. /**
  20. * 1.应用ID
  21. */
  22. public static final String APP_ID="2016091100487746";
  23.  
  24. /**
  25. * 2.应用私钥
  26. */
  27. public static final String APP_PRIVATE_KEY="应用私钥";
  28.  
  29. /**
  30. * 3.应用公钥
  31. */
  32. public static final String APP_PUBLIC_KEY="应用公钥";
  33.  
  34. /**
  35. * 4.支付宝公钥
  36. */
  37. public static final String ALIPAY_PUBLIC_KEY="支付宝公钥";
  38.  
  39. /**
  40. * 二、商家相关
  41. */
  42.  
  43. /**
  44. * 1.app域名
  45. * 需要改成自己应用的地址
  46. */
  47. public static final String APP_DOMAIN = "http://rayge.nat300.top";
  48.  
  49. /**
  50. * 2.回跳url
  51. * 即付款之后跳回到此页面。注:沙箱环境下,有bug,不会跳到此页面。正式环境下正常。
  52. */
  53. public static final String RETURN_URL = APP_DOMAIN + "/return_url.jsp";
  54.  
  55. /**
  56. * 3.通知url
  57. */
  58. public static final String NOTIFY_URL = APP_DOMAIN + "/notify_url.jsp";
  59.  
  60. /**
  61. * 三、此部分不用修改
  62. */
  63. /**
  64. * 5.app_auth_token在ISV代替商家调用接口时使用,商家自己调用,可传null。
  65. */
  66. public static final String APP_AUTH_TOKEN="";
  67.  
  68. public static final String SIGN_TYPE = "RSA2";
  69.  
  70. public static final String CHAR_SET = "UTF-8";
  71.  
  72. public static final String FORMAT = "json";
  73. }

2.service

2.1 接口——WapPayService

  1. package com.ray.alipaywap.service;
  2.  
  3. import com.alipay.api.response.AlipayTradeWapPayResponse;
  4.  
  5. /**
  6. * @author : shirayner
  7. * @date : 2018/3/12
  8. * @time : 10:48
  9. * @desc :
  10. **/
  11. public interface WapPayService {
  12. public AlipayTradeWapPayResponse pay(String content) throws Exception;
  13.  
  14. }

2.2 实现类——WapPayServiceImpl

  1. package com.ray.alipaywap.service.impl;
  2.  
  3. import com.alipay.api.AlipayApiException;
  4. import com.alipay.api.AlipayClient;
  5. import com.alipay.api.DefaultAlipayClient;
  6. import com.alipay.api.request.AlipayTradeWapPayRequest;
  7. import com.alipay.api.response.AlipayTradeWapPayResponse;
  8. import com.ray.alipaywap.config.AlipayConfig;
  9. import com.ray.alipaywap.service.WapPayService;
  10.  
  11. /**
  12. * @author : shirayner
  13. * @date : 2018/3/12
  14. * @time : 11:02
  15. * @desc :
  16. **/
  17. public class WapPayServiceImpl implements WapPayService{
  18.  
  19. // 初始化alipayClient对象
  20. public static AlipayClient alipayClient = new DefaultAlipayClient(
  21. AlipayConfig.OPEN_API_DOMAIN, AlipayConfig.APP_ID, AlipayConfig.APP_PRIVATE_KEY, AlipayConfig.FORMAT,
  22. AlipayConfig.CHAR_SET, AlipayConfig.ALIPAY_PUBLIC_KEY);
  23.  
  24. /**
  25. * 手机网站支付
  26. * @param content 订单信息
  27. * @return
  28. * @throws AlipayApiException
  29. */
  30. @Override
  31. public AlipayTradeWapPayResponse pay(String content) throws AlipayApiException {
  32. //1. 创建API对应的request
  33. AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();
  34.  
  35. //2. 在公共参数中设置回跳和通知地址(应用提供给支付宝的请求路径),沙箱模式中不起作用(不知道是不是这个原因,支付宝技术客服告诉我正式上线后就没问题)
  36. alipayRequest.setReturnUrl(AlipayConfig.APP_DOMAIN+"/index.jsp");
  37. alipayRequest.setNotifyUrl(AlipayConfig.NOTIFY_URL);
  38. // 填充业务参数
  39. alipayRequest.setBizContent(content);
  40.  
  41. //3.执行请求
  42. AlipayTradeWapPayResponse alipayResponse = alipayClient
  43. .pageExecute(alipayRequest);
  44. return alipayResponse;
  45. }
  46. }

3. servlet-WapPayServlet

接收前台订单信息,并调用支付宝接口,来唤起支付宝app来进行支付。

  1. package com.ray.alipaywap.controller;
  2.  
  3. import com.alipay.api.response.AlipayTradeWapPayResponse;
  4. import com.ray.alipaywap.config.AlipayConfig;
  5. import com.ray.alipaywap.service.WapPayService;
  6. import com.ray.alipaywap.service.impl.WapPayServiceImpl;
  7.  
  8. import javax.servlet.ServletException;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import java.io.IOException;
  12.  
  13. public class WapPayServlet extends javax.servlet.http.HttpServlet {
  14. private WapPayService wapPayService;
  15.  
  16. @Override
  17. public void init() throws ServletException {
  18. super.init();
  19. wapPayService = new WapPayServiceImpl();
  20.  
  21. }
  22.  
  23. @Override
  24. protected void doPost(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {
  25.  
  26. //1.设置将发送到客户端的响应的内容类型
  27. resp.setContentType("text/html;charset="+ AlipayConfig.CHAR_SET);
  28.  
  29. //1.1
  30. String subject = request.getParameter("subject");
  31. String total_amount = request.getParameter("total_amount");
  32.  
  33. String out_trade_no = String.valueOf(System.currentTimeMillis());
  34. //1.2
  35.  
  36. //2.填充业务参数
  37. String content="{" +
  38. " \"out_trade_no\":\""+out_trade_no+"\"," +
  39. " \"total_amount\":\""+total_amount+"\"," +
  40. " \"subject\":\""+subject+"\"," +
  41. " \"product_code\":\"QUICK_WAP_PAY\"" +
  42. " }";
  43.  
  44. //3.去支付
  45. AlipayTradeWapPayResponse alipayResponse= null;
  46. try {
  47. alipayResponse = wapPayService.pay(content);
  48.  
  49. } catch (Exception e) {
  50. e.printStackTrace();
  51. }
  52. String form= alipayResponse.getBody();
  53. System.out.println(form);
  54.  
  55. //4.输出支付宝返回的表单页面
  56. resp.setContentType("text/html;charset=" + AlipayConfig.CHAR_SET);
  57. resp.getWriter().write(form);//直接将完整的表单html输出到页面
  58. resp.getWriter().flush();
  59. resp.getWriter().close();
  60.  
  61. }
  62.  
  63. @Override
  64. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  65.  
  66. }
  67.  
  68. }

4.前台JSP页面

index.jsp

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. </head>
  6. <body>
  7. <h2>订单详情</h2>
  8. </body>
  9. <form action="/wapPayServlet" method="post" >
  10. 商品: <input id="subject" type="text" name="subject" value="IphoneX 128G"/> <br><br>
  11. 总价: <input id="total_amount" type="text" name="total_amount" value="99.88"/> <br><br>
  12. <input type="submit" value="提交订单" /> <br><br>
  13. </form>
  14.  
  15. </html>

5.web.xml

  1. <!DOCTYPE web-app PUBLIC
  2. "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
  3. "http://java.sun.com/dtd/web-app_2_3.dtd" >
  4.  
  5. <web-app>
  6. <display-name>Archetype Created Web Application</display-name>
  7.  
  8. <servlet>
  9. <servlet-name>wapPayServlet</servlet-name>
  10. <servlet-class>com.ray.alipaywap.controller.WapPayServlet</servlet-class>
  11. </servlet>
  12.  
  13. <servlet-mapping>
  14. <servlet-name>wapPayServlet</servlet-name>
  15. <url-pattern>/wapPayServlet</url-pattern>
  16. </servlet-mapping>
  17.  
  18. </web-app>

三、参考资料

1.SpringBoot_03_依赖本地jar

java支付宝开发-02-手机网站支付的更多相关文章

  1. 支付宝开发之手机网站支付(H5支付)

    其实官方的文档中:https://docs.open.alipay.com/203 介绍的已经很详细了,我就实地的看文档操作了一遍,具体步骤如下: 一.创建应用 流程如下: 首先要有支付宝开放平台: ...

  2. 支付宝手机网站支付流程(Node实现)

    前言 公司M站要接入支付宝,借机研究了一下支付宝的支付流程.毕竟,只有公司才能拿到支付接口权限. 主要参考文档: https://doc.open.alipay.com/doc2/detail?tre ...

  3. 手机网站支付如何接入支付宝简易版支付功能PHP版

    接入支付宝准备工作:(关于账号可以是个体商户也可以是企业账号但必须有营业执照) 1.登录蚂蚁金服开放平台  2.创建应用,应用分类网页应用和移动应用.应用提交审核审核通过后得到Appid才能调用相应的 ...

  4. 支付宝支付之扫码支付(电脑网站支付)、H5支付(手机网站支付)相关业务流程分析总结

    前言 在上一篇文章<微信支付之扫码支付.公众号支付.H5支付.小程序支付相关业务流程分析总结>中,分析和总结了微信支付相关支付类型的业务流程,这里作为与微信支付平起平坐不相伯仲的支付宝支付 ...

  5. Asp.Net支付宝手机网站支付接口API之C#版

    一.准备工作 1.使用企业支付宝签约手机网站支付 2.下载支付宝官方demo 文档地址:https://doc.open.alipay.com/doc2/detail?treeId=60&ar ...

  6. 支付宝PC即时到账和手机网站支付同步

    前几个月做了一个旅游网站,有PC站和手机站,涉及支付宝支付功能. 要求:PC站下的单,用户用手机登录也能支付;同理,手机站下的单,PC端登录也能支付. 附支付宝开放平台网址:即时到账 ,手机网站支付. ...

  7. 自己动手搞定支付宝手机网站支付接口 FOR ECShop

    支付宝WAP网站版本的支付接口网上整合的比较少,看到很多网站在卖,顿觉无语. 主要是得自己查看支付宝官方提供的SDK中的开发文档. 支付宝sdk下载地址:https://doc.open.alipay ...

  8. 支付宝集成+网站支付+APP支付+手机网站支付

    网站支付宝 1.申请签约后获得相应的pid:208***开头和key 这里说明下pc网站支付采用md5加密所以这里只需要提供pid和key不需要上传公钥. 2.下载即时到账demo http://do ...

  9. tp3.2 支付宝手机网站支付

    手机网站支付接口,支付宝官方文档:https://b.alipay.com/signing/productSet.htm?navKey=all 第一步: 1)登陆支付宝企业账号 进入支付宝官网 ,登陆 ...

随机推荐

  1. MySQL数据库基础(三)(操作数据表中的记录)

    1.插入记录INSERT 命令:,expr:表达式 注意:如果给主键(自动编号的字段)赋值的话,可以赋值'NULL'或'DEFAULT',主键的值仍会遵守默认的规则:如果省略列名的话,所有的字段必须一 ...

  2. 项目构建工具Maven

  3. Java经典编程题50道之三十七

    有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位. public class Example37 { public static v ...

  4. mysql5.7中解决中文乱码的问题

    在使用mysql5.7时,会发现通过web端向数据库中写入中文后会出现乱码,但是在数据库中直接操作SQL语句插入数据后中文就显示正常,这个问题怎么解决呢?此处不对mysql的数据编码过程和原理进行讲解 ...

  5. 单元测试——Qunit

    为什么需要单元测试 正确性:测试可以验证代码的正确性,在上线前做到心里有底 自动化:当然手工也可以测试,通过console可以打印出内部信息,但是这是一次性的事情,下次测试还需要从头来过,效率不能得到 ...

  6. C#委托与事件--后续补充

    委托.事件补充 针对昨天文章 委托:让方法可以跟简单对象一样作为参数进行传递,也就是将方法作为参数进行封装. 方法:本质就是代码段 其实也好理解,目的就是为了封装,多态,既然简单对象如int i可以做 ...

  7. composer安装出现proc_open没有开启问题的解决方案

    今天在安装下载项目的时候,使用composer来安装依赖.遇到了 The Process class relies on proc_open, which is not available on yo ...

  8. PHP中单引号与双引号的区别

    在PHP中,字符串的定义可以使用英文单引号' ',也可以使用英文双引号" ". 一般情况下两者是通用的.但双引号内部变量会解析,单引号则不解析. PHP允许我们在双引号串中直接包含 ...

  9. entity framework core在独立类库下执行迁移操作

    之前学习EFCore的时候,都是在VS创建的默认模板里面进行的,按照官方文档,直接就可以搞定. 今天新项目准备上.Net Core,打算先按照国际惯例,进行分层,数据访问层是用EFCore来做,于是就 ...

  10. Log4j与Log4j2

    完整的软件,日志是必不可少的.程序从开发.测试.维护.运行等环节,都需要向控制台或文件等位置输出大量信息.这些信息的输出,在很多时候是System.out.println()无法完成日志信息根据用途与 ...