java服务端微信APP支付接口详解

Java服务端微信APP支付接口详解

微信APP支付是在APP中使用微信支付的一种方式。它通常使用在Android或iOS移动设备上。

在本篇攻略中,我们将会讲解如何使用Java来构建微信APP支付的服务端接口。

前置条件

在开始构建微信APP支付接口之前,我们需要确保以下条件已经满足:

  • 你已经在微信商户平台上开通了支付功能,并且获得了商户号、支付密钥等相关信息。
  • 你已经熟悉了微信支付的基本概念和API接口。

准备工作

在开始构建服务端接口之前,我们需要完成一些准备工作,包括:

  • 添加微信支付SDK到项目中
  • 配置项目相关信息
  • 构建支付请求

添加微信支付SDK到项目中

我们可以通过以下方式将微信支付SDK添加到项目中:

<dependency>
   <groupId>com.github.wxpay</groupId>
   <artifactId>wxpay-sdk</artifactId>
   <version>3.0.9</version>
</dependency>

配置项目相关信息

我们需要配置一些项目相关的信息,包括商户号、APPID、支付密钥等。可以通过以下方式实现:

WXPayConfig config = new WXPayConfig();
config.setAppID("wxAPPID");
config.setMchID("wxMCHID");
config.setKey("wxPAYKEY");
config.setNotifyURL("http://www.example.com/wxpay/notify");

构建支付请求

在请求支付之前,我们需要先构建请求对象,包含订单号、金额、客户端IP等信息。可以通过以下方式实现:

WXPay wxpay = new WXPay(config);
Map<String, String> data = new HashMap<String, String>();
data.put("body", "腾讯充值中心-QQ会员充值");
data.put("out_trade_no", "2016090910595900000012");
data.put("device_info", "");
data.put("fee_type", "CNY");
data.put("total_fee", "1");
data.put("spbill_create_ip", "123.12.12.123");
data.put("time_start", "20160909105959");
data.put("time_expire", "20160909111959");
data.put("notify_url", "http://www.example.com/wxpay/notify");
data.put("trade_type", "APP");  
Map<String, String> resp = wxpay.unifiedOrder(data);
System.out.println(resp);

支付流程

当我们构建好支付请求之后,接下来将会执行一系列的流程来完成支付。下面是详细的支付流程。

1.生成签名

在完成支付请求之后,我们首先需要对请求参数进行签名,用于在接下来的支付过程中进行校验。可以通过以下方式实现:

data.put("sign", WXPayUtil.generateSignature(data, "wxPAYKEY"));

2.发送支付请求

在完成签名之后,我们将会将支付请求以XML的格式发送到微信支付服务器,并获得服务器的响应。可以通过以下方式实现:

Map<String, String> resp = wxpay.unifiedOrder(data);

3.解析支付结果

接收到微信支付服务器的响应之后,我们需要对响应结果进行解析,以获取支付结果。可以通过以下方式实现:

boolean result = wxpay.isPayResultNotifySignatureValid(resp);
if(result){
   //验证成功
}else{
   //验证失败
}

4.生成APP支付参数

在获取到支付结果之后,我们需要根据结果构建APP支付参数,并传递给客户端。可以通过以下方式实现:

data.put("prepayid", resp.get("prepay_id"));
data.put("partnerid", config.getMchID());
data.put("timestamp", Long.toString(System.currentTimeMillis() / 1000));
data.put("noncestr", WXPayUtil.generateNonceStr());
data.put("package", "Sign=WXPay");
data.put("sign", WXPayUtil.generateSignature(data, config.getKey()));

5.调用APP支付

在构建完APP支付参数后,我们将会在客户端调用APP支付。可以通过以下方式实现:

PayReq req = new PayReq();
req.appId = data.get("appid");
req.partnerId = data.get("partnerid");
req.prepayId = data.get("prepayid");
req.packageValue = data.get("package");
req.nonceStr = data.get("noncestr");
req.timeStamp = data.get("timestamp");
req.sign = data.get("sign");
api.sendReq(req);

示例说明

下面是两个基于Java实现的微信APP支付示例,用于演示如何使用Java构建微信APP支付服务端接口。

示例一

WXPayConfig config = new WXPayConfig();
config.setAppID("wxAPPID");
config.setMchID("wxMCHID");
config.setKey("wxPAYKEY");
config.setNotifyURL("http://www.example.com/wxpay/notify");

WXPay wxpay = new WXPay(config);
Map<String, String> data = new HashMap<String, String>();
data.put("body", "腾讯充值中心-QQ会员充值");
data.put("out_trade_no", "2016090910595900000012");
data.put("device_info", "");
data.put("fee_type", "CNY");
data.put("total_fee", "1");
data.put("spbill_create_ip", "123.12.12.123");
data.put("time_start", "20160909105959");
data.put("time_expire", "20160909111959");
data.put("notify_url", "http://www.example.com/wxpay/notify");
data.put("trade_type", "APP");  
Map<String, String> resp = wxpay.unifiedOrder(data);

boolean result = wxpay.isPayResultNotifySignatureValid(resp);
if(result){
   data.put("prepayid", resp.get("prepay_id"));
   data.put("partnerid", config.getMchID());
   data.put("timestamp", Long.toString(System.currentTimeMillis() / 1000));
   data.put("noncestr", WXPayUtil.generateNonceStr());
   data.put("package", "Sign=WXPay");
   data.put("sign", WXPayUtil.generateSignature(data, config.getKey()));

   PayReq req = new PayReq();
   req.appId = data.get("appid");
   req.partnerId = data.get("partnerid");
   req.prepayId = data.get("prepayid");
   req.packageValue = data.get("package");
   req.nonceStr = data.get("noncestr");
   req.timeStamp = data.get("timestamp");
   req.sign = data.get("sign");
   api.sendReq(req);
}

示例二

WXPayConfig config = new WXPayConfig();
config.setAppID("wxAPPID");
config.setMchID("wxMCHID");
config.setKey("wxPAYKEY");
config.setNotifyURL("http://www.example.com/wxpay/notify");

WXPay wxpay = new WXPay(config);
Map<String, String> data = new HashMap<String, String>();
data.put("body", "腾讯充值中心-QQ会员充值");
data.put("out_trade_no", "2016090910595900000012");
data.put("device_info", "");
data.put("fee_type", "CNY");
data.put("total_fee", "1");
data.put("spbill_create_ip", "123.12.12.123");
data.put("time_start", "20160909105959");
data.put("time_expire", "20160909111959");
data.put("notify_url", "http://www.example.com/wxpay/notify");
data.put("trade_type", "APP");  
Map<String, String> resp = wxpay.unifiedOrder(data);

boolean result = wxpay.isPayResultNotifySignatureValid(resp);
if(result){
   data.put("prepayid", resp.get("prepay_id"));
   data.put("partnerid", config.getMchID());
   data.put("timestamp", Long.toString(System.currentTimeMillis() / 1000));
   data.put("noncestr", WXPayUtil.generateNonceStr());
   data.put("package", "Sign=WXPay");
   data.put("sign", WXPayUtil.generateSignature(data, config.getKey()));

   JSONObject obj = new JSONObject();
   obj.put("appid", data.get("appid"));
   obj.put("partnerid", data.get("partnerid"));
   obj.put("prepayid", data.get("prepayid"));
   obj.put("noncestr", data.get("noncestr"));
   obj.put("package", data.get("package"));
   obj.put("timestamp", data.get("timestamp"));
   obj.put("sign", data.get("sign"));

   return obj.toString();
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java服务端微信APP支付接口详解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 详解android adb常见用法

    详解Android ADB常见用法 ADB(Android Debug Bridge)是Android开发工具包(SDK)中的一个命令行工具,用于与连接的Android设备进行通信和调试。以下是ADB的常见用法及示例说明: 查看已连接设备列表 使用以下命令可以查看当前连接的Android设备列表: adb devices 示例输出: List of devi…

    other 2023年10月13日
    00
  • 论文笔记之:Conditional Generative Adversarial Nets

    论文笔记之: Conditional Generative Adversarial Nets 简介 Conditional Generative Adversarial Nets,简称CGAN,是一种生成对抗网络(GAN)的扩展。相对于传统的GAN,CGAN在输入噪声向量的基础上,额外输入了条件信息,使得生成的结果能够针对条件信息的不同而变化,具有更好的灵活…

    其他 2023年3月28日
    00
  • Win10系统如何使用注册表还原鼠标右键新建功能

    Win10系统可以使用注册表还原鼠标右键新建功能。下面提供一个完整的攻略: 1.打开注册表 在Win10系统中按下Win+R键组合打开运行窗口,在窗口中输入regedit并回车,即可打开注册表编辑器。 2.定位到Explorer项 在注册表编辑器中,展开HKEY_CLASSES_ROOT项,然后找到文件的默认关联项,一般为“.docx”、“.txt”等等。点…

    other 2023年6月27日
    00
  • 飞信的CMD命令行接口批量发送信息

    下面是飞信的CMD命令行接口批量发送信息的攻略。 1. 准备工作 首先,需要准备以下工具和材料: 飞信账号:需要一个已注册的飞信账号 飞信电脑版或手机版:需要先登录飞信电脑版或手机版,获取Cookie和Token等信息 CMD命令行工具:可以使用Windows自带的CMD或者其他第三方工具,如Git Bash等 Python环境:需要安装Python3,并安…

    other 2023年6月26日
    00
  • c#遍历文件夹下全部文件

    当然,我很乐意为您提供有关“C#遍历文件夹下全部文件”的完整攻略。以下是详细的步骤和两个示例: 1 C#遍历文件夹下全部文件 在C#中,可以使用Directory类和FileInfo类来遍历文件夹下的全部文件。这在需要对文件夹中的所有文件进行操作时非常有用。 2 使用Directory类遍历文件夹下全部文件 以下是使用Directory类遍历文件夹下全部文件…

    other 2023年5月6日
    00
  • 卸载gitlab

    卸载 GitLab 在使用 GitLab 进行项目管理的过程中,我们可能会需要卸载掉它。本文将介绍如何卸载 GitLab。 注意! 卸载 GitLab 将删除所有数据,如代码、问题、合并请求、评论等,所以请务必备份重要数据。 步骤一:停止 GitLab 首先需要停止 GitLab 服务: sudo gitlab-ctl stop 步骤二:卸载 GitLab …

    其他 2023年3月29日
    00
  • XPath常用定位节点元素语句总结

    XPath常用定位节点元素语句总结的完整攻略 XPath是一种用于在XML和HTML文档中定位节点的语言。在Web开发中,XPath常用于爬虫、自动化测试等场景。本文将详细讲解XPath常用定位节点元素语句的完整攻略,包括基本概念、语法规则、常用函数和两个示例说明。 基本概念 在XPath中,节点是文档中的基本元素。节点可以是元素、属性、文本、注释等。XPa…

    other 2023年5月5日
    00
  • vue 部署上线清除浏览器缓存的方式

    下面是关于Vue部署上线清除浏览器缓存的方式的完整攻略。 一、为什么需要清除浏览器缓存 在Vue项目部署上线后,用户在访问页面时,有可能会出现页面内容不更新、样式不生效等问题,这很有可能是由于浏览器缓存引起的。为了让用户能够正常的访问最新的页面内容和样式,我们需要清除浏览器缓存。 二、清除浏览器缓存的方式 方式一:手动清除浏览器缓存 用户可以通过手动清除浏览…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部