java微信web支付开发_微信支付java开发详细第三方支付功能开发之支付宝web端支...

f81a36b49146435040fce751582a865f.png

这段时间把支付基本搞完了,因为做的过程中遇到许多问题,特地记录下来,同时方便其他java coder,废话少说,下面开始。

整体思路:在后台,根据参数创建支付宝客户端AlipayClient,发送参数到支付宝,支付宝直接返回一个表单,我们只需要将表单输出到页面上,后续支付宝异步通知,比较重要是验签,支付宝也提供的工具,比较方便。微信支付java开发详细

(jar包或maven的引入这里省略)

1、申请支付宝支付,这里大家自己研究,网上很多教程。

2、创建支付

/**

* 调用支付宝支付alipay.trade.page.pay

* 商户系统请求支付宝接口alipay.trade.page.pay,支付宝对商户请求参数进行校验,而后重定向至用户登录页面。

*

* @param model

* @return

* @throws Exception

*/

public String createAlipay(Model model, String order_no, BigDecimal amount, Integer resource_trad_id, String trad_type, HttpServletResponse response) throws Exception {

String form = "";

User user = (User) model.asMap().get("user");

//生成一笔预付订单流水

String trad_no = "PC_ALIPAY" + OrderNoUtil.leadsNo();//订单流水号

ShareUserTrad trad = new ShareUserTrad();

trad.setResourceTradId(resource_trad_id);

trad.setUserId(user.getId());

trad.setCreatedBy(user.getId());

trad.setLastUpdBy(user.getId());

trad.setOnlineOfflineFlag("0");//线上

trad.setOrderNo(order_no);

trad.setUserTradAmount(amount);

trad.setTradMethod("3");//支付宝

trad.setPayReceiveFlag("2");//支出

trad.setSuccessFlag("0");//交易进行中

trad.setTradType("1");//订单支付

trad.setTradNo(trad_no);

trad.setModifyNum(0);

shareUserTradMapper.insertSelective(trad);

try {

//初始化客户端

AlipayClient alipayClient = new DefaultAlipayClient(Config.alipay_url, Config.alipay_appid, Config.alipay_app_private_key, Config.alipay_format, Config.alipay_charset, Config.alipay_app_public_key, Config.alipay_sign_type);

//创建API对应的request

AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();

alipayRequest.setReturnUrl("");//回退到订单列表页面

alipayRequest.setNotifyUrl("");//在公共参数中设置回跳和通知地址

alipayRequest.setBizContent("{" +

" \"out_trade_no\":\"" + trad_no + "\"," +

" \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," +

//" \"total_amount\":" + amount.toString() + "," +

"\"total_amount\":\"0.01\"," +

" \"subject\":\"订单支付\"," +

" \"body\":\"订单:" + order_no + "支付\"," +

" \"passback_params\":\"" + order_no + "\"" +

" }");//填充业务参数

form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单

} catch (Exception e) {

e.printStackTrace();

String sOut = "";

StackTraceElement[] trace = e.getStackTrace();

for (StackTraceElement s : trace) {

sOut += "\tat " + s + "\r\n";

}

model.addAttribute("failMsg", sOut + "alipay_url:" + Config.alipay_url);

return "/pay/payFail";

}

response.setContentType("text/html;charset=" + Config.alipay_charset);

response.getWriter().write(form);//直接将完整的表单html输出到页面

response.getWriter().flush();

response.getWriter().close();

return null;

}

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/sanxing/article-70423-1.html

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

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

相关文章

Android 监控网络状态

Html代码public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivity (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); if (connectivity null) { Log.i("NetWorkS…

Tokyo Tyrant安装和配置

Tokyo Tyrant安装和配置Tokyo Cabinet是日本人开发的一款DBM数据库,读写速度非常快。Tokyo Tyrant也是由同一作者开发的Tokyo Cabinet网络接口,兼容memcached协议,也可以通过http协议进行数据交换。Tokyo Tyrant加上Tokyo Cabinet构成一款支持…

mysql 最值复杂查询_MySQL高级查询

我们使用SQL查询不能只使用很简单、最基础的SELECT语句查询。如果想从多个表查询比较复杂的信息,就会使用高级查询实现。常见的高级查询包括多表连接查询、内连接查询、外连接查询与组合查询等,今天我们先来学习最常用、面试也很容易被问到的连接查询。我…

java事件类_关于Java事件类的一些思考

第一条是关于添加监听类时,如JButton button newJButton();button.addActionListener(this);如果进行两次注册监听类如再加一条button.addActionListener(this);那么当点击一次button时,button实际上会返回两次结果,相当于点击了两次button。…

java对象和json对象之间互相转换

2019独角兽企业重金招聘Python工程师标准>>> import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import java.util.List;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class MainClass { public static…

HDU 3397 线段树 双懒惰标记

这个是去年遗留历史问题,之前思路混乱,搞了好多发都是WA,就没做了 自从上次做了大白书上那个双重懒惰标记的题目,做这个就思路很清晰了 跟上次大白上那个差不多,这个也是有一个sets标记,代表这个区间全部置…

mysql接口可以重载吗_php 到底可不可以重载

展开全部php 作为一种弱类型语言,本身不能像强类型如java ,c那样,直接的实现重载。不过可e68a84e8a2ad62616964757a686964616f31333337393539以通过一些方法,间接的实现重载。使用一个统一的函数来实现重载。该方法要使用func_get…

SQL Server :理解数据记录结构

原文:SQL Server :理解数据记录结构在SQL Server :理解数据页结构我们提到每条记录都有7 bytes的系统行开销,那这个7 bytes行开销到底是一个什么样的结构,我们一起来看下。 数据记录存储我们具体的数据,换句话说&#…

京东云擎提供了免费的wordpress一键安装功能了

1. 京东云擎(http://jae.jd.com)提供了免费的个人博客WordPress一键安装功能了,如下图,给开发者分享福利! 免费的应用,提供了源码,提供了数据库: 我之前把文章发到首页,遭到了封杀!本…

java 对象加密_java.security包实现对象加密

Java原生支持常见的加密算法,例如DES、RSA。随便写点关于Java安全包的东西。Java.security.Provider对象官方的解释是:实现了 Java 安全性的一部分或者全部。provider 可能实现的服务包括:算法(如 DSA、RSA、MD5 或 SHA-1),密钥的…

ajax请求模拟登录

前台 if (Session["username"] ! null){<div class"login"><span style"width:155px;height:85px;display:inline-block;margin-left:50px;margin-top:25px;text-align:center">(Session["username"]) 您好&#xff01;&…

Distinct源码分析

以前比较两个List数据&#xff0c;筛选出所需要的数据时候&#xff0c;一直套两层for循环来执行。用到去重(Distinct)的时候&#xff0c;这两个需求其实都是一样的&#xff0c;都是需要比较两个集合&#xff0c;查看了下它的源码&#xff0c;里面确实有值得借鉴的地方。 先附上…

python3图片转代码_python3图片转换二进制存入mysql示例代码

python3图片转换二进制存入mysql示例代码发布于 2014-09-29 18:00:01 | 198 次阅读 | 评论: 0 | 来源: 网友投递Python编程语言Python 是一种面向对象、解释型计算机程序设计语言&#xff0c;由Guido van Rossum于1989年底发明&#xff0c;第一个公开发行版发行于1991年。Pytho…

oracle面试题[关于case when的用法]

表中有A B C三列,用SQL语句实现&#xff1a;当A列大于B列时选择A列否则选择B列&#xff0c;当B列大于C列时选择B列否则选择C列declare v_sal number:2000; v_tax number; begin case when v_salv_tax:v_sal*0.03; when v_salv_tax:v_sal*0.04; when v_salv_tax:v_sal*0.05; whe…

Javascript面向对象研究心得

这段时间正好公司项目须要&#xff0c;须要改动fullcalendar日历插件&#xff0c;有机会深入插件源代码。正好利用这个机会&#xff0c;我也大致学习了下面JS的面向对象编程&#xff0c;感觉收获还是比較多的。 所以写了以下这篇文章希望跟大家探讨探讨JS的面向对象&#xff0c…

矩阵连乘积 ZOJ 1276 Optimal Array Multiplication Sequence

题目传送门 1 /*2 题意&#xff1a;加上适当的括号&#xff0c;改变计算顺序使得总的计算次数最少3 矩阵连乘积问题&#xff0c;DP解决&#xff1a;状态转移方程&#xff1a;4 dp[i][j] min (dp[i][k] dp[k1][j] p[i-1] * p[k] * p[j]) (i<k<j)5 s…

md5加密java实现_MD5加密(java实现)

java实现MD5加密:import java.security.MessageDigest;import sun.misc.BASE64Encoder;public class Tools {/** md5加密算法* return:结果为16进制的字符串长度为32位*/public static String getMd5String(String str) throws Exception{StringBuilder md5Code new StringBui…

POJ 1273 Drainage Ditches 最大流

很裸的最大流问题&#xff0c;不过注意会有重边&#xff0c;o(╯□╰)o&#xff0c;被阴了WA了一发 还有就是要用long long #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #include <stri…

java语言 编译原理_【Java学习】深入分析Java的编译原理

在《Java代码的编译与反编译》中&#xff0c;有过关于Java语言的编译和反编译的介绍。我们可以通过javac命令将Java程序的源代码编译成Java字节码&#xff0c;即我们常说的class文件。这是我们通常意义上理解的编译。但是&#xff0c;字节码并不是机器语言&#xff0c;要想让机…

javaSE_base04_集合框架

四、集合框架1&#xff1a;String类&#xff1a;字符串(重点) (1)多个字符组成的一个序列&#xff0c;叫字符串。 生活中很多数据的描述都采用的是字符串的。而且我们还会对其进行操作。 所以&#xff0c;java就提供了这样的一个类供我们使用。 (2)创建字…