java支付宝开发-02-手机网站支付
源码已上传github,欢迎专注:https://github.com/shirayner/alipay-wap
一、基础部分
1.手机网站支付产品介绍
1.1 阅读官方介绍: 手机网站支付产品介绍
1.2 看完官方的介绍之后,可以做出如下总结:
通过接入此接口,能让商家接入支付宝的支付功能。具体支付流程如下:
(1)若用户已安装支付宝客户端,则在支付时会唤起支付宝客户端进行支付。
(2)若用户未安装支付宝客户端,则需要在网页中登录支付宝账号进行支付。
2.接入准备
参考:java支付宝开发-01-沙箱环境接入 ,配置好沙箱环境,并下载好沙箱钱包
二、代码实现
1.AlipayConfig
此文件主要存放支付宝的一些配置信息 ,大家需要 登录沙箱环境 ,找到相关配置参数,并据此修改配置文件。
package com.ray.alipaywap.config; /**
* @author : shirayner
* @date : 2018/3/9
* @time : 9:36
* @desc : 支付宝的相关配置
**/
public class AlipayConfig {
//支付宝网关名-正式环境
//public static final String OPEN_API_DOMAIN="https://openapi.alipay.com/gateway.do";
//支付宝网关名-沙箱环境
public static final String OPEN_API_DOMAIN="https://openapi.alipaydev.com/gateway.do"; /** 一、应用相关
*
*/ /**
* 1.应用ID
*/
public static final String APP_ID="2016091100487746"; /**
* 2.应用私钥
*/
public static final String APP_PRIVATE_KEY="应用私钥"; /**
* 3.应用公钥
*/
public static final String APP_PUBLIC_KEY="应用公钥"; /**
* 4.支付宝公钥
*/
public static final String ALIPAY_PUBLIC_KEY="支付宝公钥"; /**
* 二、商家相关
*/ /**
* 1.app域名
* 需要改成自己应用的地址
*/
public static final String APP_DOMAIN = "http://rayge.nat300.top"; /**
* 2.回跳url
* 即付款之后跳回到此页面。注:沙箱环境下,有bug,不会跳到此页面。正式环境下正常。
*/
public static final String RETURN_URL = APP_DOMAIN + "/return_url.jsp"; /**
* 3.通知url
*/
public static final String NOTIFY_URL = APP_DOMAIN + "/notify_url.jsp"; /**
* 三、此部分不用修改
*/
/**
* 5.app_auth_token在ISV代替商家调用接口时使用,商家自己调用,可传null。
*/
public static final String APP_AUTH_TOKEN=""; public static final String SIGN_TYPE = "RSA2"; public static final String CHAR_SET = "UTF-8"; public static final String FORMAT = "json";
}
2.service
2.1 接口——WapPayService
package com.ray.alipaywap.service; import com.alipay.api.response.AlipayTradeWapPayResponse; /**
* @author : shirayner
* @date : 2018/3/12
* @time : 10:48
* @desc :
**/
public interface WapPayService {
public AlipayTradeWapPayResponse pay(String content) throws Exception; }
2.2 实现类——WapPayServiceImpl
package com.ray.alipaywap.service.impl; import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayTradeWapPayResponse;
import com.ray.alipaywap.config.AlipayConfig;
import com.ray.alipaywap.service.WapPayService; /**
* @author : shirayner
* @date : 2018/3/12
* @time : 11:02
* @desc :
**/
public class WapPayServiceImpl implements WapPayService{ // 初始化alipayClient对象
public static AlipayClient alipayClient = new DefaultAlipayClient(
AlipayConfig.OPEN_API_DOMAIN, AlipayConfig.APP_ID, AlipayConfig.APP_PRIVATE_KEY, AlipayConfig.FORMAT,
AlipayConfig.CHAR_SET, AlipayConfig.ALIPAY_PUBLIC_KEY); /**
* 手机网站支付
* @param content 订单信息
* @return
* @throws AlipayApiException
*/
@Override
public AlipayTradeWapPayResponse pay(String content) throws AlipayApiException {
//1. 创建API对应的request
AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest(); //2. 在公共参数中设置回跳和通知地址(应用提供给支付宝的请求路径),沙箱模式中不起作用(不知道是不是这个原因,支付宝技术客服告诉我正式上线后就没问题)
alipayRequest.setReturnUrl(AlipayConfig.APP_DOMAIN+"/index.jsp");
alipayRequest.setNotifyUrl(AlipayConfig.NOTIFY_URL);
// 填充业务参数
alipayRequest.setBizContent(content); //3.执行请求
AlipayTradeWapPayResponse alipayResponse = alipayClient
.pageExecute(alipayRequest);
return alipayResponse;
}
}
3. servlet-WapPayServlet
接收前台订单信息,并调用支付宝接口,来唤起支付宝app来进行支付。
package com.ray.alipaywap.controller; import com.alipay.api.response.AlipayTradeWapPayResponse;
import com.ray.alipaywap.config.AlipayConfig;
import com.ray.alipaywap.service.WapPayService;
import com.ray.alipaywap.service.impl.WapPayServiceImpl; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; public class WapPayServlet extends javax.servlet.http.HttpServlet {
private WapPayService wapPayService; @Override
public void init() throws ServletException {
super.init();
wapPayService = new WapPayServiceImpl(); } @Override
protected void doPost(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException { //1.设置将发送到客户端的响应的内容类型
resp.setContentType("text/html;charset="+ AlipayConfig.CHAR_SET); //1.1
String subject = request.getParameter("subject");
String total_amount = request.getParameter("total_amount"); String out_trade_no = String.valueOf(System.currentTimeMillis());
//1.2 //2.填充业务参数
String content="{" +
" \"out_trade_no\":\""+out_trade_no+"\"," +
" \"total_amount\":\""+total_amount+"\"," +
" \"subject\":\""+subject+"\"," +
" \"product_code\":\"QUICK_WAP_PAY\"" +
" }"; //3.去支付
AlipayTradeWapPayResponse alipayResponse= null;
try {
alipayResponse = wapPayService.pay(content); } catch (Exception e) {
e.printStackTrace();
}
String form= alipayResponse.getBody();
System.out.println(form); //4.输出支付宝返回的表单页面
resp.setContentType("text/html;charset=" + AlipayConfig.CHAR_SET);
resp.getWriter().write(form);//直接将完整的表单html输出到页面
resp.getWriter().flush();
resp.getWriter().close(); } @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
4.前台JSP页面
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h2>订单详情</h2>
</body>
<form action="/wapPayServlet" method="post" >
商品: <input id="subject" type="text" name="subject" value="IphoneX 128G"/> <br><br>
总价: <input id="total_amount" type="text" name="total_amount" value="99.88"/> <br><br>
<input type="submit" value="提交订单" /> <br><br>
</form> </html>
5.web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" > <web-app>
<display-name>Archetype Created Web Application</display-name> <servlet>
<servlet-name>wapPayServlet</servlet-name>
<servlet-class>com.ray.alipaywap.controller.WapPayServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>wapPayServlet</servlet-name>
<url-pattern>/wapPayServlet</url-pattern>
</servlet-mapping> </web-app>
三、参考资料
java支付宝开发-02-手机网站支付的更多相关文章
- 支付宝开发之手机网站支付(H5支付)
其实官方的文档中:https://docs.open.alipay.com/203 介绍的已经很详细了,我就实地的看文档操作了一遍,具体步骤如下: 一.创建应用 流程如下: 首先要有支付宝开放平台: ...
- 支付宝手机网站支付流程(Node实现)
前言 公司M站要接入支付宝,借机研究了一下支付宝的支付流程.毕竟,只有公司才能拿到支付接口权限. 主要参考文档: https://doc.open.alipay.com/doc2/detail?tre ...
- 手机网站支付如何接入支付宝简易版支付功能PHP版
接入支付宝准备工作:(关于账号可以是个体商户也可以是企业账号但必须有营业执照) 1.登录蚂蚁金服开放平台 2.创建应用,应用分类网页应用和移动应用.应用提交审核审核通过后得到Appid才能调用相应的 ...
- 支付宝支付之扫码支付(电脑网站支付)、H5支付(手机网站支付)相关业务流程分析总结
前言 在上一篇文章<微信支付之扫码支付.公众号支付.H5支付.小程序支付相关业务流程分析总结>中,分析和总结了微信支付相关支付类型的业务流程,这里作为与微信支付平起平坐不相伯仲的支付宝支付 ...
- Asp.Net支付宝手机网站支付接口API之C#版
一.准备工作 1.使用企业支付宝签约手机网站支付 2.下载支付宝官方demo 文档地址:https://doc.open.alipay.com/doc2/detail?treeId=60&ar ...
- 支付宝PC即时到账和手机网站支付同步
前几个月做了一个旅游网站,有PC站和手机站,涉及支付宝支付功能. 要求:PC站下的单,用户用手机登录也能支付;同理,手机站下的单,PC端登录也能支付. 附支付宝开放平台网址:即时到账 ,手机网站支付. ...
- 自己动手搞定支付宝手机网站支付接口 FOR ECShop
支付宝WAP网站版本的支付接口网上整合的比较少,看到很多网站在卖,顿觉无语. 主要是得自己查看支付宝官方提供的SDK中的开发文档. 支付宝sdk下载地址:https://doc.open.alipay ...
- 支付宝集成+网站支付+APP支付+手机网站支付
网站支付宝 1.申请签约后获得相应的pid:208***开头和key 这里说明下pc网站支付采用md5加密所以这里只需要提供pid和key不需要上传公钥. 2.下载即时到账demo http://do ...
- tp3.2 支付宝手机网站支付
手机网站支付接口,支付宝官方文档:https://b.alipay.com/signing/productSet.htm?navKey=all 第一步: 1)登陆支付宝企业账号 进入支付宝官网 ,登陆 ...
随机推荐
- EF的Join()和Include()差异性教程
在EF中表连接常用的有Join()和Include(),两者都可以实现两张表的连接,但又有所不同. 1.Join(),两表不必含有外键关系,需要代码手动指定连接外键相等(具有可拓展性,除了值相等,还能 ...
- 使用Vue和thrift建立前后端交互的demo
初识thrift thrift 是 facebook 于2007年开发的一款跨平台 RPC(Remote Procedure Call) 软件框架, 它可以在多种平台上进行无缝交互,数据传输使用二进制 ...
- 关于Spring事务的原理,以及在事务内开启线程,连接池耗尽问题.
主要以结果为导向解释Spring 事务原理,连接池的消耗,以及事务内开启事务线程要注意的问题. Spring 事务原理这里不多说,网上一搜一大堆,也就是基于AOP配合ThreadLocal实现. 这里 ...
- 内存映射mmap的几个api及其使用
内存映射 mmap 内存映射mmap函数的作用是建立一段可以被两个或者多个程度读写的内存段,一个程序对他进行任何修改,对其它程序可见.同样,这个功能可以用在对文件的处理上,mmap函数创建一个指向一个 ...
- nimi SearchEngin 项目思路及算法
最近做一个轻量文本搜索项目,在项目实行过程中,如果使用余弦求网页相似度,不能适应海量网页查重.看了那本<这就是搜索引擎 核心技术详解>后,对simhash算法有一定的理解,并且喜欢上了这 ...
- 6.2 PowerPC处理器如何处理MSI中断请求
PowerPC处理器使用OpenPIC中断控制器或者MPIC中断控制器,处理外部中断请求.其中MPIC中断控制器基于OpenPIC中断控制器,但是作出了许多增强,目前Freescale新推出的Powe ...
- R︱shiny实现交互式界面布置与搭建(案例讲解+学习笔记)
要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗"贝壳"~ --------------------------- 看了看往期的博客,这个话题竟然是第 ...
- 实战DeviceIoControl 之五:列举已安装的存储设备
Q 前几次我们讨论的都是设备名比较清楚的情况,有了设备名(路径),就可以直接调用CreateFile打开设备,进行它所支持的I/O操作了.如果事先并不能确切知道设备名,如何去访问设备呢? A 访问设备 ...
- vxWorks BSP主要文件目录的组成及主要文件的作用
vxWorks BSP主要文件目录的组成及主要文件的作用 1.目录target/config/All: 这个目录下的文件是所有BSP文件共享的,不是特别需要不要更改里面的任何文件. a.configA ...
- vxworks下的串口测试程序
VXWORKS串口设置说明: 一般有这么几步: 打开串口 设置串口raw模式,清空输入输出的缓冲区 设置波特率,数据位,停止位,校验方式 便可以开始读和写 打开串口: fd = open(" ...