返回

揭秘微信JSAPI支付流程:Java代码实现

见解分享

前言:开启微信支付之旅

微信支付已成为中国最受欢迎的在线支付方式之一,为企业和个人提供了便捷、安全的交易体验。本文将重点介绍微信JSAPI支付流程,这是一种允许用户直接在微信公众号或小程序中完成支付的解决方案。

第一步:公众号配置和开发

  1. 登录微信公众平台: 首先,你需要登录微信公众平台并注册一个公众号。
  2. 功能设置: 进入"公众号设置",找到"功能设置",开启"JS接口安全域名"功能。
  3. 开发配置: 在"开发"菜单下,选择"基本配置",并配置URL、Token和生成EncodingAESKey。请注意,在完成配置之前,请勿点击"提交"按钮。

第二步:后端接口实现

现在,我们需要实现一个后端接口来与微信认证配合。

import com.google.gson.Gson;
import com.google.gson.JsonObject;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class WxpayServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Gson gson = new Gson();
        JsonObject reqObj = gson.fromJson(req.getReader(), JsonObject.class);

        // 此处省略部分验证逻辑

        // 获取预支付订单信息
        JsonObject orderInfo = prepareOrder(reqObj);

        // 构建JSAPI支付参数
        String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);
        String nonceStr = createNonceStr();
        String prepayId = orderInfo.get("prepay_id").getAsString();
        String packageStr = "prepay_id=" + prepayId;
        String signType = "MD5";

        // 生成签名
        String signStr = "appId=" + reqObj.get("appId") +
                "&nonceStr=" + nonceStr +
                "&package=" + packageStr +
                "&signType=" + signType +
                "&timeStamp=" + timeStamp +
                "&key=YOUR_API_KEY";
        String sign = getMd5Sign(signStr);

        // 返回JSAPI支付参数
        JsonObject respObj = new JsonObject();
        respObj.addProperty("appId", reqObj.get("appId"));
        respObj.addProperty("timeStamp", timeStamp);
        respObj.addProperty("nonceStr", nonceStr);
        respObj.addProperty("package", packageStr);
        respObj.addProperty("signType", signType);
        respObj.addProperty("paySign", sign);

        resp.setContentType("application/json");
        resp.getWriter().write(gson.toJson(respObj));
    }
}

在这个后端接口中,我们:

  1. 从请求中提取必要的参数。
  2. 调用prepareOrder()方法生成预支付订单信息。
  3. 构建JSAPI支付参数,包括时间戳、随机字符串、预支付订单ID、签名类型和签名。
  4. 生成签名。
  5. 返回JSAPI支付参数给前端。

第三步:前端集成和支付

在完成后端接口实现后,我们需要在前端集成微信支付功能。这需要使用微信提供的JavaScript SDK。

// 初始化微信支付
wx.config({
    appId: 'YOUR_APP_ID',
    timestamp: timeStamp,
    nonceStr: nonceStr,
    package: packageStr,
    signType: 'MD5',
    paySign: paySign
});

// 调起微信支付
wx.chooseWXPay({
    success: function () {
        // 支付成功回调
    },
    fail: function () {
        // 支付失败回调
    },
    cancel: function () {
        // 取消支付回调
    }
});

在前端脚本中,我们需要:

  1. 初始化微信支付SDK。
  2. 使用我们从后端接口接收到的JSAPI支付参数初始化微信支付。
  3. 调用wx.chooseWXPay()方法调起微信支付。

结语:掌握微信JSAPI支付

通过遵循本文中的步骤,你已经掌握了微信JSAPI支付流程。你现在可以为你的公众号或小程序集成微信支付功能,让你的用户享受便捷的在线支付体验。记住,持续关注微信支付的最新文档和更新,以确保你始终使用最新的最佳实践。