java支付宝开发-02-手机网站支付

news/2024/5/12 5:06:14/文章来源:https://blog.csdn.net/didi9310/article/details/102125930

源码已上传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";
}
View Code

 

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;}
View Code

 

 

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*/@Overridepublic AlipayTradeWapPayResponse pay(String content) throws AlipayApiException {//1. 创建API对应的requestAlipayTradeWapPayRequest 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;}
}
View Code

 

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;@Overridepublic void init() throws ServletException {super.init();wapPayService = new WapPayServiceImpl();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException {//1.设置将发送到客户端的响应的内容类型resp.setContentType("text/html;charset="+ AlipayConfig.CHAR_SET);//1.1String 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();}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}}
View Code

 

 

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>
View Code

 

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>
View Code

 

 

三、参考资料

1.SpringBoot_03_依赖本地jar

 

转载于:https://www.cnblogs.com/shirui/p/8568449.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_764718.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

浅析:SEO是什么意思?

搜索引擎优化&#xff08;SEO&#xff09;简单理解&#xff1a;它是网络推广的一种形式&#xff0c;简单来说就是通过seo优化&#xff0c;调整网站内部与网站外部的结构&#xff0c;使得自己的网站能够与搜索引擎更加友好&#xff0c;从而提升网站目标关键词在搜索引擎上的排名…

域名怎么查询是否被微信封 微信检测网站拦截查询

背景 经常遇到一些公司做活动因为一个 h5 页面被分享多次遭到微信拦截&#xff0c;导致所有的分享都白做了。 所以就有一个想法&#xff0c;能不能实时监测这个 h5 的 URL 一单发现被拦截 就立马更换 域名或 url 在网上看到好多借口&#xff0c;但是都是付费 api 。 解决方案 …

如何使用阿里云搭建wordpress网站(图文教程+小白专用+Linux版)?...

【声明】 在任何云服务器上安装wordpress网站都是异曲同工&#xff0c;操作系统分为window和Linux。在这里&#xff0c;我选择linux操作系统来搭建wordpress网站。 如果要了解基本的网站搭建流程&#xff0c;请看文章&#xff1a;如何低成本建立属于自己的网站&#xff1f; ht…

想获得网站访问者的联系方式吗,这篇文章全讲透了

2019独角兽企业重金招聘Python工程师标准>>> 随着大数据和人工智能的火爆&#xff0c;网络爬虫也被大家熟知起来。随之也出现一个问题&#xff0c;爬取隐私数据是违法的。其实&#xff0c;网络爬虫作为一门技术&#xff0c;技术本身是不违法的&#xff0c;且在大多数…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

网站跟踪(web tracking)的原理

网站跟踪并不是什么新的技术&#xff0c;而只是一种比较常见的应用&#xff0c;甚至都谈不上新。这里想跟大家分享一下&#xff0c;里面有我的一些想法和思考&#xff0c;如果有不准确的地方&#xff0c;还请不吝赐教。 为什么要跟踪 现在大家对隐私都比较敏感&#xff0c;而…

反网站跟踪的原理

这是一篇论文的读书笔记“I DO Not Know What You Visited Last Summer: Protecting Users from Third-party Web Tracking With TrackingFree Browser”原文链接 overview 因为该作者致力于解决网站跟踪问题&#xff0c;首先得明确什么是网站跟踪&#xff0c;请参考博客&…

php搭建锁机网站,C/C++轻松写电脑锁机程序

首先得知道cmd界面中可以对windows用户帐号进行操作在c/c中用system("")就能直接与cmd进行通信下面是代码&#xff0c;很简单&#xff0c;不再解释&#xff0c;我们从演示来看这两句代码的功能&#xff01;# include # include # include int main(){int i 1;int a;…

url获取网站信息不包含网页源文件内的标签_爬虫入门一:爬取一个网页

首先&#xff0c;我们提出一个问题&#xff1a;网页是什么&#xff1f;在我看来&#xff0c;网页就是信息&#xff0c;是我们请求一个公司或者个人发给我们的信息。我们举一个例子&#xff0c;我们在浏览器中输入http://www.baidu.com 然后回车&#xff0c;就会看到我们很熟悉的…

照片欣赏网站php,php照片相册共享系统

照片相册共享系统使用的设是PHP技术和mysql数据库技术开发.该系统是高校计算机专业的毕业设计题目&#xff0c;主要是针对高校毕业设计进行题目的设计&#xff0c;系统功能简单&#xff0c;模块清晰&#xff0c;想要的朋友可以联系我.总体功能模块1 图片管理图片管理应该包括的…

nginx 使用gizp压缩提高网站的传输速度

网站的css,js ,xml,html 在传输的时候可以使用gzip压缩&#xff0c;提高访问速度&#xff0c; 网站上的图片&#xff0c;视频等其它多媒体文件&#xff0c;因为压缩效果不好&#xff0c;所以对于图片没有必要支压缩&#xff0c; 如果想要优化&#xff0c;可以图片的生命周期设…

增加索引会锁表吗_企业为什么要建设网站?你的网站这些问题存在吗?

原标题&#xff1a;企业为什么要建设网站&#xff1f;你的网站这些问题存在吗&#xff1f;如今是创业的人越来越多。很多人纷纷都注册了自己的公司&#xff0c;想自己创业&#xff0c;而多数人创业的时候&#xff0c;想到的第1点就是先建立一个自己的网站。那么你建立自己网站的…

flask session_用Flask写一个图书作者管理网站(附完整代码)

这次给大家带来的是一个非常小的Flask案例&#xff0c;首先看一下做出来的效果&#xff1a;我们主要分为两部分来做&#xff0c;这两部分分别是上图的上部分的表单和下面的列表展示。如果你还没用过 flask&#xff0c;可以先看一下其官方文档的快速入门&#xff1a;http://docs…

PHP 伪静态seo,伪静态、静态、动态网站对SEO的影响有多大?

我看过非常多的关于伪静态、静态、动态网站方面的一些知识&#xff0c;网上有非常多的说法&#xff0c;里边很多不懂装懂的人&#xff0c;胡说八道。甚至是有很多人转载别人的文章加工一下&#xff0c;就开始卖弄学问。最终的结果是&#xff0c;非常多的人不知道到底怎么做才对…

html 居中_SEO小龙人:HTML+CSS之display:inline-block实现三个标签并排居中显示

实现效果&#xff1a;<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns"http://www.w3.org/1999/xhtml"><head><meta http-equiv…

具体案例 快速原型模型_产品经理笔试知识点:白盒测试、开发模型、网站跳失率和RFM模型...

概述现今互联网产品经理的岗位的招聘原来越热门&#xff0c;笔者把网上搜集到的产品经理笔试易错题做了完整的解析和举例说明&#xff0c;每篇4道互联网产品经理笔试易错题&#xff0c;分析知识点&#xff0c;提升IT视野见识。本文主要介绍白盒测试&#xff0c;软件的几种常见开…

提升工作效率的那些网站——私藏工具推荐

提升工作效率的那些网站——私藏工具推荐 有哪些网站能提升你的工作效率&#xff1f; 分享一下那些能大幅提高工作效率的网站&#xff0c;都是我们一直在用并且认为在同类型中比较好用的。希望也能帮助到你。 梅花网—灵感素材 关于文案、新媒体的聚合网站&#xff0c;干货满…

推荐一个好玩网站,黑白照片上色、人脸识别都不是问题!

欢迎关注我的微信公号&#xff1a;小张Python! 大家好&#xff0c;我是 zeroing ~&#xff0c;今天给大家分享一个好玩的网站&#xff0c;只需把本地老照片上传&#xff0c;接下来网站就自动对黑白照片进行上色 老照片上色技术 其实已经出来很早了&#xff0c;去年 5 月份时 B…

词云绘制,推荐三种 Python包外加一个在线网站!

词云是文本可视化的重要方式&#xff0c;可将大段文本中的关键语句和词汇高亮展示&#xff0c; 本篇文章先介绍几种制作词云的 Python 库&#xff0c;分别是 WordCloud、StyleCloud、Pyecharts&#xff1b;再加一个在线词云制作网站&#xff1b;最后通过代码实操和可视化效果对…

Vue + Django + PaddleOCR 实现一个在线OCR 识别网站,一键上传快速识别

大家好&#xff0c;我是小张~ 之前写过一篇博文介绍了一款OCR 识别库&#xff0c;识别精度能达到商用级别&#xff0c;并且支持多语言识别&#xff0c;使用详情请参考文章&#xff1a;文本OCR&#xff0c;这个Python库识别效果不输于商用&#xff01;&#xff0c; 除了Paddle…