网上有很多关于微信支付(java)的demo,但是很多demo都不能直接运行,本文在总结之前demo的例子的基础上,添加了一下自己在做项目时实际遇到的问题,总结出一份可直接使用的博客,供大家参考。
再说正事之前,先说下关于微信支付的事情,微信支付就是一个巨坑,坑的不能在坑,希望大家有些许心里准备。
业务流程
这个微信官网说的还是很详细的,还配了图。我还要再说一遍。
用户点击一个支付按钮-->用户看到了一个输入密码的界面,包含金额等一些信息-->用户输入密码后出来一个支付成功的页面(这部分流程都是微信自己完成的,我们什么都不用做)-->返回系统自己的页面
开发流程
1)获取用户授权
2)调用统一下单接口获取预支付id
3)H5调起微信支付的内置JS
4)支付完成后,微信回调URL的处理
我把我之前做的扒拉下来给大家看一下
收钱页面回传参数给后台,调用后台的topay.servlet页面
public class TopayServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request
* the request send by the client to the server
* @param response
* the response send by the server to the client
* @throws ServletException
* if an error occurred
* @throws IOException
* if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 网页授权后获取传递的参数
//String userId = request.getParameter("userId");
String orderNo =request.getParameter("orderNo");
String money =request.getParameter("money");
String productName = request.getParameter("productName");
String customerid =request.getParameter("customerid");
String billingid =request.getParameter("billingid");
String enddate =request.getParameter("enddate");
String openId =request.getParameter("openid");
/**
* 为了测试方面,才在这里加入测试数据的
*/
String userId = "XXXXX";//测试的话可以设置自己的微信号为测试账号
// 金额转化为分为单位
float sessionmoney = Float.parseFloat(money);
String finalmoney = String.format("%.2f", sessionmoney);
finalmoney = finalmoney.replace(".", "");
// 商户相关资料 下面的这四个填写自己的商户号的内容
String appid = "???????";
String appsecret = "??????";
String partner = "??????";
String partnerkey = &#